5.2 Il modello di regressione lineare multipla

Nella maggioranza delle applicazioni esistono molte variabili disponibili nel data set che possono contribuire a spiegare i valori osservati della variabile dipendente per ottenere modelli con una più elevata capacità predittiva. Lo strumento che si utilizza in questi casi è il modello di regressione lineare multipla, che si differenzia da quello semplice perché consente di inserire nel modello un numero qualsiasi di regressori. Il modello multiplo è definito come

\[\begin{equation} Y_i = \beta_0 + \beta_1 x_{1i} + \beta_2 x_{2i} + \cdots + \beta_K x_{Ki} + \varepsilon_i, \quad i=1,\ldots,n, \tag{5.4} \end{equation}\]

dove la notazione ha lo stesso significato visto per la regressione semplice. In aggiunta all’equazione (5.4), il modello di regressione di lineare multipla è basato anche sulle seguenti ipotesi:

  1. le osservazioni \(x_{ji}\) sono costanti o realizzazioni di una variabile aleatoria \(X_j\) (\(j=1,\ldots,K\)) non correlata con le componenti aleatorie di errore, \(\varepsilon_i\). In quest’ultimo caso l’inferenza è svolta condizionatamente ai valori osservati di \(X_j\)
  2. gli errori aleatori, \(\varepsilon_i\), sono variabili aleatorie con media 0 e varianza \(\sigma^2\) costante per ogni \(i = 1,\ldots,n\) (omoschedasticità)
  3. gli errori aleatori, \(\varepsilon_i\), non sono correlati tra loro
  4. non esiste una relazione lineare che lega tra loro le variabili indipendenti
  5. gli errori aleatori, \(\varepsilon_i\), sono distribuiti secondo una distribuzione normale

Le funzioni disponibili in R per stimare e analizzare un modello di regressione lineare multipla sono esattamente le stesse già presentate nella Sezione 5.1, salvo che ora la formula da specificare all’interno della funzione lm() impiegherà più di una variabile a destra del simbolo di tilde. Le variabili indipendenti che vogliamo usare nel modello devono essere semplicemente aggiunte una dopo l’altra con il simbolo +. Per esempio, per generalizzare il modello semplice comp_m1 presentato sopra includendo anche le variabili relative ai prezzi dei concorrenti, dobbiamo eseguire il codice seguente:

> comp_m2 <- lm(mktshare ~ ownprice + comp1price + comp2price, data = comp)
> summary(comp_m2)

Call:
lm(formula = mktshare ~ ownprice + comp1price + comp2price, data = comp)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.01796 -0.00583 -0.00198  0.00427  0.03936 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  0.04007    0.01405    2.85   0.0052 ** 
ownprice    -0.07642    0.00796   -9.60  3.4e-16 ***
comp1price   0.02633    0.00839    3.14   0.0022 ** 
comp2price   0.04597    0.00782    5.88  4.5e-08 ***
---
Signif. codes:  
0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.00997 on 109 degrees of freedom
Multiple R-squared:  0.526, Adjusted R-squared:  0.513 
F-statistic: 40.3 on 3 and 109 DF,  p-value: <2e-16

Il modello stimato è quindi dato da

\[\begin{equation} \widehat{\mbox{mktshare}}_i = 0.0401 -0.0764 \, \mbox{ownprice}_i + 0.0263 \, \mbox{comp1price}_i + 0.0460 \, \mbox{comp2price}_i. \tag{5.5} \end{equation}\]

L’output è strutturato esattamente come per il modello semplice, salvo che ora la tabella dei coefficienti stimati (Coefficients) contiene un numero maggiore di righe, ognuna relativa ad uno dei coefficienti del modello. Le funzioni accessorie descritte per il modello semplice (coef(), residuals(), ecc.) continuano a valere anche per il modello multiplo:

> coef(comp_m2)
(Intercept)    ownprice  comp1price  comp2price 
    0.04007    -0.07642     0.02633     0.04597 
> anova(comp_m2)
Analysis of Variance Table

Response: mktshare
            Df  Sum Sq Mean Sq F value  Pr(>F)    
ownprice     1 0.00428 0.00428    43.1 1.8e-09 ***
comp1price   1 0.00429 0.00429    43.2 1.8e-09 ***
comp2price   1 0.00343 0.00343    34.6 4.5e-08 ***
Residuals  109 0.01082 0.00010                    
---
Signif. codes:  
0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
> comp_m2_fitted <- fitted(comp_m2)
> comp_m2_resid <- residuals(comp_m2)
> plot(comp_m2_fitted, comp_m2_resid, xlab = "Valori previsti", ylab = "Residui")
> abline(h = 0, lty = 2)
Grafico dei residui contro i valori previsti per il modello `comp_m2`.

Figura 5.3: Grafico dei residui contro i valori previsti per il modello comp_m2.