# \donttest{
# Assuming existence of rkw, llkw, grkw, hskw functions for Kw
# Generate sample data
set.seed(123)
true_par_kw <- c(alpha = 2, beta = 3)
sample_data_kw <- rkw(100, alpha = true_par_kw[1], beta = true_par_kw[2])
hist(sample_data_kw, breaks = 20, main = "Kw(2, 3) Sample")
# --- Find MLE estimates ---
start_par_kw <- c(1.5, 2.5)
mle_result_kw <- stats::optim(par = start_par_kw,
fn = llkw,
gr = if (exists("grkw")) grkw else NULL,
method = "L-BFGS-B",
lower = c(1e-6, 1e-6),
hessian = TRUE, # Ask optim for numerical Hessian
data = sample_data_kw)
# --- Compare analytical Hessian to numerical Hessian ---
if (mle_result_kw$convergence == 0 &&
requireNamespace("numDeriv", quietly = TRUE) &&
exists("hskw")) {
mle_par_kw <- mle_result_kw$par
cat("\nComparing Hessians for Kw at MLE estimates:\n")
# Numerical Hessian of llkw
num_hess_kw <- numDeriv::hessian(func = llkw, x = mle_par_kw, data = sample_data_kw)
# Analytical Hessian from hskw
ana_hess_kw <- hskw(par = mle_par_kw, data = sample_data_kw)
cat("Numerical Hessian (Kw):\n")
print(round(num_hess_kw, 4))
cat("Analytical Hessian (Kw):\n")
print(round(ana_hess_kw, 4))
# Check differences
cat("Max absolute difference between Kw Hessians:\n")
print(max(abs(num_hess_kw - ana_hess_kw)))
# Optional: Use analytical Hessian for Standard Errors
# tryCatch({
# cov_matrix_kw <- solve(ana_hess_kw) # ana_hess_kw is already Hessian of negative LL
# std_errors_kw <- sqrt(diag(cov_matrix_kw))
# cat("Std. Errors from Analytical Kw Hessian:\n")
# print(std_errors_kw)
# }, error = function(e) {
# warning("Could not invert analytical Kw Hessian: ", e$message)
# })
} else {
cat("\nSkipping Kw Hessian comparison.\n")
cat("Requires convergence, 'numDeriv' package, and function 'hskw'.\n")
}
# }
Run the code above in your browser using DataLab