Skip to contents

glmnet's cv.glmnet() on the Rust core: on each fold, fits the whole lambda path to the other folds (warm starts) and scores the family's mean deviance on the held-out fold; folds run in parallel. The score per lambda is the folds' mean weighted by fold weight, with its standard error. Matches cv.glmnet() on the same folds.

Usage

elastic_net_cv(
  formula,
  data,
  family = "poisson",
  link = NULL,
  alpha = 1,
  lambda = NULL,
  nlambda = 100,
  lambda_min_ratio = 1e-04,
  standardize = TRUE,
  penalty_factor = NULL,
  offset = NULL,
  weights = NULL,
  folds = 10,
  seed = 1,
  foldid = NULL,
  theta = NULL,
  power = NULL,
  link_power = NULL
)

Arguments

formula

A model formula; offset(...) terms are honoured.

data

A data frame.

family

"gaussian", "poisson", "gamma", "inverse_gaussian", "binomial" (response a proportion, weights the trials), "negative_binomial" (needs theta) or "tweedie" (needs power).

"identity", "log", "logit", "probit", "cloglog", "inverse", "inverse_squared" or "power" (needs link_power); NULL for the family's canonical link.

alpha

Mixing between ridge (0) and the lasso (1).

lambda

Penalty strengths; NULL for a path of nlambda values log-spaced from the smallest lambda that zeroes every coefficient down to lambda_min_ratio times it.

nlambda, lambda_min_ratio

The default path.

standardize

Penalize standardized coefficients.

penalty_factor

Optional penalty factors: a vector with one per design column, or a named vector for some columns (the rest get 1); 0 leaves a column unpenalized.

offset

Optional offset added to any offset() terms.

weights

Optional prior weights.

folds

Number of folds, used when foldid is NULL.

seed

Seed of the fold assignment.

foldid

Optional fold number per row.

theta

Negative binomial theta (variance mu + mu^2 / theta).

power

Tweedie power in (1, 2).

Exponent of the power link.

Value

A list with lambda, mean, se, lambda_min (lowest mean) and lambda_1se (the largest lambda within one standard error of it), and fit, the elastic_net_model on all rows over lambda.

Examples

set.seed(1)
d <- data.frame(x1 = rnorm(80), x2 = rnorm(80))
d$y <- 1 + 2 * d$x1 + rnorm(80)
cv <- elastic_net_cv(y ~ x1 + x2, d, family = "gaussian", nlambda = 30)
coef(cv$fit, lambda = cv$lambda_1se)
#> (Intercept)          x1          x2 
#>    1.083230    1.744625    0.000000