Неверное количество измерений с использованием функции VIF - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь запустить функцию vif (строчные буквы) в rstudio, используя приведенный ниже фрейм данных, но постоянно получаю сообщение об ошибке

Ошибка в y [, i]: неверное количество измерений

Что я делаю не так? Почему функция vif выдает ошибку?

Код, который я уже пробовал, приведен ниже.

library(usdm) # needed for vif function
x1 <- c(1,2,3,4,5)
x2 <- c(6,7,8,9,10)
x3 <- c(11,12,13,14,15)
y <- c(44,55,66,77,88)
dataFrame = data.frame(x1,x2,x3,y)
vif(dataFrame)

Ожидаемые результаты должны быть такими, как таблица,

  Variables            VIF
1        x1       9.294002
2        x2       3.324287
3        x3       5.665959
4         Y      12.011500

Примечание: в этом случае все числа в столбце VIF выбраны мной случайным образом.

1 Ответ

1 голос
/ 07 ноября 2019

Итак, я отследил эту ошибку до следующей строки кода в функции usdm:::.vif (подробнее о том, как я это сделал позже, если вам интересно):

lm(y[, i] ~ ., data = y[-i])

Здесь y это ваш dataFrame объект, а i это индекс столбца из вашего dataFrame .... поэтому, если вы сделали что-то подобное, вы столкнетесь с той же ошибкой:

y = dataFrame
i = 1
lm(y[, i] ~ ., data = y[-i])

Я считаю, что проблема здесь в том, что функция .vif называет ваш объект (dataFrame) как y, и ваши данные также имеют переменную с именем y.

Чтобы обойти это, вы можете простопереименуйте переменную y в вашем фрейме данных, например, z:

library(usdm) # needed for vif function
x1 <- c(1,2,3,4,5)
x2 <- c(6,7,8,9,10)
x3 <- c(11,12,13,14,15)
z <- c(44,55,66,77,88)
dataFrame = data.frame(x1,x2,x3,z)
vif(dataFrame)

Если вам интересно:

Чтобы отследить эту ошибку, яПервоначально просто набрал в консоли функцию vif, чтобы посмотреть код. Тем не менее, это общая функция. Я следовал Как я могу просмотреть исходный код функции? и, выполнив:

showMethods("vif")
getMethod("vif", "data.frame")

Я смог увидеть код для указанной функции. В раскрытом коде вы увидите точку, где выполняется следующая строка:

v <- .vif(x)

Затем я запустил debugonce(usdm:::.vif) в консоли и запустил ваш код. Это позволило мне войти в функцию, чтобы найти проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...