DIAGNOSTICA DEI RESIDUI
Per valutare la bontà dei residui in un modello di regressione lineare esistono diverse possibilità,
alcune di tipo esplorativo basate sulla costruzione di opportuni grafici ed altri affidati all’uso di
particolari misure o test statistici.
Si consideri un modello di regressione multivariata in cui il tasso di risparmio di 50 paesi è messo
in relazione con alcune variabili demografiche e con il pil. Il dataset a cui si fa riferimento
appartiene al pacchetto faraway. Lo si carichi e se ne esplori la struttura attraverso l’help:
data(savings)
help(savings)
Si costruisce quindi un modello di regressione in cui il tasso di risparmio, (la variabile sr) è messo
in relazione con tutte le altre 4 variabili:
g<-lm(sr~pop15+pop75+dpi+ddpi,savings)
Si può a questo punto fare un grafico dove in ascissa si mettono i valori teorici e in ordinata i
residui di questa regressione. Eventuali strutture o trend presenti nel grafico indicano che i residui
non sono casuali e quindi che i regressori non hanno colto tutta la variabilità della variabile
risposta:
0
-5
residui
5
10
plot(fitted(g),residuals(g),xlab=”valori teorici”,ylab=”residui”)
6
8
10
12
14
16
valori teorici
In questo caso non si osservano particolari problemi poichè i residui sembrano disperdersi in
maniera casuale sopra e sotto la loro media (lo zero).
17
Verifica della normalità distributiva
La normalità distributiva dei residui si può esplorare innanzitutto in maniera grafica attraverso le
funzioni Q-Q plot.
Il comando qqnorm applicato ai residui del modello costruisce un grafico in cui riporta in ordinata
il valore osservato di ciascun residuo (i quantili campionari) mentre in ascissa rappresenta i valori
teorici (i quantili di popolazione) che delimitano la stessa frazione percentuale nella distribuzione
normale avente ugual media (nulla) e varianza di quella campionaria.
qqnorm(g$res)
Se la normalità distributiva è valida i punti tendono ad allinearsi lungo la bisettrice di questo
grafico. Per visualizzarne la bisettrice si digita il comando:
qqline(g$res)
0
-5
Sample Quantiles
5
10
Normal Q-Q Plot
-2
-1
0
1
2
Theoretical Quantiles
Alternativamente si può effettuare un test, noto come il test di Shapiro-Wilk, che saggia l’ipotesi
nulla di normalità distributiva di un insieme di dati:
shapiro.test(residuals(g))
Shapiro-Wilk normality test
data: residuals(g)
W = 0.987, p-value = 0.8524
Il p-value indica che l’ipotesi nulla non si rifiuta e dunque i residui sono normalmente distribuiti.
Se si costruisce un istogramma si osserva infatti la classica forma campanulare:
18
hist(residuals(g),15)
4
3
0
1
2
Frequency
5
6
7
Histogram of residuals(g)
-5
0
5
10
residuals(g)
(si provi a cambiare il valore 15 per vedere cosa succede al grafico).
Misure diagnostiche
Nella libreria faraway sono contenuti alcuni comandi che producono i leverages, i residui
studentizzati e la distanza di cook. Il comando influence si applica all’output di un modello di
regressione e produce una lista al cui interno (sotto il nome di hat) sono contenuti i valori di
leverages:
ginf<-influence(g)
ginf$hat
Australia
Austria
0.06771343
0.12038393
Canada
Chile
0.15840239
0.03729796
Denmark
Ecuador
0.06271782
0.06372651
Greece
Guatamala
0.09662073
0.06049212
Ireland
Italy
0.21223634
0.06651170
Malta
Norway
0.07940290
0.04793213
Panama
Paraguay
0.03897459
0.06937188
South Africa South Rhodesia
0.06510405
0.16080923
Belgium
0.08748248
China
0.07795899
Finland
0.09204246
Honduras
0.06008079
Japan
0.22330989
Netherlands
0.09061400
Peru
0.06504891
Spain
0.07732854
19
Bolivia
0.08947114
Colombia
0.05730171
France
0.13620478
Iceland
0.07049590
Korea
0.06079915
New Zealand
0.05421789
Philippines
0.06425415
Sweden
0.12398898
Brazil
0.06955944
Costa Rica
0.07546780
Germany
0.08735739
India
0.07145213
Luxembourg
0.08634787
Nicaragua
0.05035056
Portugal
0.09714946
Switzerland
0.07359423
Turkey
0.03964224
Zambia
0.06433163
Tunisia United Kingdom
0.07456729
0.11651375
Jamaica
Uruguay
0.14076016
0.09794717
United States
0.33368800
Libya
0.53145676
Venezuela
0.08628365
Malaysia
0.06523300
Questi due comandi producono un grafico dei Leverages in cui si mostrano le etichette dei paesi
con i 5 leverages più alti:
contries<-row.names(savings)
halfnorm(lm.influence(g)$hat,5,labs=contries,ylab="Leverages")
Si provi ancora una volta a modificare il valore 5 per valutarne gli effetti.
Per calcolare i residui studentizzati internamente si usa la loro formula definitoria basata sui valori
di leverages appena stimati:
gs<-summary(g) # mette in gs il summary di g
gs$sig # è la radice quadrata della varianza stimata
3.8027
stud.int<-residuals(g)/(gs$sig*sqrt(1-ginf$hat)) # formula per il calcolo
Invece per ottenere i residui studentizzati esternamente si può utilizzare direttamente la formula:
stud.est<-rstudent(g)
Infine per calcolare la distanza di Cook si utilizza il comando:
cook<-cooks.distance(g)
halfnorm(cook,3,labs=countries,ylab=”Cook’s distances”) # fa il grafico
Un esercizio
Il dataset star (libreria farway) contiene di dati sulla luminosità e sulla temperatura di alcune stelle
del sistema solare. Si vuole valutare se stelle molto luminose corrispondono a stelle con
temperature elevate e viceversa.
data(star)
plot(star$temp,star$light,xlab=”Temperatura”,ylab=”Luminosità”)
g<-lm(light~temp,star)
abline(g)
20
6.0
5.5
5.0
4.0
4.5
Luminosità
3.6
3.8
4.0
4.2
4.4
4.6
Temperatura
in cui si osserva purtroppo un andamento decrescente dovuto molto probabilmente alla presenza
di quattro punti anomali, che corrispondono a quattro stelle aventi una temperatura inferiore a 3.6.
Se si calcolano i leverages infatti si ha che quelli maggiori di 2(m+1)/n sono proprio quei 4 punti:
cbind(influence(g)$hat,star$temp)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[,1]
0.02220190
0.03734096
0.02191917
0.03734096
0.02130230
0.02705977
0.07805447
0.03865181
0.02191917
0.02220190
0.19410341
0.02497782
0.02870476
0.04440927
0.02137941
0.02438666
0.02292159
0.02438666
0.02292159
0.19410341
0.02137941
0.02137941
0.02438666
0.02960436
0.02253604
0.02438666
0.02137941
0.02253604
0.02335854
[,2]
4.37
4.56
4.26
4.56
4.30
4.46
3.84
4.57
4.26
4.37
3.49
4.43
4.48
4.01
4.29
4.42
4.23
4.42
4.23
3.49
4.29
4.29
4.42
4.49
4.38
4.42
4.29
4.38
4.22
21
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
0.19834440
0.02253604
0.03734096
0.02631438
0.19410341
0.02292159
0.04597716
0.03371684
0.02631438
0.03371684
0.02497782
0.02253604
0.02631438
0.03055537
0.02631438
0.03608151
0.02631438
0.02438666
3.48
4.38
4.56
4.45
3.49
4.23
4.62
4.53
4.45
4.53
4.43
4.38
4.45
4.50
4.45
4.55
4.45
4.42
Dunque si può ristimare un modello di regressione escludendo le stelle con temperatura inferiori a
3.6:
g2<-lm(light~temp,star,subset=(temp>3.6))
abline(g2)
5.0
4.5
4.0
Luminosità
5.5
6.0
da cui si ottiene una relazione crescente fra le due variabili:
3.6
3.8
4.0
4.2
4.4
4.6
Temperatura
22