使用Vif函数的尺寸数不正确

时间:2019-11-07 02:57:31

标签: r

我正在尝试使用下面的数据框在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列中的所有数字。

1 个答案:

答案 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),并运行了您的代码。这使我可以进入该功能来查找问题。