r - 是否有用于替换(或完全删除)解释线性模型(lm)中的变量的函数?
问题描述
我有一个包含许多解释变量(自变量)的线性模型
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)
}
但我仍然不明白如何搜索所需的解释变量,将其从公式中删除并再次运行该函数。
解决方案
问题解决了!
我创建了一个包含lm
模型所有变量的列表:
Price <- list(y,x1,...,x100)
然后我使用不同的方式设置lm
模型:
model <- lm(y ~ ., data = Price)
所以我们可以从Price
列表中删除具有最高 VIF 的变量。
有了我已经提出的功能,代码将是:
Price <- list(y,x1,x2,...,x100)
model <- lm(y ~ ., data = Price)
max_vif <- function(x) { # Function for finding name of variable with the highest VIF
vifac <- data.frame(vif(x))
nameofmax <- rownames(which(vifac == max(vifac), arr.ind = TRUE))
return(nameofmax)
}
n <- max(data.frame(vif(model)))
while(n >= 5) { # Loop for deleting variable with the highest VIF from `Price` list one after another, untill there is no VIF equal or higher then 5
Price[[m]] <- NULL
model_auto <- lm(y ~ ., data = Price)
m <- max_vif(model)
n <- max(data.frame(vif(model)))
}
推荐阅读
- powershell - 在命令提示符下从 WebClient.DownloadString 运行 Powershell 脚本
- macos - 在 Applescript 中获取所选 Apple Note 的 ID
- adapter - B2Bi SFTP Server 适配器的线程和内存管理
- terminal - PhpStorm 在终端中选择文本
- asp.net - .Net Core 刷新令牌在发布后不起作用
- python - 在 2d Ising 模型中查找系统的能量
- excel - 将单元格中输入的日期与电子表格选项卡标签中的字符串进行比较
- elasticsearch - Elasticsearch 中的 params['_source'] 总是返回相同的源
- unity3d - 我的布娃娃刚体正在对自行车车身施加质量或力
- reactjs - 如何防止通过 React 中的输入字段完成的每个父状态更新时子重新渲染?