r - 修改模型变量时出现 R 错误:“model.matrix() 中的模型框架和公式不匹配”
问题描述
我想编写一个函数,它接受一个模型,计算 vif,并返回一个删除共线变量的新模型。这是我的代码:
remodel_vif <- function(mdl, vif_cutoff){
bad_x <- mdl %>% car::vif() %>% {which(. > vif_cutoff)}
new_df <- mdl$model %>% dplyr::select(.,-bad_x)
return(lm(new_df))
}
如果我执行该函数,它会引发错误:
data <- data.frame(c1 = c(1,5,3,2,1,7,7,7,6,5), c2 = 0.3*c(1:10), c3 = 0.5*c(1:10)+rnorm(10), c4 = 0.1*rnorm(10))
remodel_vif(data,2.0)
Error in model.matrix.default(mt, mf, contrasts) :
model frame and formula mismatch in model.matrix()
但是,如果我在函数中进行此更改:
new_df <- mdl$model %>% dplyr::select(.,-bad_x) %>% as.matrix() %>% as.data.frame()
然后它工作:
> remodel_vif(lm(data),2)
Call:
lm(formula = new_df)
Coefficients:
(Intercept) c4
2.700 4.268
注意:我知道这个函数没有多大意义,也不是很有用——我只是想知道是什么导致了错误的出现,以及为什么像这样来回转换它会有所帮助。
我在 SE 上发现了一个类似的问题,但我看不出它是如何相关的:我没有使用原始模型对象的参数——我只提取其底层数据框并对其进行修改。我看不出被删除的变量怎么可能有任何交互作用......
解决方案
推荐阅读
- javascript - vuetify 标签与芯片使用,而不是按回车
- spring - jUnit:没有找到接口 com.querydsl.core.types.Predicate 的主要或默认构造函数
- c# - 优雅的 List 初始化方式
- > 在 C# 中
- asp.net - 我正在尝试为我的 gridview 中的过期项目显示背景红色但无法使用 asp.net
- javascript - 如何使用 ReactJS 向表格中添加新元素
- python - Pyyaml,在 Python 中访问字典
- c - MPI 4 个总进程被杀死(一些可能在清理过程中被 mpirun 杀死)
- ruby - 仅验证嵌套属性 rails 的前两个构建对象标题属性
- c# - 如何解释 ASP.NET Core 2.1 中的 Serilog 配置?
- android - com.android.volley.ServerError 错误 instanceof VolleyError