用于变量分析的自动 VIF(变量重要性因子)

Auto VIF (Variable importance factor) for variable analysis

我想为变量计算一个“自动”VIF,一个与另一个。例如在 iris 数据集中,我希望 Sepal.Width 作为目标值,其他作为解释变量。

首先,我删除了 Species 列,因此只保留变量。然后我想遍历每个变量并再次测试其他变量。最后,我希望将 VIF 结果存储在列表中。

这是我试过的:

library(car)
library(dplyr)
library(tidyr)

iris_clean <- iris %>%
  select(-Species)

col_names <- colnames(iris)
i <- 1
for(col in col_names) {
  regr <- lm(col ~ ., data=iris_clean) 
  list[i] <- vif(regr)  
  i <- i+1
}

出于某种原因,我得到一个错误:

Error in model.frame.default(formula = col ~ ., data = iris_clean, drop.unused.levels = TRUE) : 
  variable lengths differ (found for 'Sepal.Length')

我不明白,因为变量的长度相同。拜托,我们将不胜感激。

你可以试试这个-

library(car)
library(dplyr)
library(tidyr)

iris_clean <- iris %>% select(-Species)
col_names <- colnames(iris_clean)
result <- vector('list', length(col_names))

for(i in seq_along(col_names)) {
  regr <- lm(paste0(col_names[i], '~ .'), data=iris_clean) 
  result[[i]] <- vif(regr)  
}

result

#[[1]]
# Sepal.Width Petal.Length  Petal.Width 
#    1.270815    15.097572    14.234335 

#[[2]]
#Sepal.Length Petal.Length  Petal.Width 
#    4.278282    19.426391    14.089441 

#[[3]]
#Sepal.Length  Sepal.Width  Petal.Width 
#    3.415733     1.305515     3.889961 

#[[4]]
#Sepal.Length  Sepal.Width Petal.Length 
#    6.256954     1.839639     7.557780