我使用glmnet来解决多重共线性问题,为了获得最佳lambda,我想计算变量之间的VIF

时间:2017-07-01 07:26:21

标签: r regression linear-regression glmnet

我正在使用glmnet,为了获得最好的lambda,我想检查变量之间的VIF。谁能建议我怎样才能做到这一点?

以下是我关注的代码, fielddfm 是包含自变量的数据框:

x<- model.matrix(depvar ~ ., fielddfm) [,-1]
y <- depvar
lambda <- 10^seq(10, -2, length = 100)
ridge.mod <- glmnet(x, y, alpha = 0, lambda = lambda)
predict(ridge.mod, s = 0, exact = T, type = 'coefficients')
cv.out <- cv.glmnet(x, y, alpha = 0, nfolds = 3)
bestlam <- cv.out$lambda.min
ridge.pred <- predict(ridge.mod, s = bestlam, newx = x)
predict(ridge.mod, type = "coefficients", s = bestlam)'

在这里,我得到了不同促销车辆的系数,但我想知道,不同自变量的最佳lambda的VIF值

请问我可以建议如何实现这个目标?

2 个答案:

答案 0 :(得分:0)

因为a)VIF是预测变量而不是模型的函数,b)脊回归保持所有变量而不管lambda,你可以从任意拟合的线性模型得到VIF。例如:

vifs = car::vif(lm(y ~ ., data = X)) 

其中y是您的回复,X是预测变量的数据框。请注意,结果与y中包含的值无关。

鉴于上述情况,这个问题首先是否有意义,这有点可疑......

答案 1 :(得分:0)

我认为无法根据glmnet中的功能选择来计算VIF。但是,您可以从glmnet结果中提取特征并用lm进行调整,因为vif将接受lm中的对象。 answer中的代码可能会有所帮助。