Ошибка R при изменении переменных модели: «несоответствие фрейма модели и формулы в model.matrix ()» - PullRequest
0 голосов
/ 02 мая 2018

Я хотел написать функцию, которая берет модель, вычисляет 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, но я не понимаю, насколько это уместно: я не использую параметры объекта исходной модели - я только извлекаю базовый фрейм данных и изменяю его. Я не вижу, как могут быть какие-то взаимодействия от удаленных переменных, висящих вокруг ...

...