首页 > 解决方案 > 修改模型变量时出现 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 上发现了一个类似的问题,但我看不出它是如何相关的:我没有使用原始模型对象的参数——我只提取其底层数据框并对其进行修改。我看不出被删除的变量怎么可能有任何交互作用......

标签: rruntime-error

解决方案


推荐阅读