| savvy_glm2 | R Documentation |
savvy_glm2 extends the classical glm2 function from the glm2 package by embedding a set of shrinkage-based methods within the iteratively reweighted least squares (IRLS) algorithm.
These shrinkage methods (implemented via savvy_glm.fit2) are designed to improve convergence and estimation accuracy.
The user can specify one or more methods through the model_class argument. When multiple methods are provided (default is c("St", "DSh", "SR", "GSR", "LW", "QIS")),
the function can evaluate them in parallel (controlled by the use_parallel argument) and selects the final model based on the lowest AIC.
savvy_glm2(formula, family = gaussian, data, weights,
model_class = c("St", "DSh", "SR", "GSR", "LW", "QIS", "Sh"), subset,
na.action, start = NULL, etastart, mustart, offset,
control = list(...), model = TRUE,
method = "savvy_glm.fit2", x = FALSE, y = TRUE,
contrasts = NULL, use_parallel = FALSE, use_robust_start = FALSE, ...)
formula |
An object of class "formula": a symbolic description of the model to be fitted. As for |
family |
A description of the error distribution and link function to be used in the model. As for |
data |
An optional data frame, list or environment containing the variables in the model. As for |
weights |
An optional vector of weights to be used in the fitting process. As for |
model_class |
A character vector specifying the shrinkage method(s) to be used in the underlying fitter |
subset |
An optional vector specifying a subset of observations to be used in the fitting process. As for |
na.action |
A function which indicates what should happen when the data contain NAs. As for |
start |
Starting values for the parameters in the linear predictor. As for |
etastart |
Starting values for the linear predictor. As for |
mustart |
Starting values for the vector of means. As for |
offset |
An optional vector specifying a priori known component to be included in the linear predictor during fitting. As for |
control |
A list of control parameters to pass to the iterative fitting process. As for |
model |
A logical value indicating whether the model frame should be included as a component of the returned value. As for |
method |
The method to be used in fitting the model. The default is |
x |
A logical value indicating whether the model matrix used in the fitting process should be returned as a component of the returned value. As for |
y |
A logical value indicating whether the response vector used in the fitting process should be returned as a component of the returned value. As for |
contrasts |
An optional list. See the contrasts.arg of |
use_parallel |
A logical value specifying whether to evaluate multiple shrinkage methods in parallel.
Defaults to |
use_robust_start |
Logical. If |
... |
Additional arguments to be passed to the low level regression fitting functions. As for |
savvy_glm2 improves upon the standard Generalized Linear Model (GLM) fitting process by incorporating
shrinkage estimator functions (St_ost, DSh_ost, SR_ost, GSR_ost, LW_est, QIS_est, and optionally Sh_ost)
within the IRLS algorithm. The function begins with initial parameter estimates and iteratively updates the coefficients using the
specified shrinkage methods. When multiple methods are specified in model_class, they may be evaluated in parallel (if
use_parallel = TRUE), and the final model is selected based on the lowest AIC. In cases where any candidate model returns an NA
or non-finite AIC (such as when using quasi-likelihood families), the deviance is used uniformly as the selection criterion.
Robust Starting Values:
In situations where the user does not provide start, etastart, or mustart, and the chosen family utilizes specific link functions
(such as "log", "sqrt", "inverse", "1/mu^2", or "logit"), standard GLM initialization can sometimes lead to infinite deviance or divergence.
If use_robust_start = TRUE, the underlying savvy_glm.fit2 automatically employs a data-driven optimization approach using the CVXR package to calculate stable starting coefficients.
The value returned by savvy_glm2 has exactly the same structure as that returned by glm2, except for:
method |
the name of the fitter function used, which by default is |
chosen_fit |
the name of the chosen fitting method based on AIC. |
Ziwei Chen, Vali Asimit and Claudio Senatore
Maintainer: Ziwei Chen <Ziwei.Chen.3@citystgeorges.ac.uk>
Marschner, I. C. (2011). glm2: Fitting Generalized Linear Models with Convergence Problems. The R Journal, 3(2), 12–15. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.32614/RJ-2011-012")}
Asimit, V., Avramescu, O., Chen, Z., Rivas, D., & Senatore, C. (2026). GLM Solutions via Shrinkage.
Asimit, V., Cidota, M. A., Chen, Z., & Asimit, J. (2025). Slab and Shrinkage Linear Regression Estimation. Retrieved from https://openaccess.city.ac.uk/id/eprint/35005/.
Ledoit, O. and Wolf, M. (2004). A well-conditioned estimator for large-dimensional covariance matrices. Journal of Multivariate Analysis, 88(2):365–411. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1016/S0047-259X(03)00096-4")}
Ledoit, O. and Wolf, M. (2022). Quadratic shrinkage for large covariance matrices. Bernoulli, 28(3): 1519-1547. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.3150/20-BEJ1315")}
glm, glm2, savvy_glm.fit2
set.seed(123)
n <- 200
p <- 5
X <- matrix(rnorm(n * p), n, p)
colnames(X) <- paste0("X", 1:p)
linear_predictor <- X %*% c(0.5, -0.5, 0.2, 0, 0)
prob <- 1 / (1 + exp(-linear_predictor))
y <- rbinom(n, 1, prob)
df <- data.frame(y = y, X)
fit1 <- savvy_glm2(y ~ ., data = df,
family = binomial(link = "logit"),
model_class = c("St", "DSh", "LW"),
use_parallel = FALSE)
print(fit1$chosen_fit)
print(coef(fit1))
eta <- abs(X %*% c(0.5, -0.2, 0.1, 0, 0)) + 1
mu_quad <- eta^2
y_quad <- rpois(n, lambda = mu_quad)
df_quad <- data.frame(y = y_quad, X)
fit2 <- savvy_glm2(y ~ ., data = df_quad,
family = poisson(link = "sqrt"),
model_class = c("SR", "St", "QIS"),
use_robust_start = TRUE,
use_parallel = FALSE)
print(fit2$chosen_fit)
print(coef(fit2))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.