# \donttest{
# Assuming existence of rbkw, llbkw, grbkw, hsbkw functions for BKw
# Generate sample data
set.seed(123)
true_par_bkw <- c(alpha = 2, beta = 3, gamma = 1, delta = 0.5)
if (exists("rbkw")) {
sample_data_bkw <- rbkw(100, alpha = true_par_bkw[1], beta = true_par_bkw[2],
gamma = true_par_bkw[3], delta = true_par_bkw[4])
} else {
sample_data_bkw <- rgkw(100, alpha = true_par_bkw[1], beta = true_par_bkw[2],
gamma = true_par_bkw[3], delta = true_par_bkw[4], lambda = 1)
}
hist(sample_data_bkw, breaks = 20, main = "BKw(2, 3, 1, 0.5) Sample")
# --- Find MLE estimates ---
start_par_bkw <- c(1.5, 2.5, 0.8, 0.3)
mle_result_bkw <- stats::optim(par = start_par_bkw,
fn = llbkw,
gr = grbkw, # Use analytical gradient for BKw
method = "BFGS",
hessian = TRUE,
data = sample_data_bkw)
# --- Compare analytical gradient to numerical gradient ---
if (mle_result_bkw$convergence == 0 &&
requireNamespace("numDeriv", quietly = TRUE)) {
mle_par_bkw <- mle_result_bkw$par
cat("\nComparing Gradients for BKw at MLE estimates:\n")
# Numerical gradient of llbkw
num_grad_bkw <- numDeriv::grad(func = llbkw, x = mle_par_bkw, data = sample_data_bkw)
# Analytical gradient from grbkw
ana_grad_bkw <- grbkw(par = mle_par_bkw, data = sample_data_bkw)
cat("Numerical Gradient (BKw):\n")
print(num_grad_bkw)
cat("Analytical Gradient (BKw):\n")
print(ana_grad_bkw)
# Check differences
cat("Max absolute difference between BKw gradients:\n")
print(max(abs(num_grad_bkw - ana_grad_bkw)))
} else {
cat("\nSkipping BKw gradient comparison.\n")
}
# --- Optional: Compare with relevant components of GKw gradient ---
# Requires grgkw function
if (mle_result_bkw$convergence == 0 && exists("grgkw")) {
# Create 5-param vector for grgkw (insert lambda=1)
mle_par_gkw_equiv <- c(mle_par_bkw[1:4], lambda = 1.0)
ana_grad_gkw <- grgkw(par = mle_par_gkw_equiv, data = sample_data_bkw)
# Extract components corresponding to alpha, beta, gamma, delta
ana_grad_gkw_subset <- ana_grad_gkw[c(1, 2, 3, 4)]
cat("\nComparison with relevant components of GKw gradient:\n")
cat("Max absolute difference:\n")
print(max(abs(ana_grad_bkw - ana_grad_gkw_subset))) # Should be very small
}
# }
# \donttest{
# Assuming existence of rbkw, llbkw, grbkw, hsbkw functions for BKw
# Generate sample data
set.seed(123)
true_par_bkw <- c(alpha = 2, beta = 3, gamma = 1, delta = 0.5)
if (exists("rbkw")) {
sample_data_bkw <- rbkw(100, alpha = true_par_bkw[1], beta = true_par_bkw[2],
gamma = true_par_bkw[3], delta = true_par_bkw[4])
} else {
sample_data_bkw <- rgkw(100, alpha = true_par_bkw[1], beta = true_par_bkw[2],
gamma = true_par_bkw[3], delta = true_par_bkw[4], lambda = 1)
}
hist(sample_data_bkw, breaks = 20, main = "BKw(2, 3, 1, 0.5) Sample")
# --- Find MLE estimates ---
start_par_bkw <- c(1.5, 2.5, 0.8, 0.3)
mle_result_bkw <- stats::optim(par = start_par_bkw,
fn = llbkw,
gr = grbkw, # Use analytical gradient for BKw
method = "BFGS",
hessian = TRUE,
data = sample_data_bkw)
# --- Compare analytical gradient to numerical gradient ---
if (mle_result_bkw$convergence == 0 &&
requireNamespace("numDeriv", quietly = TRUE)) {
mle_par_bkw <- mle_result_bkw$par
cat("\nComparing Gradients for BKw at MLE estimates:\n")
# Numerical gradient of llbkw
num_grad_bkw <- numDeriv::grad(func = llbkw, x = mle_par_bkw, data = sample_data_bkw)
# Analytical gradient from grbkw
ana_grad_bkw <- grbkw(par = mle_par_bkw, data = sample_data_bkw)
cat("Numerical Gradient (BKw):\n")
print(num_grad_bkw)
cat("Analytical Gradient (BKw):\n")
print(ana_grad_bkw)
# Check differences
cat("Max absolute difference between BKw gradients:\n")
print(max(abs(num_grad_bkw - ana_grad_bkw)))
} else {
cat("\nSkipping BKw gradient comparison.\n")
}
# --- Optional: Compare with relevant components of GKw gradient ---
# Requires grgkw function
if (mle_result_bkw$convergence == 0 && exists("grgkw")) {
# Create 5-param vector for grgkw (insert lambda=1)
mle_par_gkw_equiv <- c(mle_par_bkw[1:4], lambda = 1.0)
ana_grad_gkw <- grgkw(par = mle_par_gkw_equiv, data = sample_data_bkw)
# Extract components corresponding to alpha, beta, gamma, delta
ana_grad_gkw_subset <- ana_grad_gkw[c(1, 2, 3, 4)]
cat("\nComparison with relevant components of GKw gradient:\n")
cat("Max absolute difference:\n")
print(max(abs(ana_grad_bkw - ana_grad_gkw_subset))) # Should be very small
}
# }
Run the code above in your browser using DataLab