如何使用glmnet在R中计算Lasso回归的R平方值

7

我正在使用glmnet包在R中执行套索回归:

fit.lasso <- glmnet(x,y)
plot(fit.lasso,xvar="lambda",label=TRUE)

fit.lasso plot

然后使用交叉验证:

cv.lasso=cv.glmnet(x,y)
plot(cv.lasso)

lambda VS MSE

一篇教程 (最后一页) 对于R^2的建议如下:

R_Squared =  1 - cv.lasso$cvm/var(y)

但是它没有起作用。

我希望了解模型在拟合数据时的效率/性能。通常,在r中执行lm()函数时,我们会得到R^2和调整后的R^2。


"it did not work" 的意思是什么? 这确实会产生一个答案。你认为这个答案有问题吗? - Patrick Breheny
3个回答

7

如果您使用的是"高斯"系列,可以通过以下方式访问R-squared值:

fit.lasso$glmnet.fit$dev.ratio


从glmnet文档中,dev.ratio是“解释(对于“elnet”,这是R平方)的(空)偏差的分数”。 - Quazi Irfan
这是一个非常具有误导性的答案,因为它没有调整过拟合。R平方应基于交叉验证偏差比率计算。 - Patrick Breheny

2

我使用示例数据来演示它

加载库(glmnet)

加载数据

data(BinomialExample)
head(x) 
head(y)

用于交叉验证

cvfit = cv.glmnet(x, y, family = "binomial", type.measure = "class")
rsq = 1 - cvfit$cvm/var(y)
plot(cvfit$lambda,rsq)

enter image description here


1
你提供了一个分类问题的例子,但OP正在处理回归问题。 - David

0

首先使用选定的lambda拟合Lasso模型

...

lasso.model <- glmnet(x=X,y=Y, family = "binomial", alpha=1, lambda = cv.model$lambda.min )

然后,您可以从拟合模型中获得伪R2。

`lasso.model$dev.ratio`

这个值表示模型解释的偏差/零偏差。

不要这样做,你不想根据cv.model重新调整glmnet。实际上,已经有一个与cv.model完全相同的cv.model$glmnet.fit。 看起来Woodstock正在正确地进行操作。 - profPlum

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