2014-04-07 5 views
11

In R graduale regressione in avanti, specificare un modello minimal e un insieme di variabili per aggiungere (o di non aggiungere):avanti regressione graduale

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

C'è un modo per specificare utilizzando tutte le variabili in una matrice/data.frame, quindi non devo enumerarli?

esempi per illustrare quello che mi piacerebbe fare, ma non funzionano:

# 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=(~ .)) 

risposta

16

scope aspetta (citando la pagina di aiuto ?step)

sia una formula unica, o una lista contenente le componenti "superiore" e "inferiore", entrambe le formule. Vedere i dettagli di per sapere come specificare le formule e come sono utilizzate .

È possibile estrarre e utilizzare la formula corrispondente a "~". in questo modo:

> 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

Grazie, che risolve perfettamente. –

+9

Hai letto della grande quantità di prove che la selezione variabile causa gravi problemi di stima e inferenza? Per lo meno, l'approccio graduale dovrebbe essere riavviato per mostrare la sua arbitrarietà. –

+0

@FrankHarrell - dove posso saperne di più sulla regressione stepwise bootstrap? – EngrStudent

0

Lo si può fare in un solo passo come questo

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