glmnet_tidiers {broom} | R Documentation |
Tidying methods for regularized fits produced by glmnet
, summarizing
the estimates across values of the penalty parameter lambda.
## S3 method for class 'glmnet' tidy(x, ...) ## S3 method for class 'glmnet' glance(x, ...)
x |
a "glmnet" object |
... |
extra arguments (not used) |
Note that while this representation of GLMs is much easier to plot and combine than the default structure, it is also much more memory-intensive. Do not use for extremely large, sparse matrices.
No augment
method is yet provided even though the model produces
predictions, because the input data is not tidy (it is a matrix that
may be very wide) and therefore combining predictions with it is not
logical. Furthermore, predictions make sense only with a specific
choice of lambda.
All tidying methods return a data.frame without rownames, whose structure depends on the method chosen.
tidy
produces a data.frame with one row per combination of
coefficient (including the intercept) and value of lambda for which the estimate
is nonzero, with the columns:
term |
coefficient name (V1...VN by default, along with "(Intercept)") |
step |
which step of lambda choices was used |
estimate |
estimate of coefficient |
lambda |
value of penalty parameter lambda |
dev.ratio |
fraction of null deviance explained at each value of lambda |
glance
returns a one-row data.frame with the values
nulldev |
null deviance |
npasses |
total passes over the data across all lambda values |
if (require("glmnet", quietly = TRUE)) { set.seed(2014) x <- matrix(rnorm(100*20),100,20) y <- rnorm(100) fit1 <- glmnet(x,y) head(tidy(fit1)) glance(fit1) library(dplyr) library(ggplot2) tidied <- tidy(fit1) %>% filter(term != "(Intercept)") ggplot(tidied, aes(step, estimate, group = term)) + geom_line() ggplot(tidied, aes(lambda, estimate, group = term)) + geom_line() + scale_x_log10() ggplot(tidied, aes(lambda, dev.ratio)) + geom_line() # works for other types of regressions as well, such as logistic g2 <- sample(1:2, 100, replace=TRUE) fit2 <- glmnet(x, g2, family="binomial") head(tidy(fit2)) }