srt*_*srt 6 modeling regression r glmnet
我有一组多重共线变量,我正在尝试使用岭回归来解决这个问题。我glmnet在 R 中使用 alpha = 0的包(用于岭回归)。
library(glmnet)
Run Code Online (Sandbox Code Playgroud)
我有一系列 lambda 值,我正在通过 cv.glmnet 选择最佳的 lambda 值
lambda <- 10^seq(10, -2, length = 100)
Run Code Online (Sandbox Code Playgroud)
-- 创建模型矩阵并分配 y 变量
x <- model.matrix(dv ~ ., datamatrix) [,-1]
y <- datamatrix$dv
Run Code Online (Sandbox Code Playgroud)
-- 使用交叉验证来确定最佳 lambda 并使用该 lambda 值预测 y
ridge.mod <- glmnet(x, y, alpha = 0, lambda = lambda)
cv.out <- cv.glmnet(x, y, alpha = 0)
ridge.pred <- predict(ridge.mod, s = cv.out$lambda.min, newx = x)
Run Code Online (Sandbox Code Playgroud)
我能够成功做到这一点,但我还必须检查这个特定 lambda 值的 VIF,以确保系数已经稳定并且多重共线性得到控制。但我不确定如何在 GLMNET 中检查 VIF,因为通常的vif()函数会引发此错误。
vcov.default(mod) 中的错误:elnet、glmnet 类模型没有 vcov() 方法
您能否帮助我确定我的方法是否有问题或如何解决此问题?
VIF 是否不适用于 GLMNET 中的验证?
提前致谢。
VIF 仅是自变量集的属性。只要不改变独立变量(例如加性模型),因变量是什么以及使用哪种模型(线性回归、广义模型)并不重要。请参阅包vif中的函数car。因此,应用于弹性网络回归的 VIF 不会告诉您是否已处理多重共线性。它只能告诉您存在多重共线性需要处理。