2014-04-07 19 views
11

In R schrittweise vorwärts Regression, definiere ich ein minimales Modell und eine Reihe von Variablen hinzufügen (oder nicht hinzugefügt werden):vorwärts schrittweise Regressions

min.model = lm(y ~ 1) 
fwd.model = step(min.model, direction='forward', scope=(~ x1 + x2 + x3 + ...)) 

Gibt es eine Möglichkeit mit allen Variablen in einer Matrix angeben /data.frame, also muss ich sie nicht aufzählen?

Beispiele zu illustrieren, was ich würde zu tun, aber sie funktionieren nicht:

# 1 
fwd.model = step(min.model, direction='forward', scope=(~ ., data=my.data.frame)) 

# 2 
min.model = lm(y ~ 1, data=my.data.frame) 
fwd.model = step(min.model, direction='forward', scope=(~ .)) 

Antwort

16

scope erwartet (die Hilfeseite ?step zitiert)

entweder eine einzige Formel, oder eine Liste mit Komponenten 'oberen' und 'unteren', beide Formeln. Einzelheiten finden Sie in den Details zum Angeben der Formeln und wie sie verwendet werden.

Sie können die Formel extrahieren und verwenden, die "~" entspricht. wie folgt aus:

> my.data.frame=data.frame(y=rnorm(20),foo=rnorm(20),bar=rnorm(20),baz=rnorm(20)) 
> min.model = lm(y ~ 1, data=my.data.frame) 
> biggest <- formula(lm(y~.,my.data.frame)) 
> biggest 
y ~ foo + bar + baz 
> fwd.model = step(min.model, direction='forward', scope=biggest) 
Start: AIC=0.48 
y ~ 1 

     Df Sum of Sq RSS  AIC 
+ baz 1 2.5178 16.015 -0.44421 
<none>    18.533 0.47614 
+ foo 1 1.3187 17.214 0.99993 
+ bar 1 0.4573 18.075 1.97644 

Step: AIC=-0.44 
y ~ baz 

     Df Sum of Sq RSS  AIC 
<none>    16.015 -0.44421 
+ foo 1 0.41200 15.603 1.03454 
+ bar 1 0.20599 15.809 1.29688 
> 
+0

Dank in einem Schritt tun, die perfekt löst ist. –

+9

Haben Sie über die vielen Beweise gelesen, dass die Variablenauswahl schwerwiegende Schätzungs- und Inferenzprobleme verursacht? Zumindest sollte der schrittweise Ansatz bootstrapped werden, um seine Willkürlichkeit zu zeigen. –

+0

@FrankHarrell - wo kann ich mehr über Bootstrapping schrittweise Regression lernen? – EngrStudent

0

Sie können es so

fwd.model = step(lm(y ~ 1, data=my.data.frame), direction='forward', scope=~ x1 + x2 + x3 + ...)