Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Accolgo volentieri l'invito di Fabio, e mi accingo a cominciare alcuni post sulla statistica
multivariata.
Nella regressione lineare semplice, abbiamo immaginato che una certa variabile Y dipendesse
dall'andamento di un'altra variabile (X), in maniera lineare con andamento crescente o decrescente.
Abbiamo quindi visto come realizzare e disegnare la retta che pone in relazione le due variabili, e
come valutare la bontà del modello.
Nella realtà (scientifica, economica, psicometrica, etc.), quasi mai un evento dipende solamente
dall'andamento di un certo fattore. Tutti gli eventi (anche i più comuni) sono influenzati da
numerosissimi elementi. Risulta pertanto molto più utile formulare un modello che tenga conto di
tutte queste influenze (o, come vedremo in seguito, delle influenze maggiori). Ciò si ottiene con lo
studio della regressione lineare multipla (o multivariata). In generale si indica con Y la variabile
dipendente, e con X seguito da un numero in pedice le variabili indipendenti che si suppone abbiano
un effetto. Le X vengono chiamate predittori e la formula generale del modello che cerchiamo è:
Adesso in dati è contenuta una tabella, con i valori riportati nel file specificato. Perchè R possa
accedere al file .dat, non ci deve essere alcuna limitazione di connessione; se non riesce ad accedere
ad internet, conviene controllare il proprio firewall (che spesso blocca la connessione a internet da
parte di alcuni programmi). Per comodità trasformiamo la tabella in un dataframe:
datiDF <- data.frame(dati)
Il model contiene la formula che vogliamo indagare. Dapprima si specifica la variabile dipendente
(il consumo), quindi si specificano le variabili indipendenti, tra loro unite da un più.
Con la funzione summary() otteniamo una serie di informazioni. Innanzitutto il valore
dell'intercetta e dei regressori; in questo caso:
Osserviamo il segno del primo regressore, che descrive il predittore "prezzo": esso è negativo, il che
significa che per ogni aumento unitario del prezzo del gelato, il consumo pro capite diminuisce di
circa una unità e mezzo (1.40); viceversa la temperatura ha un effetto positivo (seppure molto
scarso) sul consumo di gelato (all'aumentare della temperatura, aumenta anche il consumo).
La statistica F ci indica se il modello è da scartare nella sua interessa, oppure se può essere ritenuto
valido. Essendo F-statistic maggiore dell'F-tabulato, rifiutiamo l'ipotesi nulla che il modello sia da
scartare nella sua interezza.
Possiamo calcolare in questo modo gli intervalli di confidenza dell'intercetta e dei 2 regressori:
confint(model)
2.5 % 97.5 %
(Intercept) 0.066549244 1.126551076
datiDF$Price -3.299896373 0.496375437
datiDF$Temp 0.002066035 0.003994569
Proviamo a complicare un po' le cose, e supponiamo di considerare nel nostro modello anche la
variabile "entrate". All'aumentare dei guadagni, aumenta anche il consumo di gelato?
model <- lm(Consumption ~ Price + Temp + Income, data=datiDF)
summary(model)
Call:
lm(formula = Consumption ~ Price + Temp + Income, data = datiDF)
Residuals:
Min 1Q Median 3Q Max
-0.065302 -0.011873 0.002737 0.015953 0.078986
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.1973151 0.2702162 0.730 0.47179
Price -1.0444140 0.8343573 -1.252 0.22180
Temp 0.0034584 0.0004455 7.762 3.1e-08 ***
Income 0.0033078 0.0011714 2.824 0.00899 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.03683 on 26 degrees of freedom
Multiple R-squared: 0.719, Adjusted R-squared: 0.6866
F-statistic: 22.17 on 3 and 26 DF, p-value: 2.451e-07
Il regressore beta3 associato al predittore entrate risulta essere significativo, e di segno positivo.
Quindi all'aumentare delle entrate, aumenta anche il consumo di gelati.
Il modello a 3 predittori viene complessivamente accettato (la statistica F risulta significativa), e si
assiste ad un miglioramento della goodness-of-fit (è aumentato il valore dell'R quadro aggiustato).
Una domanda che potremmo porci è la seguente: tra le tre variabili considerate, qual è quella che
maggiormente influisce sulla variabile consumo? Per far questo possiamo confrontare i valori dei
regressori beta, ma solo dopo averli standardizzati (altrimenti non è possibile il confronto). Nel
pacchetto QuantPsyc è presenta la funzione lm.beta() che fa al caso nostro:
library(QuantPsyc)
lm.beta(model)
Price Temp Income
-0.1324351 0.8632558 0.3140085
Quelli qui riportati sono i coefficienti beta standardizzati. Osserviamo che la variabile esplicativa
che maggiormente influisce sul consumo di gelati è la temperatura.
Se non volete scaricare il pacchetto per utilizzare solo questa funzione, è sufficiente sapere che il
calcolo di coefficienti beta standardizzati è pari al prodotto del valore beta per il rapporto tra la
deviazione standard della X considerata, e la deviazione standard della Y:
coef(model)[2]*(sd(datiDF$Price))/(sd(datiDF$Consumption))
Price
-0.1324351
coef(model)[3]*(sd(datiDF$Temp))/(sd(datiDF$Consumption))
Temp
0.8632558
coef(model)[4]*(sd(datiDF$Income))/(sd(datiDF$Consumption))
Income
0.3140085
In maniera analoga (ma anche un pò più rischiosa), si potrebbe valutare la dipendenza anche
osservando la correlazione tra le variabili. Se calcoliamo il coefficiente di correlazione (con la
funzione cor())tra il consumo e le variabili prezzo, entrate, temperatura, osserviamo che il
maggior valore è relativo alla variabile temperatura (è maggiore la correlazione tra queste due
variabili).
Spesso si finisce col cercare una quantità di possibili variabili esplicative, da rendere poco agevole
lo sviluppo di un modello di regressione multipla, che teoricamente dovrebbe contenere il minor
numero di predittori possibile. La scelta non si basa solo sulla valutazione "ad occhio" del peso di
ciascun predittore (come abbiamo fatto prima), ma viene utilizzato il test F parziale, che in pratica
va a testare se c'è un incremento dell'R-quadro nel momento in cui si aggiunge un'altra variabile
esplicativa al modello.
In R per eseguire un test F-parziale, si confronta la tabella dell'analisi della varianza dei due
modelli. Supponiamo di voler confrontare le bontà dei modelli (Price + Temp) e (Price + Temp +
Income):
model1 <- lm(datiDF$Consumption ~ datiDF$Price + datiDF$Temp)
model2 <- lm(datiDF$Consumption ~ datiDF$Price + datiDF$Temp + datiDF$Income)
anova(model1, model2)
Analysis of Variance Table
Model 1: datiDF$Consumption ~ datiDF$Price + datiDF$Temp
Model 2: datiDF$Consumption ~ datiDF$Price + datiDF$Temp + datiDF$Income
Res.Df RSS Df Sum of Sq F Pr(>F)
1 27 0.046090
2 26 0.035273 1 0.010817 7.9734 0.008989 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Se rifiutiamo l'ipotesi H0, vuol dire che l'inserimento della variabile esplicativa ha apportato un
miglioramento al modello. In questo caso F = 7.97, con p-value < 0.05. Rifiutiamo quindi l'ipotesi
nulla: l'aggiunta del predittore entrate migliora il modello.
Possiamo infine calcolare i coefficiente di determinazioni parziali. Fissata una delle variabili
esplicative, a quanto ammonta la bontà del modello considerando l'altra variabile?
Riprendiamo a considerare solo 2 predittori (Temp e Price). Costruiamo prima i due modelli lineari
semplici, quindi il modello a 2 predittori. Tenendo presente le formule per calcolare il coefficiente
di determinazione parziale, abbiamo:
lm.x1 <- lm(datiDF$Consumption ~ datiDF$Price)
lm.x2 <- lm(datiDF$Consumption ~ datiDF$Temp)
lm.x1.x2 <- lm(datiDF$Consumption ~ datiDF$Price + datiDF$Temp)
ssr.x1.x2 <- sum(anova(lm.x1.x2)$"Sum Sq"[1:2])
ssr.x1 <- anova(lm.x1)$"Sum Sq"[1]
ssr.x2 <- anova(lm.x2)$"Sum Sq"[1]
ssr.x1.x2 - ssr.x1
sse.x1 <- anova(lm.x1)$"Sum Sq"[2]
sse.x2 <- anova(lm.x2)$"Sum Sq"[2]
(ssr.x1.x2 - ssr.x2) / sse.x2
[1] 0.07837315
(ssr.x1.x2 - ssr.x1) / sse.x1
[1] 0.6062858
Queste viste finora solo alcune delle analisi preliminari che dobbiamo effettuare quando si cerca un
modello di regressione lineare multipla. Nei post successivi vedremo altri esempi, e andremo ad
effettuare altre analisi, come l'analisi dei residui, la scelta dei predittori e il confronto tra più
modelli.