2016-07-25 15 views
0

Gibt es eine Möglichkeit, die variable Auswahl eines GAM in R zu automatisieren, ähnlich wie bei Schritt? Ich habe die Dokumentation von step.gam und selection.gam gelesen, aber ich habe noch eine Antwort mit Code, der funktioniert. Zusätzlich habe ich versucht method= "REML" und select = TRUE, aber entfernen Sie keine unbedeutenden Variablen aus dem Modell.Variablenauswahl mit mgcv

Ich habe theoretisiert, dass ich ein Schrittmodell erstellen und dann diese Variablen verwenden konnte, um das GAM zu erstellen, aber das scheint nicht rechnerisch effizient zu sein.

Beispiel:

library(mgcv) 

set.seed(0) 
dat <- data.frame(rsp = rnorm(100, 0, 1), 
        pred1 = rnorm(100, 10, 1), 
        pred2 = rnorm(100, 0, 1), 
        pred3 = rnorm(100, 0, 1), 
        pred4 = rnorm(100, 0, 1)) 

model <- gam(rsp ~ s(pred1) + s(pred2) + s(pred3) + s(pred4), 
      data = dat, method = "REML", select = TRUE) 

summary(model) 

#Family: gaussian 
#Link function: identity 

#Formula: 
#rsp ~ s(pred1) + s(pred2) + s(pred3) + s(pred4) 

#Parametric coefficients: 
#   Estimate Std. Error t value Pr(>|t|) 
#(Intercept) 0.02267 0.08426 0.269 0.788 

#Approximate significance of smooth terms: 
#   edf Ref.df  F p-value 
#s(pred1) 0.8770  9 0.212 0.1174 
#s(pred2) 1.8613  9 0.638 0.0374 * 
#s(pred3) 0.5439  9 0.133 0.1406 
#s(pred4) 0.4504  9 0.091 0.1775 
--- 
#Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

#R-sq.(adj) = 0.0887 Deviance explained = 12.3% 
#-REML = 129.06 Scale est. = 0.70996 n = 100 
+0

In einigen der anderen Datensätzen Ich verwende, habe ich nach oben von zehn Variablen (die Ich stelle fest, dass das im Statistikplan nicht so viele sind, und ich würde gerne einige Variablen reduzieren, ohne die Macht vorherzusagen. – IJH

+0

Ich stimme, diese Frage als Off-Topic zu schließen, weil es nicht um Programmierung geht, sondern um Statistiken (Modellauswahl) –

Antwort

1

Marra und Wood (2011, Computerstatistik und Datenanalyse 55; 2372-2387) vergleichen verschiedene Ansätze zur Merkmalsauswahl in Gams. Sie kamen zu dem Schluss, dass eine zusätzliche Strafzeit im Glattheitsauswahlverfahren die besten Ergebnisse erbrachte. Dies kann in mgcv aktiviert werden :: gam() unter Verwendung des select = TRUE Argument/Einstellung oder eine der folgenden Variationen:

model <- gam(rsp ~ s(pred1,bs="ts") + s(pred2,bs="ts") + s(pred3,bs="ts") + s(pred4,bs="ts"), data = dat, method = "REML") 
model <- gam(rsp ~ s(pred1,bs="cr") + s(pred2,bs="cr") + s(pred3,bs="cr") + s(pred4,bs="cr"), 
      data = dat, method = "REML",select=T) 
model <- gam(rsp ~ s(pred1,bs="cc") + s(pred2,bs="cc") + s(pred3,bs="cc") + s(pred4,bs="cc"), 
      data = dat, method = "REML") 
model <- gam(rsp ~ s(pred1,bs="tp") + s(pred2,bs="tp") + s(pred3,bs="tp") + s(pred4,bs="tp"), data = dat, method = "REML") 
+0

Was bedeutet das Hinzufügen von 'bs =' das Modell? – IJH