在glmnet中的汇总统计信息

5
我一直在处理一个数据集,并使用glmnet进行线性LASSO/Ridge回归。
为了简单起见,假设我使用的模型如下:
cv.glmnet(train.features, train.response, alpha=1, nlambda=100, type.measure = "mse", nfolds = 10)

我正在为客户准备演示文稿,需要展示变量的T统计量和R平方值。此外,我还需要绘制模型的残差与拟合值之间的图形。在从头开始创建函数之前,我想问一下库中是否已经涵盖了这些内容。我已经检查了glmnet vignette,但没有找到任何信息。感谢您的帮助!

glmnet用于预测而非推论(尽管它确实会做一种变量选择形式)。我认为目前还没有达成一致的方法来生成标准误差,而且我所看到的唯一获得CI的方法是通过启发式法(不包括在glmnet中)。对于rsq,你可以获得观察值和预测值之间的相关性并将其平方 - 但这并不能考虑模型复杂性。 - user20650
2个回答

9
您的问题的部分答案是:在R软件包中,plotmo函数库中的plotres函数是一种简单的方法,可以为各种模型(包括glmnetcv.glmnet模型)绘制残差图。该软件包附带的plotres vignette中包含了详细信息。
library(glmnet)
data(longley)
mod <- glmnet(data.matrix(longley[,1:6]), longley[,7])
library(plotmo) # for plotres
plotres(mod)

以下是展示的图表。您可以选择子图并通过向plotres传递相应的参数来修改图表。

plot


0
两个软件包“yardstick”和“modelr”可以提供帮助。
我使用caret通过“train()”调用glmnet,返回的对象具有一个$resample对象,其中包含每个交叉验证折叠的RMSE、Rsquared和MAE。
library( tictoc ) # If you don't want to install this, just take out the calls to tic() and toc()
library( caret )
library( tidyverse )

training_folds <- createFolds( dmv, returnTrain = TRUE )

ctl <- trainControl( method = "cv", number = 5, index = training_folds )
tic()
dmv_pp <- preProcess( dmv, method = c( "nzv", "center", "scale" ))
toc() # This can take a while

dmv_train <- predict( dmv_pp, dmv )
# Using just a subset of the data, because otherwise I run out of memory.
mdl <- train( duration_avg ~ ., data = dmv_train[1:1E4,], trControl = ctl,  method = "glmnet",
              tuneGrid = expand.grid(
                alpha = c( 0, 0.5, 1),
                lambda = c( 0.001, 0.01 )
              )
          )

mdl$resample %>% names()

mdl %>%
    listviewer::jsonedit() # This object should contain $resamples

dmv_train <- dmv_train %>%
    modelr::add_predictions( mdl, var = "predicted_duration_avg" ) # I think this should work with any model that has a predict() method

dmv_train %>%
  yardstick::metrics( duration_avg, predicted_duration_avg )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接