我正在尝试使用下面的数据框在rstudio中运行vif函数(小写字母),但我仍然收到错误提示
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列中的所有数字。
答案 0 :(得分:1)
因此,我在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
函数来查看代码。但是,它是一个通用函数。我遵循How can I view the source code for a function?并这样做:
showMethods("vif")
getMethod("vif", "data.frame")
我能够看到该功能的代码。在显示的代码中,您将看到执行以下行的点:
v <- .vif(x)
然后我在控制台中运行debugonce(usdm:::.vif)
,并运行了您的代码。这使我可以进入该功能来查找问题。