Итак, я отследил эту ошибку до следующей строки кода в функции 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)
в консоли и запустил ваш код. Это позволило мне войти в функцию, чтобы найти проблему.