Diagnostyka regresji

Transkrypt

Diagnostyka regresji
Lepiej zapobiegać niż leczyć
Diagnostyka regresji
Anceps remedium melius quam nullum
Na tych zajęciach nauczymy się identyfikować zagrożenia dla naszej analizy regresji. Jednym elementem jest
oczywiście niespełnienie założeń. Nie wszystkie założenia są równie istotne i mają równie dramatyczny wpływ
na wyniki. Drugim jest fakt, że dane mogą być źle sformatowane, zapisane w złej skali lub po prostu błędne.
Model liniowy:
y ∼ Xβ + Główne założenie jaki robimy to IID o resztach. Diagnostyka będzie się zatem opierać na badaniu, na ile to
założenie jest spełnione w naszym modelu.
Anscombe’s quartet
Dane spreparowane przez Franka Anscombe w 1973 roku.
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
##
filter, lag
## The following objects are masked from 'package:base':
##
##
intersect, setdiff, setequal, union
##
##
##
##
##
##
##
# A tibble: 4 x 6
group mean(x)
sd(x)
<fctr>
<dbl>
<dbl>
1
1
9 3.316625
2
2
9 3.316625
3
3
9 3.316625
4
4
9 3.316625
mean(y)
<dbl>
7.500909
7.500909
7.500000
7.500909
sd(y)
<dbl>
2.031568
2.031657
2.030424
2.030579
cor(x, y)
<dbl>
0.8164205
0.8162365
0.8162867
0.8165214
Podstawowe statystyki dla każdego zbioru są takie same. Co więcej, podobnie ma się sprawa ze współczynnikami regresji liniowej.
for(i in 1:4){
print(i)
print(summary(lm(y~x, anscombe.data, anscombe.data$group==i))$coeff)
}
##
##
##
##
##
##
##
##
##
##
[1] 1
Estimate Std. Error t value
Pr(>|t|)
(Intercept) 3.0000909 1.1247468 2.667348 0.025734051
x
0.5000909 0.1179055 4.241455 0.002169629
[1] 2
Estimate Std. Error t value
Pr(>|t|)
(Intercept) 3.000909 1.1253024 2.666758 0.025758941
x
0.500000 0.1179637 4.238590 0.002178816
[1] 3
Estimate Std. Error t value
Pr(>|t|)
1
##
##
##
##
##
##
(Intercept) 3.0024545 1.1244812
x
0.4997273 0.1178777
[1] 4
Estimate Std. Error
(Intercept) 3.0017273 1.1239211
x
0.4999091 0.1178189
2.670080 0.025619109
4.239372 0.002176305
t value
Pr(>|t|)
2.670763 0.025590425
4.243028 0.002164602
Okazuje się jednak, że każdy z tych zbiorów jest zupełnie inny. W dodatku tylko jeden z nich „nadaje" się do
dopasowania modelu liniowego
ggplot(anscombe.data, aes(x,y)) +
geom_point() + facet_grid(.~group) +
stat_smooth(method = "lm", col = "red", se = F, fullrange = T)
1
2
3
4
12.5
y
10.0
7.5
5.0
5
10
15
5
10
15
5
10
15
5
10
15
x
W tym wypadku jesteśmy w stanie organoleptycznie stwierdzić, że coś jest nie tak. Przy większej liczbie
wymiarów mogłoby to być niemożliwe. Z oczywistych względów zależy nam na tym, żeby sprawdzić czy
dopasowany model ma sens. Pomoże nam w tym diagnostyka regresji.
Funkcje z pakietu base
lmAnscombe1=lm(y~x, anscombe.data, anscombe.data$group==1)
par(mfrow=c(2,3)) # Change the panel layout to 2 x 2
plot(lmAnscombe1, 1:6)
2
9
−1.5
10
4
6
8
1.2
0.8
0.4
1.5
5
6
10
7
8
9
10
Fitted values
Residuals vs Leverage Cook's dist vs Leverage hii (1
2
1
9
0
1
0.5
−1
0.4
0.2
9
0.0
Cook's distance
3
10
Cook's
distance
3
−2
Cook's distance
2
0.5
Theoretical Quantiles
Standardized residuals
Fitted values
−0.5
0.0
2
1
0
−1
10
0.00
0.10
Obs. number
0.20
0.5
1
0.30
Leverage
2
1.5
3
1
0.4
8
9 3
10
9
0.2
7
10
3
Scale−Location
10
0.5
0.0
6
9
Cook's distance
5
3
Normal Q−Q
Standardized residuals
10
Standardized residuals
0
1
9
−2 −1
Residuals
2
Residuals vs Fitted
0
0.05
0.15
0.25
Leverage hii
par(mfrow=c(1,1))
Na dzisiejszych zajęciach nauczymy się analizować powyższe wykresy.
Residuals vs Fitted
Residua poznaliśmy już na poprzednich zajęciach.
r = ˆ = y − ŷ = y − Hy = (I − H)y
Residua powinny oscylować wokół 0, ponieważ rozkład residuów ma średnią 0 (dlaczego?). W szczególności
nie powinno być zależności residuów od ŷ.
Uwaga! Kiedy mamy więcej niż jedną zmienną objaśniającą warto jest porównać wizualnie reszty i wartości
dla każdej ze zmiennych objaśniających. Co nam mówi zależność w tych danych? Jak sprawdzić czy taka
zależność występuje?
Normal QQ
Zobaczmy coś, co nie działa
lmAnscombe3=lm(y~x, anscombe.data, anscombe.data$group==3)
plot(lmAnscombe3, 2)
3
Normal Q−Q
2
1
0
−1
Standardized residuals
3
25
31
28
−1.5
−1.0
−0.5
0.0
0.5
1.0
1.5
Theoretical Quantiles
lm(y ~ x)
Czym są standardized residuals? Zauważmy, że:
r = ˆ = y − ŷ = y − Hy = (I − H)y = (I − H).
Ostatnia równość wynika wprost z definicji. Zatem
r ∼ N (0, σ 2 (I − H)T (I − H) = N (0, σ 2 (I − H)).
Ponieważ znamy macierz H, to możemy ustandaryzować r, tak żeby każde residuum miało wariancję równą 1
ristd = p
ri
σ̂ 2 (1
− hi )
∼ N (0, 1)
Gdzie hi jest i-tym elementem na przekątnej macierzy H. Podkreślmy jeszcze raz, że reszty (także standaryzowane) NIE są niezleżne. Ich zalezność dana jest przez macierz H.
Ćwiczenie, z własności macierzy rzutu H
1
1. ∀
i n < hi < 1
P
2.
i hi = p
Zatem możemy oczekiwać, żeby reszty standaryzowane układały się wzdłuż wykresu qqnorm. Obserwacje,
które nie sprawiają, że mamy grubsze ogony niż rozkład normalny są obserwacjami odstającymi.
Co zrobić jeśli jesteśmy bardzo daleko od rozkładu normalnego?
Scale location
plot(lmAnscombe3, 3)
4
Scale−Location
1.5
1.0
28
0.5
31
0.0
Standardized residuals
25
5
6
7
8
9
10
Fitted values
lm(y ~ x)
Ważnym założeniem jakie czynimy w regresji liniowej jest jednorodność wariancji. W szczególności wariancja
nie powinna zależeć funkcyjnie od wartości ŷi .
Residuals vs Leverage
lmAnscombe2=lm(y~x, anscombe.data, anscombe.data$group==2)
plot(lmAnscombe2, 5)
abline(v=2*ncol(anscombe.data)/nrow(anscombe), col="blue")
5
Residuals vs Leverage
0.0
−1.0
14
0.5
−2.0
Standardized residuals
1.0
0.5
19
17
Cook's distance
0.00
0.05
0.10
0.15
0.20
0.25
1
0.30
Leverage
lm(y ~ x)
Przez dźwignię (ang. leverage) oznaczamy wartości hi . Skąd nazwa dźwignia i o czym ona mówi? hi mówi o
wpływie jaki na ŷi ma yi .
hi =
∂ ŷi
∂yi
Przeciętna wartość hi = np (dlaczego?). W związku z tym, reguła kciuki mówi, że obserwacjami wpływowymi
są te, dla których hi ≥ 2p
n . p to liczba kolumn macierzy X.
Na powyższym wykresie możemy zidentyfikować obserwacje wpływowe, a także sprawdzić czy wariancja
residuów nie zależy od wpływowości obserwacji. Innymi słowy, chcemy, żeby nie było zależności.
Obserwacje o dużym leverage są potencjalnie obserwacjami wpływowymi, to znaczy mogą mieć duży wpływ
na wyznaczenie parametrów w modelu i dopasowanie danych do modelu (R2 ).
Cook’s distance
plot(lmAnscombe2, 4)
6
19
6
8
0.4
0.6
17
0.2
Cook's distance
0.8
Cook's distance
0.0
14
2
4
10
Obs. number
lm(y ~ x)
Miara określająca jaki wpływ na dopasowane wartości ŷ ma obserwacja xi . Liczymy dopasowania dla modelu
z pełnymi danymi, i z danymi bez i-tej obserwacji.
Pn
Di =
j=1 (ŷj
− ŷj,−(i) )2
pσ̂ 2
Dlaczego takie normowanie? pσ̂ 2 to RSS w naszym modelu. Odjęcie jednej obserwacji, nie powinno mieć
większego wpływu. Stąd reguła kciuka mówi, że wpływowa jest obserwacja o mierze Cooka większej niż 1.
Cook’s dist vs Leverage
plot(lmAnscombe2, 6)
7
Cook's dist vs Leverage hii (1 − hii)
0.8
0.6
19
17
0.4
1
0.2
Cook's distance
1.5
2
0.5
0.0
14
0
0.05
0.1
0.15
0.2
0.25
0.3
Leverage hii
lm(y ~ x)
Zauważmy, że możemy przepisać z definicji miarę Cooka jako:
Di =
(β̂ − β̂−(i) )T (X T X)(β̂ − β̂−(i) )
1 hi
=
r2
pσ̂ 2
p 1 − hi i
czyli zależy od reszty i dźwigni. Obserwacja wpływowa nie musi być niedopasowana do modelu. Obserwacja
o dużej reszcie nie musi być wpływowa.
Jak należy rozumieć linie na wykresie? To wartości standardized residuals. Widać w jakich zakresach należy
się spodziewać danych residuuów, czyli można je automatycznie rozpoznać.
Dane o wzroście kobiet w USA
data(women) # Load a built-in data called ‘women’
ggplot(women, aes(x=height, y=weight)) +
geom_point()
8
160
weight
150
140
130
120
60
64
68
height
Mogłoby się wydawać, że regresja powinna hulać, ale. . .
fit = lm(weight ~ height, women)
par(mfrow=c(2,3))
plot(fit, 1:6)
9
72
8
1.5
1.0
0.5
1
120
140
160
Fitted values
Residuals vs Leverage Cook's dist vs Leverage hii (1
0.5
0
1
14
12
Cook's distance
0.00
Obs. number
0.10
0.20
2.5
0.8
1
15
2
1.5
1
0.4
2
15
1
−1
14
Standardized residuals
0.8
0.4
1
0.0
Cook's distance
15
6
0
8
0.0
2
1
0
−1
15
1
Theoretical Quantiles
Cook's distance
4
8
160
Fitted values
2
1
Scale−Location
1
14
0.5
0
0.0
140
15
Cook's distance
120
Standardized residuals
8
Normal Q−Q
−1
1
Standardized residuals
0 1 2 3
15
−2
Residuals
Residuals vs Fitted
0.05
Leverage
0.15 0.2
Leverage hii
par(mfrow=c(1,1))
Testy diagnostyczne
Będziemy używać pakietu lmtest. Ma całkiem dobrą dokumentację
library(lmtest)
vignette("lmtest-intro", package="lmtest")
Jednorodność wariancji
Najbardziej krytyczne założenie w regresji liniowej jest to dotyczące jednorodności wariancji. Uwaga, nie
jest największym problemem rozkład y. Nie musi być normalny. Przy dużej liczbie obserwacji residua
mają rozkład normalny z CTG. Natomiast w przypadku niejednorodnej wariancji nic nie działa na naszą
korzyść. W jednym z wykresów statystycznych patrzyliśmy na zależność pomiedzy wariancja a dopasowanymi
wartościami.
Test Breuscha-Pagana
H0: wariancja jest jednorodnna H1: wariancja zależy od zmiennych objaśniających
bptest(weight~height, data = women)
##
## studentized Breusch-Pagan test
##
## data: weight ~ height
## BP = 1.0088, df = 1, p-value = 0.3152
10
Test niezależności reszt
H0: niezależność reszt H1: autokorelacja rzędzu 1 ze względu na daną zmienną objaśniającą
dwtest(weight~height, order.by = ~height, data = women)
##
## Durbin-Watson test
##
## data: weight ~ height
## DW = 0.31538, p-value = 1.089e-07
## alternative hypothesis: true autocorrelation is greater than 0
Dlaczego to niedobrze? Ten wynik sugeruje, że jest w danych dodatkowa zależność, które nie zdołaliśmy ująć
w modelu liniowym. Zobaczmy co się dzieje na wykresie
1
0
−1
residuals(fit)
2
3
plot(residuals(fit)~height, data=women)
58
60
62
64
66
height
Test Harveya-Colliera
Czy zależnosć pomiędzy zmiennymi jest liniowa?
harvtest(weight~height, order.by = ~height, data = women)
##
## Harvey-Collier test
##
## data: weight ~ height
## HC = 3.7176, df = 12, p-value = 0.00294
Aha, bardzo podejrzane! Spójrzmy jeszcze raz na dane.
data(women) # Load a built-in data called ‘women’
ggplot(women, aes(x=height, y=weight)) +
geom_point() +
stat_smooth(method = "lm", se = F, fullrange = T)
11
68
70
72
160
weight
150
140
130
120
60
64
68
height
Alternatywne pakiety
Bardzo dobry zestaw narzędzi do diagnostyki regresji znajduje się w pakiecie car.
12
72