2017-08-04 90 views
0

在下面的MWE中,我有一个包含70个潜在预测变量的数据集来解释我的变量price1。我想用所有变量进行单变量分析,但包glmulti说我有too many predictors。单变量分析如何可以有太多预测因子?自动变量选择 - 回归线性模型

*我可以通过loop/apply这样做,但我正在寻找更详细的内容。这个类似的问题here也没有解决问题。

test <- read.csv(url("https://raw.githubusercontent.com/vincentarelbundock/Rdatasets/master/csv/Ecdat/Car.csv")) 
library(glmulti) 
glmulti.lm.out <- glmulti(data = test, price1 ~ ., 
          level = 1, 
          method = "h", 
          maxK = 1, 
          confsetsize = 10, 
          fitfunction = "lm") 

Error 
Warning message: 
In glmulti(y = "price1", data = test, level = 1, maxK = 1, method = "h", : 
    !Too many predictors. 

回答

1

这个问题更适合CrossValidated,但这里是我的两美分。对模型进行彻底搜索以找到最佳变量的计算量非常大,并且非常快速地失控。考虑您要求计算机执行的操作:

当您运行详尽的搜索时,计算机正在为每个可能的变量组合建立一个模型。对于尺寸为一的模型,这并不算太坏,因为那只有70个模型。但即使对于一个两变量模型,计算机也必须运行n!/(r!(n-r)!)= 70!/(2!(68)!)= 2415个不同的模型。事情从那里开始失去控制。

作为解决方法,我会为您指出leaps程序包,它具有regsubsets函数。然后,您可以运行前向或后向子集选择模型,并以逐步方式查找最重要的变量。运行后,您可能会抛弃从每个变量中省略的变量,并使用更少的预测变量使用glmulti来运行模型,但没有承诺。

test.data <- 
read.csv(url("https://raw.githubusercontent.com/vincentarelbundock/Rdatasets/ma 
ster/csv/Ecdat/Car.csv"))[,2:71] 
library(leaps) 

big_subset_model <- regsubsets(x = price1 ~ ., data = test.data, nbest = 1, 
method = "forward", really.big = TRUE, nvmax = 70) 
sum.model <- summary(big_subset_model) 
0

一个简单的解决方案univariate分析使用lapply。

test <- read.csv(url("https://raw.githubusercontent.com/vincentarelbundock/Rdatasets/master/csv/Ecdat/Car.csv")) 

reg <- function(indep_var,dep_var,data_source) { 
      formula <- as.formula(paste(dep_var," ~ ", indep_var)) 
      res  <- lm(formula, data = data_source) 
      summary(res) 
} 

lapply(colnames(test), FUN = reg, dep_var = "price1", data_source = test)