每次尝试在R中运行vif()时,我似乎都会遇到相同的错误

时间:2019-11-07 16:17:26

标签: r linear-regression

我正在测试数据集中的多重共线性。我可以正常运行VIF()来测试是否存在多重共线性。但是,当我运行vif()来测试每个变量是否值得删除时,即使我的同班同学几乎拥有完全相同的代码和他的作品,每次我仍然会遇到相同的错误。 / p>

根据我的理解,您想在VIF()中运行一个模型,例如数据的lm(),所以我做到了,而且行得通。但是vif()我相信您应该只能够插入数据帧,因此在通过vif()之前,我曾尝试将我的数据设为data.frame,但这似乎行不通。为了看看会发生什么,我还尝试通过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)

我希望得到一种矩阵,该矩阵显示每个变量x1,x2,x3,x4的vif值,但我不断收到错误消息:         y [,i]中的错误:维数错误

如果数据有帮助,请转到http://users.stat.ufl.edu/~rrandles/sta4210/Rclassnotes/data/textdatasets/KutnerData/Chapter%20%209%20Data%20Sets/CH09PR10.txt 然后我将数据复制并粘贴到文本编辑器中,并保存为txt文件。

1 个答案:

答案 0 :(得分:0)

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

中提供了如此详细的信息