Tidy summarizes information about the components of a model. A model component might be a single term in a regression, a single hypothesis, a cluster, or a class. Exactly what tidy considers to be a model component varies cross models but is usually self-evident. If a model has several distinct types of components, you will need to specify which components to return.

# S3 method for cv.glmnet
tidy(x, ...)

## Arguments

x A cv.glmnet object returned from glmnet::cv.glmnet(). Additional arguments. Not used. Needed to match generic signature only. Cautionary note: Misspelled arguments will be absorbed in ..., where they will be ignored. If the misspelled argument has a default value, the default value will be used. For example, if you pass conf.lvel = 0.9, all computation will proceed using conf.level = 0.95. Additionally, if you pass newdata = my_tibble to an augment() method that does not accept a newdata argument, it will use the default value for the data argument.

tidy(), glmnet::cv.glmnet()

Other glmnet tidiers: glance.cv.glmnet, glance.glmnet, tidy.glmnet

## Value

A tibble::tibble() with columns:

lambda

Value of penalty parameter lambda.

nzero

Number of coefficients that are exactly zero for given lambda.

std.error

The standard error of the regression term.

conf.low

lower bound on confidence interval for cross-validation estimated loss.

conf.high

upper bound on confidence interval for cross-validation estimated loss.

estimate

Median loss across all cross-validation folds for a given lamdba

## Examples


library(glmnet)
set.seed(27)

nobs <- 100
nvar <- 50
real <- 5

x <- matrix(rnorm(nobs * nvar), nobs, nvar)
beta <- c(rnorm(real, 0, 1), rep(0, nvar - real))
y <- c(t(beta) %*% t(x)) + rnorm(nvar, sd = 3)

cvfit1 <- cv.glmnet(x,y)

tidy(cvfit1)#> # A tibble: 73 x 6
#>    lambda estimate std.error conf.low conf.high nzero
#>     <dbl>    <dbl>     <dbl>    <dbl>     <dbl> <int>
#>  1  1.45      17.3      1.96     15.3      19.3     0
#>  2  1.32      17.2      1.98     15.2      19.1     1
#>  3  1.20      16.9      1.95     15.0      18.9     1
#>  4  1.09      16.7      1.93     14.8      18.6     1
#>  5  0.997     16.7      1.92     14.8      18.6     1
#>  6  0.909     16.8      1.91     14.9      18.7     2
#>  7  0.828     16.9      1.92     15.0      18.8     3
#>  8  0.754     17.0      1.94     15.1      18.9     5
#>  9  0.687     17.1      1.96     15.2      19.1     7
#> 10  0.626     17.3      1.98     15.3      19.3     7
#> # ... with 63 more rowsglance(cvfit1)#> # A tibble: 1 x 2
#>   lambda.min lambda.1se
#>        <dbl>      <dbl>
#> 1      0.997       1.45
library(ggplot2)
tidied_cv <- tidy(cvfit1)
glance_cv <- glance(cvfit1)

# plot of MSE as a function of lambda
g <- ggplot(tidied_cv, aes(lambda, estimate)) +
geom_line() +
scale_x_log10()
g
# plot of MSE as a function of lambda with confidence ribbon
g <- g + geom_ribbon(aes(ymin = conf.low, ymax = conf.high), alpha = .25)
g
# plot of MSE as a function of lambda with confidence ribbon and choices
# of minimum lambda marked
g <- g +
geom_vline(xintercept = glance_cv$lambda.min) + geom_vline(xintercept = glance_cv$lambda.1se, lty = 2)
g
# plot of number of zeros for each choice of lambda
ggplot(tidied_cv, aes(lambda, nzero)) +
geom_line() +
scale_x_log10()
# coefficient plot with min lambda shown
tidied <- tidy(cvfit1$glmnet.fit) ggplot(tidied, aes(lambda, estimate, group = term)) + scale_x_log10() + geom_line() + geom_vline(xintercept = glance_cv$lambda.min) +
geom_vline(xintercept = glance_cv\$lambda.1se, lty = 2)