我正在使用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值
请问我可以建议如何实现这个目标?
答案 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中的代码可能会有所帮助。