首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每次尝试在R中运行vif()时,似乎都会收到相同的错误

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

Stack Overflow用户
提问于 2019-11-08 00:17:27
回答 1查看 166关注 0票数 0

我正在测试数据集中的多重共线性。为了测试是否存在多重共线性,我可以很好地运行VIF()。然而,当我运行vif()来测试每个变量是否值得删除时,我每次都会继续得到相同的错误,即使我的一个同学有几乎完全相同的代码和他的工作。

据我所知,在VIF()中,你想要运行一个模型,比如数据的lm(),所以我这样做了,而且效果很好。但是我相信你应该能够插入一个数据框架,所以我试着在通过vif()之前将我的数据转换成data.frame,但这似乎不起作用。为了看看会发生什么,我还尝试通过vif()运行数据的lm(),但这肯定不起作用。

代码语言:javascript
复制
    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的错误值,但我总是得到错误消息:错误在y,i:错误的维数

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

EN

回答 1

Stack Overflow用户

发布于 2019-11-08 00:28:35

usdm包中的vif函数包含y。因此,如果在数据集中使用y作为变量,将会遇到错误。因此,重命名y会消除如下错误

代码语言:javascript
复制
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中提供了如此出色的细节

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58752902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档