Come eseguire la regressione lineare multipla in r
Questa guida mostra un esempio di come eseguire una regressione lineare multipla in R, tra cui:
- Esaminare i dati prima di adattare il modello
- Regolazione del modello
- Verifica delle ipotesi del modello
- Interpretare l’output del modello
- Valutazione della bontà dell’adattamento del modello
- Utilizzare il modello per fare previsioni
Andiamo!
Facilità
Per questo esempio, utilizzeremo il set di dati R integrato mtcars , che contiene informazioni su vari attributi di 32 auto diverse:
#view first six lines 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
In questo esempio, costruiremo un modello di regressione lineare multipla che utilizza mpg come variabile di risposta e disp , hp e drat come variabili predittive.
#create new data frame that contains only the variables we would like to use to data <- mtcars[, c("mpg", "disp", "hp", "drat")] #view first six rows of new data frame head(data) # mpg disp hp drat #Mazda RX4 21.0 160 110 3.90 #Mazda RX4 Wag 21.0 160 110 3.90 #Datsun 710 22.8 108 93 3.85 #Hornet 4 Drive 21.4 258 110 3.08 #Hornet Sportabout 18.7 360 175 3.15 #Valiant 18.1 225 105 2.76
Revisione dei dati
Prima di adattare il modello, possiamo esaminare i dati per comprenderli meglio e anche valutare visivamente se la regressione lineare multipla potrebbe essere o meno un buon modello per adattare questi dati.
In particolare, dobbiamo verificare se le variabili predittive hanno un’associazione lineare con la variabile di risposta, il che indicherebbe che un modello di regressione lineare multipla potrebbe essere adatto.
Per fare ciò, possiamo usare la funzionepairs() per creare un grafico a dispersione di ogni possibile coppia di variabili:
pairs(data, pch = 18, col = "steelblue")
Da questo grafico delle coppie possiamo vedere quanto segue:
- mpg e disponibilità sembrano avere una forte correlazione lineare negativa
- mpg e hp sembrano avere una forte correlazione lineare positiva
- mpg e drat sembrano avere una modesta correlazione lineare negativa
Tieni presente che potremmo anche utilizzare la funzione ggpairs() della libreria GGally per creare un grafico simile contenente i coefficienti di correlazione lineare effettivi per ciascuna coppia di variabili:
#install and load the GGally library install.packages("GGally") library(GGally) #generate the pairs plot ggpairs(data)
Ciascuna delle variabili predittive sembra avere una notevole correlazione lineare con la variabile di risposta mpg , quindi procederemo ad adattare il modello di regressione lineare ai dati.
Regolazione del modello
La sintassi di base per adattare un modello di regressione lineare multipla in R è:
lm(response_variable ~ predictor_variable1 + predictor_variable2 + ..., data = data)
Utilizzando i nostri dati, possiamo adattare il modello utilizzando il seguente codice:
model <- lm(mpg ~ disp + hp + drat, data = data)
Verifica delle ipotesi del modello
Prima di procedere alla verifica dei risultati del modello, dobbiamo innanzitutto verificare che le ipotesi del modello siano soddisfatte. Dobbiamo cioè verificare quanto segue:
1. La distribuzione dei residui del modello dovrebbe essere approssimativamente normale.
Possiamo verificare se questa ipotesi è soddisfatta creando un semplice istogramma dei residui:
hist(residuals(model), col = "steelblue")
Anche se la distribuzione è leggermente distorta a destra , non è abbastanza anomala da destare gravi preoccupazioni.
2. La varianza dei residui deve essere coerente per tutte le osservazioni.
Questa condizione preferita è nota come omoschedasticità. La violazione di questo presupposto è nota come eteroschedasticità .
Per verificare se questo presupposto è soddisfatto, possiamo creare un grafico del valore rettificato/residuo:
#create fitted value vs residual plot plot(fitted(model), residuals(model)) #add horizontal line at 0 abline(h = 0, lty = 2)
Idealmente, vorremmo che i residui fossero equamente dispersi ad ogni valore adattato. Possiamo vedere dal grafico che la dispersione tende a diventare un po’ più grande per valori adattati più grandi, ma questa tendenza non è abbastanza estrema da causare troppa preoccupazione.
Interpretare l’output del modello
Una volta verificato che le ipotesi del modello sono sufficientemente soddisfatte, possiamo esaminare l’output del modello utilizzando la funzione summary() :
summary(model) #Call: #lm(formula = mpg ~ disp + hp + drat, data = data) # #Residuals: # Min 1Q Median 3Q Max #-5.1225 -1.8454 -0.4456 1.1342 6.4958 # #Coefficients: #Estimate Std. Error t value Pr(>|t|) #(Intercept) 19.344293 6.370882 3.036 0.00513 ** #disp -0.019232 0.009371 -2.052 0.04960 * #hp -0.031229 0.013345 -2.340 0.02663 * #drat 2.714975 1.487366 1.825 0.07863 . #--- #Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # #Residual standard error: 3.008 on 28 degrees of freedom #Multiple R-squared: 0.775, Adjusted R-squared: 0.7509 #F-statistic: 32.15 on 3 and 28 DF, p-value: 3.28e-09
Dal risultato possiamo vedere quanto segue:
- La statistica F complessiva del modello è 32,15 e il corrispondente valore p è 3,28e-09 . Ciò indica che il modello complessivo è statisticamente significativo. In altre parole, il modello di regressione nel suo insieme è utile.
- disp è statisticamente significativo al livello di significatività 0,10. In particolare, il coefficiente dei risultati del modello indica che un aumento di un’unità nella disponibilità è associato a una diminuzione di -0,019 unità, in media, in mpg , assumendo che la potenza e il consumo di carburante rimangano costanti. .
- hp è statisticamente significativo al livello di significatività 0,10. In particolare, il coefficiente risultante dal modello indica che un aumento di un’unità di potenza è associato a una diminuzione di -0,031 unità, in media, in mpg , assumendo che disp e drat rimangano costanti.
- drat è statisticamente significativo al livello di significatività 0,10. In particolare, il coefficiente risultante dal modello indica che un aumento di un’unità del consumo di benzina è associato ad un aumento medio di 2.715 unità di mpg , assumendo che portata e potenza rimangano costanti.
Valutazione della bontà dell’adattamento del modello
Per valutare quanto bene il modello di regressione si adatta ai dati, possiamo esaminare alcuni parametri diversi:
1. Più quadrati R
Ciò misura la forza della relazione lineare tra le variabili predittive e la variabile di risposta. Un multiplo R quadrato di 1 indica una relazione lineare perfetta mentre un multiplo R quadrato di 0 indica alcuna relazione lineare.
R multiplo è anche la radice quadrata di R al quadrato, ovvero la proporzione della varianza nella variabile di risposta che può essere spiegata dalle variabili predittive. In questo esempio, il multiplo R quadrato è 0,775 . Quindi R al quadrato è 0,775 2 = 0,601 . Ciò indica che il 60,1% della varianza in mpg può essere spiegato dai predittori del modello.
Correlato: Qual è un buon valore R quadrato?
2. Errore standard residuo
Questo misura la distanza media tra i valori osservati e la retta di regressione. In questo esempio i valori osservati si discostano in media di 3.008 unità dalla retta di regressione .
Imparentato: Comprendere l’errore standard di regressione
Utilizzare il modello per fare previsioni
Dai risultati del modello, sappiamo che l’equazione di regressione lineare multipla adattata è:
cappello mpg = -19,343 – 0,019*disp – 0,031*cv + 2,715*drat
Possiamo usare questa equazione per fare previsioni su quale sarà il mpg per le nuove osservazioni . Ad esempio, possiamo trovare il valore mpg previsto per un’auto che ha i seguenti attributi:
- visualizzazione = 220
- cap = 150
- drac = 3
#define the coefficients from the model output intercept <- coef(summary(model))["(Intercept)", "Estimate"] disp <- coef(summary(model))["disp", "Estimate"] hp <- coef(summary(model))["hp", "Estimate"] drat <- coef(summary(model))["drat", "Estimate"] #use the model coefficients to predict the value for mpg intercept + disp*220 + hp*150 + drat*3 #[1] 18.57373
Per un’auto con disp = 220, hp = 150 e drat = 3, il modello prevede che l’auto otterrà 18,57373 mpg .
Puoi trovare il codice R completo utilizzato in questo tutorial qui .
Risorse addizionali
I seguenti tutorial spiegano come adattare altri tipi di modelli di regressione in R:
Come eseguire la regressione quadratica in R
Come eseguire la regressione polinomiale in R
Come eseguire la regressione esponenziale in R