Computes the exact gradient of log_likelihood_shash with
respect to all regression coefficients. Supplying this gradient to
optim (method "L-BFGS-B") avoids costly and
noisy finite-difference approximations, typically yielding a speedup
and more reliable convergence.
gradient_shash(
params,
X_mu,
X_sigma,
X_epsilon,
X_delta = NULL,
y,
weights = NULL,
fixed_delta = NULL
)Numeric vector: gradient of the negative log-likelihood with
respect to params.
A numeric vector containing all model parameters
Design matrix for location parameter
Design matrix for scale parameter
Design matrix for skewness parameter
Design matrix for tail weight parameter (or NULL for fixed delta)
Response vector
Observation weights
If not NULL, the delta parameter is fixed to this value
With \(z = (y - \mu)/\sigma\) and \(A = \delta \, \mathrm{asinh}(z) + \epsilon\),
the per-observation log-density is
$$\ell = \log\delta - \log\sigma - \tfrac{1}{2}\log(2\pi)
- \tfrac{1}{2}\log(1+z^2) - \tfrac{1}{2}\sinh^2(A) + \log\cosh(A).$$
The gradient uses the chain rule through the linear predictors:
$$\partial\ell/\partial A = \tanh(A) - \sinh(A)\cosh(A)$$
$$\partial\ell/\partial z = -z/(1+z^2) + (\partial\ell/\partial A)\,\delta/\sqrt{1+z^2}$$
$$\partial\ell/\partial\mu = -(\partial\ell/\partial z)/\sigma$$
$$\partial\ell/\partial\log\sigma = -1 - z\,(\partial\ell/\partial z)$$
$$\partial\ell/\partial\epsilon = \partial\ell/\partial A$$
$$\partial\ell/\partial\log\delta = 1 + (\partial\ell/\partial A)\,\delta\,\mathrm{asinh}(z)$$
Coefficient gradients follow as \(-X^\top (w \cdot \partial\ell/\partial\eta)\)
for the negative log-likelihood. Contributions of observations whose linear
predictor is clamped (see log_likelihood_shash) are zeroed, which is
the exact subgradient of the clamped objective. In extreme regions where
\(\sinh(A)\cosh(A)\) would overflow, the gradient magnitude is capped at
a large finite value; these regions coincide with the penalty branch of the
objective, so the capped direction remains correct.