Una guida completa alla regressione passo passo in r
La regressione graduale è una procedura che possiamo utilizzare per costruire un modello di regressione da un insieme di variabili predittive inserendo e rimuovendo i predittori in modo graduale nel modello fino a quando non esiste più un motivo statisticamente valido per inserire o eliminane altri.
L’obiettivo della regressione graduale è creare un modello di regressione che includa tutte le variabili predittive correlate in modo statisticamente significativo alla variabile di risposta .
Questo tutorial spiega come eseguire le seguenti procedure di regressione passo passo in R:
- Selezione passo dopo passo
- Selezione indietro passo dopo passo
- Selezione passo passo in entrambe le direzioni
Per ogni esempio, utilizzeremo il set di dati mtcars integrato:
#view first six rows of mtcars
head(mtcars)
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3,460 20.22 1 0 3 1
Adatteremo un modello di regressione lineare multipla utilizzando mpg (miglia per gallone) come variabile di risposta e le altre 10 variabili nel set di dati come potenziali variabili predittive.
Per ogni esempio, utilizzeremo la funzione step() incorporata nel pacchetto stats per eseguire una selezione graduale, che utilizza la seguente sintassi:
stadio (solo modello di intercettazione, direzione, portata)
Oro:
- solo modello originale : solo la formula del modello originale
- Direzione: la modalità di ricerca del passo può essere “entrambi”, “indietro” o “avanti”.
- ambito: una formula che specifica i predittori che vorremmo tentare di inserire nel modello
Esempio 1: selezione in avanti passo passo
Il codice seguente mostra come eseguire una selezione passo dopo passo:
#define intercept-only model intercept_only <- lm(mpg ~ 1, data=mtcars) #define model with all predictors all <- lm(mpg ~ ., data=mtcars) #perform forward stepwise regression forward <- step(intercept_only, direction=' forward ', scope= formula (all), trace=0) #view results of forward stepwise regression forward$anova Step Df Deviance Resid. Df Resid. Dev AIC 1 NA NA 31 1126.0472 115.94345 2 + wt -1 847.72525 30 278.3219 73.21736 3 + cyl -1 87.14997 29 191.1720 63.19800 4 + hp -1 14.55145 28 176.6205 62.66456 #view final model forward$coefficients (Intercept) wt cyl hp 38.7517874 -3.1669731 -0.9416168 -0.0180381
Nota: l’argomento trace=0 indica a R di non visualizzare i risultati completi della selezione passo passo. Ciò può richiedere molto spazio se è presente un numero elevato di variabili predittive.
Ecco come interpretare i risultati:
- Innanzitutto, adattiamo il modello di sola intercettazione. Questo modello aveva un AIC di 115.94345 .
- Quindi adattiamo tutti i modelli possibili a un predittore. Il modello che ha prodotto l’AIC più basso e ha avuto anche una riduzione statisticamente significativa dell’AIC rispetto al modello basato solo sul basale ha utilizzato il predittore wt . Questo modello aveva un AIC di 73.21736 .
- Successivamente, adattiamo tutti i modelli possibili con due predittori. Il modello che ha prodotto l’AIC più basso e ha avuto anche una riduzione statisticamente significativa dell’AIC rispetto al modello a predittore singolo ha aggiunto il predittore cil . Questo modello aveva un AIC di 63.19800 .
- Successivamente, adattiamo tutti i modelli possibili a tre predittori. Il modello che ha prodotto l’AIC più basso e ha avuto anche una riduzione statisticamente significativa dell’AIC rispetto al modello a due predittori ha aggiunto il predittore hp . Questo modello aveva un AIC di 62.66456 .
- Successivamente, adattiamo tutti i modelli possibili a quattro predittori. Si è scoperto che nessuno di questi modelli produceva una riduzione significativa dell’AIC, quindi abbiamo interrotto la procedura.
Il modello finale risulta essere:
mpg ~ 38,75 – 3,17*peso – 0,94*cil – 0,02*ip
Esempio 2: Selezione all’indietro passo passo
Il codice seguente mostra come tornare indietro:
#define intercept-only model intercept_only <- lm(mpg ~ 1, data=mtcars) #define model with all predictors all <- lm(mpg ~ ., data=mtcars) #perform backward stepwise regression backward <- step(all, direction=' backward ', scope= formula (all), trace=0) #view results of backward stepwise regression backward$anova Step Df Deviance Resid. Df Resid. Dev AIC 1 NA NA 21 147.4944 70.89774 2 - cyl 1 0.07987121 22 147.5743 68.91507 3 - vs 1 0.26852280 23 147.8428 66.97324 4 - carb 1 0.68546077 24 148.5283 65.12126 5 - gear 1 1.56497053 25 150.0933 63.45667 6 - drat 1 3.34455117 26 153.4378 62.16190 7 - available 1 6.62865369 27 160.0665 61.51530 8 - hp 1 9.21946935 28 169.2859 61.30730 #view final model backward$coefficients (Intercept) wt qsec am 9.617781 -3.916504 1.225886 2.935837
Ecco come interpretare i risultati:
- Innanzitutto, adattiamo un modello utilizzando tutti i predittori p . Definirlo come M p .
- Quindi, per k = p, p-1,…1, adattiamo tutti i modelli k che contengono tutti i predittori tranne uno in M k , per un totale di variabili predittive k-1. Quindi scegli il migliore tra questi modelli k e chiamalo M k-1 .
- Infine, scegliamo un modello migliore tra M 0 … M p utilizzando AIC.
Il modello finale risulta essere:
mpg ~ 9,62 – 3,92*peso + 1,23*qsec + 2,94*am
Esempio 3: Selezione passo passo in entrambe le direzioni
Il codice seguente mostra come eseguire una selezione passo passo in entrambe le direzioni:
#define intercept-only model intercept_only <- lm(mpg ~ 1, data=mtcars) #define model with all predictors all <- lm(mpg ~ ., data=mtcars) #perform backward stepwise regression both <- step(intercept_only, direction=' both ', scope= formula (all), trace=0) #view results of backward stepwise regression both$anova Step Df Deviance Resid. Df Resid. Dev AIC 1 NA NA 31 1126.0472 115.94345 2 + wt -1 847.72525 30 278.3219 73.21736 3 + cyl -1 87.14997 29 191.1720 63.19800 4 + hp -1 14.55145 28 176.6205 62.66456 #view final model both$coefficients (Intercept) wt cyl hp 38.7517874 -3.1669731 -0.9416168 -0.0180381
Ecco come interpretare i risultati:
- Innanzitutto, adattiamo il modello di sola intercettazione.
- Successivamente, abbiamo aggiunto i predittori al modello in sequenza, proprio come abbiamo fatto per la selezione passo passo. Tuttavia, dopo aver aggiunto ciascun predittore, abbiamo rimosso anche tutti i predittori che non fornivano più miglioramenti nell’adattamento del modello.
- Abbiamo ripetuto questo processo finché non abbiamo ottenuto un modello finale.
Il modello finale risulta essere:
mpg ~ 9,62 – 3,92*peso + 1,23*qsec + 2,94*am
Si noti che la selezione del passo in avanti e la selezione del passo in entrambe le direzioni hanno prodotto lo stesso pattern finale, mentre la selezione del passo all’indietro ha prodotto un pattern diverso.
Risorse addizionali
Come testare il significato di una pendenza di regressione
Come leggere e interpretare una tabella di regressione
Una guida alla multicollinearità nella regressione