Кажется, я получаю ту же ошибку каждый раз, когда пытаюсь запустить vif () в R - PullRequest
0 голосов
/ 07 ноября 2019

Я проверяю мультиколлинеарность в наборе данных. Я могу запустить VIF() просто отлично, чтобы проверить наличие мультиколлинеарности. Тем не менее, когда я запускаю vif(), чтобы проверить каждую переменную, чтобы определить, стоит ли ее удалять, я продолжаю каждый раз получать одну и ту же ошибку, даже если у моего одноклассника почти тот же самый код и его работы.

Насколько я понимаю, в VIF() вы хотите запустить модель, например lm() данных, поэтому я сделал это, и это работает. Но vif() Я считаю, что вы должны просто иметь возможность подключить фрейм данных, поэтому я попытался сделать мои данные data.frame перед тем, как пропустить их через vif(), но, похоже, это не работает. Чтобы посмотреть, что произойдет, я также попытался запустить lm() данных через vif(), но это определенно не работает.

    d <- read.table('9.10data.txt', col.names = c('y', 
    'x1','x2','x3','x4'))
    reg <- lm(data = d, y~x1+x2+x3+x4)
    VIF(reg)
    # VIF = 26.94823 > 10 so multicollinearity is present.
    d <- data.frame(d)
    vif(d)

Я ожидал бы получить своего рода матрицу, которая показываетvif значения для каждой переменной x1, x2, x3, x4, но я получаю сообщение об ошибке: Ошибка в y [, i]: неверное количество измерений

Если данные помогут, перейдите кhttp://users.stat.ufl.edu/~rrandles/sta4210/Rclassnotes/data/textdatasets/KutnerData/Chapter%20%209%20Data%20Sets/CH09PR10.txt и я просто копирую и вставляю данные в текстовый редактор и сохраняю как текстовый файл.

1 Ответ

0 голосов
/ 07 ноября 2019

Функция vif в пакете usdm содержит в себе y. Таким образом, если вы используете y в качестве переменной в вашем наборе данных, вы столкнетесь с ошибкой. Следовательно, переименование y устраняет ошибку, такую ​​как

library(usdm) # For vif function
library("fmsb") # For VIF function
d <- read.table('try.txt', col.names = c('z', 'x1','x2','x3','x4'))
reg <- lm(data = d, z~x1+x2+x3+x4)
VIF(reg)
# VIF = 26.94823 > 10 so multicollinearity is present.
d <- data.frame(d)
vif(d)
# Variables       VIF
# 1         z 26.948231
# 2        x1  3.711784
# 3        x2  1.419321
# 4        x3 12.570942
# 5        x4  5.034769

Спасибо @jav за предоставление такой большой детализации в https://stackoverflow.com/a/58742464/6123824

...