2017-08-04 41 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)