2016-12-09 79 views
0

我是一個新的R用戶,我在R中用函數'vglm'使用多項式迴歸(即具有超過2類的響應變量的邏輯迴歸)。在我的數據集中,有11個連續預測變量和1個響應變量,分爲3類。如何獲得R中多項式迴歸的最佳子集?

我想得到我的迴歸的最佳子集,但我不知道該怎麼做。有沒有任何功能,或者我必須手動執行。因爲線性函數看起來不合適。

我已經嘗試bestglm函數,但其​​結果似乎不適用於多項式迴歸。

我也嘗試了一種收縮方法,glmnet相對於套索。它選擇模型中的所有變量。但另一方面,使用vglm的多項式迴歸報告一些變量不重要。

我在互聯網上搜索了很多,包括這個網站,但還沒有找到任何好的答案。所以我在這裏問,因爲我需要真正的幫助。 感謝

+0

這些建模函數中的大多數(如果不是全部的話)都可以處理多項模型,但是如果您是R的新手,則數據組裝方式或模型規範/解釋可能存在問題。例如,'glmnet'可能說最好的模型是所有因素,但更有可能你沒有使用合理的lambda來正確解釋結果。你應該和一位統計學家交談,因爲在選擇模型時需要理解很多,並且存在很多缺陷。即使您的R代碼正確,模型選擇也不適合初學者進行統計。 – David

回答

0

有參與得到一些基本的步驟,你想要什麼:

  • 定義所有潛在預測組合的模型網格
  • 模型運行預測
  • 使用標準的所有可能的組合(或一組多個標準)來選擇預測器的最佳子集

模型網格可以用以下f例如:

# define model grid for best subset regression 
# defines which predictors are on/off; all combinations presented 
model.grid <- function(n){ 
    n.list <- rep(list(0:1), n) 
    expand.grid(n.list) 
} 

例如有4個變量,我們得到n^2或16個組合。的值1表示該模型預測是和零值指示所述預測是關閉:

model.grid(4) 
    Var1 Var2 Var3 Var4 
1  0 0 0 0 
2  1 0 0 0 
3  0 1 0 0 
4  1 1 0 0 
5  0 0 1 0 
6  1 0 1 0 
7  0 1 1 0 
8  1 1 1 0 
9  0 0 0 1 
10 1 0 0 1 
11 0 1 0 1 
12 1 1 0 1 
13 0 0 1 1 
14 1 0 1 1 
15 0 1 1 1 
16 1 1 1 1 

我在下面提供另一個功能將運行所有模型的組合。它還將創建一個排序的數據幀表格,使用5個標準對不同的模型進行排序。在表的頂部的預測組合是給定的訓練數據的「最佳」子集,並提供了預測:

# function for best subset regression 
# ranks predictor combos using 5 selection criteria 

best.subset <- function(y, x.vars, data){ 
# y  character string and name of dependent variable 
# xvars character vector with names of predictors 
# data training data with y and xvar observations 

require(dplyr) 
reguire(purrr) 
require(magrittr) 
require(forecast) 

length(x.vars) %>% 
     model.grid %>% 
     apply(1, function(x) which(x > 0, arr.ind = TRUE)) %>% 
     map(function(x) x.vars[x]) %>% 
     .[2:dim(model.grid(length(x.vars)))[1]] %>% 
     map(function(x) tslm(paste0(y, " ~ ", paste(x, collapse = "+")), data = data)) %>% 
     map(function(x) CV(x)) %>% 
     do.call(rbind, .) %>% 
     cbind(model.grid(length(x.vars))[-1, ], .) %>% 
     arrange(., AICc) 
} 

你會看到被指定TSLM()函數...其他人可以使用,例如作爲vglm()等。只需交換你想要的模型函數。

該功能需要4個已安裝的軟件包。該函數簡單地配置數據並使用map()函數遍歷所有模型組合(例如,不用於循環)。預測包然後提供交叉驗證函數CV(),其具有5個度量或選擇標準以對預測子集進行排名

這是從「預測原理和實踐」一書中解除的應用示例。該示例還使用fpp2包中的書中的數據。

library(fpp2) 

# test the function 
y <- "Consumption" 
x.vars <- c("Income", "Production", "Unemployment", "Savings") 

best.subset(y, x.vars, uschange) 

按照AICc指標排序的結果表如下所示。的最佳子集最小化的指標(CV,AIC,AICC和BIC)的值,最大限度地調整R平方和在列表的頂部被發現:

Var1 Var2 Var3 Var4  CV AIC AICc BIC AdjR2 
1  1 1 1 1 0.1163 -409.3 -408.8 -389.9 0.74859 
2  1 0 1 1 0.1160 -408.1 -407.8 -391.9 0.74564 
3  1 1 0 1 0.1179 -407.5 -407.1 -391.3 0.74478 
4  1 0 0 1 0.1287 -388.7 -388.5 -375.8 0.71640 
5  1 1 1 0 0.2777 -243.2 -242.8 -227.0 0.38554 
6  1 0 1 0 0.2831 -237.9 -237.7 -225.0 0.36477 
7  1 1 0 0 0.2886 -236.1 -235.9 -223.2 0.35862 
8  0 1 1 1 0.2927 -234.4 -234.0 -218.2 0.35597 
9  0 1 0 1 0.3002 -228.9 -228.7 -216.0 0.33350 
10 0 1 1 0 0.3028 -226.3 -226.1 -213.4 0.32401 
11 0 0 1 1 0.3058 -224.6 -224.4 -211.7 0.31775 
12 0 1 0 0 0.3137 -219.6 -219.5 -209.9 0.29576 
13 0 0 1 0 0.3138 -217.7 -217.5 -208.0 0.28838 
14 1 0 0 0 0.3722 -185.4 -185.3 -175.7 0.15448 
15 0 0 0 1 0.4138 -164.1 -164.0 -154.4 0.05246 

只有15預測器組合在成型因爲與所有預測變量關聯的模型組合已經被刪除。看看這張表,最好的子集就是所有預測結果的子集。但是,第二行只使用4個變量中的3個,並且性能結果大致相同。另請注意,在第4行之後,模型結果開始下降。那是因爲收入和儲蓄似乎是消費的關鍵驅動因素。由於這兩個變量是從預測變量中刪除的,模型性能顯着下降。

自定義函數的性能很穩定,因爲這裏給出的結果與本書引用的結果相匹配。

給你一個美好的一天。