grekw {gkwreg} | R Documentation |
Gradient of the Negative Log-Likelihood for the EKw Distribution
Description
Computes the gradient vector (vector of first partial derivatives) of the
negative log-likelihood function for the Exponentiated Kumaraswamy (EKw)
distribution with parameters alpha
(\alpha
), beta
(\beta
), and lambda
(\lambda
). This distribution is the
special case of the Generalized Kumaraswamy (GKw) distribution where
\gamma = 1
and \delta = 0
. The gradient is useful for optimization.
Usage
grekw(par, data)
Arguments
par |
A numeric vector of length 3 containing the distribution parameters
in the order: |
data |
A numeric vector of observations. All values must be strictly between 0 and 1 (exclusive). |
Details
The components of the gradient vector of the negative log-likelihood
(-\nabla \ell(\theta | \mathbf{x})
) for the EKw (\gamma=1, \delta=0
)
model are:
-\frac{\partial \ell}{\partial \alpha} = -\frac{n}{\alpha} - \sum_{i=1}^{n}\ln(x_i)
+ \sum_{i=1}^{n}\left[x_i^{\alpha} \ln(x_i) \left(\frac{\beta-1}{v_i} -
\frac{(\lambda-1) \beta v_i^{\beta-1}}{w_i}\right)\right]
-\frac{\partial \ell}{\partial \beta} = -\frac{n}{\beta} - \sum_{i=1}^{n}\ln(v_i)
+ \sum_{i=1}^{n}\left[\frac{(\lambda-1) v_i^{\beta} \ln(v_i)}{w_i}\right]
-\frac{\partial \ell}{\partial \lambda} = -\frac{n}{\lambda} - \sum_{i=1}^{n}\ln(w_i)
where:
-
v_i = 1 - x_i^{\alpha}
-
w_i = 1 - v_i^{\beta} = 1 - (1-x_i^{\alpha})^{\beta}
These formulas represent the derivatives of -\ell(\theta)
, consistent with
minimizing the negative log-likelihood. They correspond to the relevant components
of the general GKw gradient (grgkw
) evaluated at \gamma=1, \delta=0
.
Value
Returns a numeric vector of length 3 containing the partial derivatives
of the negative log-likelihood function -\ell(\theta | \mathbf{x})
with
respect to each parameter: (-\partial \ell/\partial \alpha, -\partial \ell/\partial \beta, -\partial \ell/\partial \lambda)
.
Returns a vector of NaN
if any parameter values are invalid according
to their constraints, or if any value in data
is not in the
interval (0, 1).
Author(s)
Lopes, J. E.
References
Nadarajah, S., Cordeiro, G. M., & Ortega, E. M. (2012). The exponentiated Kumaraswamy distribution. Journal of the Franklin Institute, 349(3),
Cordeiro, G. M., & de Castro, M. (2011). A new family of generalized distributions. Journal of Statistical Computation and Simulation,
Kumaraswamy, P. (1980). A generalized probability density function for double-bounded random processes. Journal of Hydrology, 46(1-2), 79-88.
(Note: Specific gradient formulas might be derived or sourced from additional references).
See Also
grgkw
(parent distribution gradient),
llekw
(negative log-likelihood for EKw),
hsekw
(Hessian for EKw, if available),
dekw
(density for EKw),
optim
,
grad
(for numerical gradient comparison).
Examples
# Assuming existence of rekw, llekw, grekw, hsekw functions for EKw
# Generate sample data
set.seed(123)
true_par_ekw <- c(alpha = 2, beta = 3, lambda = 0.5)
if (exists("rekw")) {
sample_data_ekw <- rekw(100, alpha = true_par_ekw[1], beta = true_par_ekw[2],
lambda = true_par_ekw[3])
} else {
sample_data_ekw <- rgkw(100, alpha = true_par_ekw[1], beta = true_par_ekw[2],
gamma = 1, delta = 0, lambda = true_par_ekw[3])
}
hist(sample_data_ekw, breaks = 20, main = "EKw(2, 3, 0.5) Sample")
# --- Find MLE estimates ---
start_par_ekw <- c(1.5, 2.5, 0.8)
mle_result_ekw <- stats::optim(par = start_par_ekw,
fn = llekw,
gr = grekw, # Use analytical gradient for EKw
method = "BFGS",
hessian = TRUE,
data = sample_data_ekw)
# --- Compare analytical gradient to numerical gradient ---
if (mle_result_ekw$convergence == 0 &&
requireNamespace("numDeriv", quietly = TRUE)) {
mle_par_ekw <- mle_result_ekw$par
cat("\nComparing Gradients for EKw at MLE estimates:\n")
# Numerical gradient of llekw
num_grad_ekw <- numDeriv::grad(func = llekw, x = mle_par_ekw, data = sample_data_ekw)
# Analytical gradient from grekw
ana_grad_ekw <- grekw(par = mle_par_ekw, data = sample_data_ekw)
cat("Numerical Gradient (EKw):\n")
print(num_grad_ekw)
cat("Analytical Gradient (EKw):\n")
print(ana_grad_ekw)
# Check differences
cat("Max absolute difference between EKw gradients:\n")
print(max(abs(num_grad_ekw - ana_grad_ekw)))
} else {
cat("\nSkipping EKw gradient comparison.\n")
}
# Example with Hessian comparison (if hsekw exists)
if (mle_result_ekw$convergence == 0 &&
requireNamespace("numDeriv", quietly = TRUE) && exists("hsekw")) {
num_hess_ekw <- numDeriv::hessian(func = llekw, x = mle_par_ekw, data = sample_data_ekw)
ana_hess_ekw <- hsekw(par = mle_par_ekw, data = sample_data_ekw)
cat("\nMax absolute difference between EKw Hessians:\n")
print(max(abs(num_hess_ekw - ana_hess_ekw)))
}