这是我在stackoverflow.com上遇到的第一个问题,请随时指出我在“问问题”中的错误以及代码错误。顺便说一句,英语不是我的母语,所以我会尽力而为。
我有一个线性模型,其中包含许多解释变量(独立变量)
model <- lm(y ~ x1 + x2 + x3 + ... + x100)
其中一些线性相互依赖(多重共线性)。
[我希望机器搜索具有最高VIF系数(例如x2
)的解释变量的名称,将其从公式中删除,然后使用新公式运行旧的lm函数
model <- lm(y ~ x1 + x3 + ... + x100)
我已经学习了如何获取具有最高VIF系数的解释变量的名称:
max_vif <- function(x) {
vifac <- data.frame(vif(x))
nameofmax <- rownames(which(vifac == max(vifac), arr.ind = TRUE))
return(nameofmax)
}
但是我仍然不明白如何搜索所需的解释变量,将其从公式中删除并再次运行函数。
谢谢!
我们可以使用update
函数并粘贴在需要删除的列中。这是一个例子:
fit1 <- lm(wt ~ mpg + cyl + am, data = mtcars)
coef(fit1)
# (Intercept) mpg cyl am
# 4.83597190 -0.09470611 0.08015745 -0.52182463
rm_var <- "am"
fit2 <- update(fit1, paste0(".~. - ", rm_var))
coef(fit2)
# (Intercept) mpg cyl
# 5.07595833 -0.11908115 0.08625557