Anche in questo caso si fa uso di un set di dati da [31], disponibile in rete all’indirizzo:
http://www-unix.oit.umass.edu/∼statdata/statdata/data/lowbwt.dat
Lo scopo dello studio, condotto al Baystate Medical Center (Springfield, Massachusetts) durante il 1986 `e stato quello di identificare i fattori di rischio associati con il partorire bambini di peso inferiore ai 2500 grammi (low birth weight). I dati si riferiscono a 189 donne. Le variabili contenute nel file sono presentate in Tab. 6.1.
L’analisi si inizia importando i dati:
> lw <- read.table("lowbwt.dat", head=TRUE)
> attach(lw)
La variabile dipendente `e in questo caso LOW. Delle altre variabili contenute nel file si usano – nel corso dell’esempio – AGE, LW T, F T V (contine) e RACE (discreta a 3 livelli). Il modello di interesse si fitta facilmente:
> RACE <- factor(RACE) # tratto la variabile RACE come categoriale
> mod.low <- glm(LOW ~ LWT + RACE + AGE + FTV, family=binomial(link=logit))
> summary(mod.low)
6.2 Regressione logistica multipla 115 Coefficients:
Estimate Std. Error z value Pr(>|z|) (Intercept) 1.295366 1.071203 1.209 0.2266 LWT -0.014245 0.006539 -2.178 0.0294 * RACE2 1.003897 0.497798 2.017 0.0437 * RACE3 0.433108 0.362165 1.196 0.2317 AGE -0.023823 0.033722 -0.706 0.4799 FTV -0.049308 0.167201 -0.295 0.7681 [...]
Null deviance: 234.67 on 188 degrees of freedom Residual deviance: 222.57 on 183 degrees of freedom
Come per il caso di regressione logistica semplice la bont`a del modello pu`o essere valutata calco-lando la statisticaG, che in questo caso ci si attende distribuita∼χ2(5):
> G <- mod.low$null.deviance - mod.low$deviance
> G
[1] 12.09909
> P <- 1 - pchisq(G, 5) # valore P
> P
[1] 0.03345496
Si conclude che il modello contiene almeno una variabile che predice in modo adeguato il valore di LOW. Per analizzare il contributo alla significativit`a del modello delle singole variabili si usa la chiamata:
> anova(mod.low)
Analysis of Deviance Table Model: binomial, link: logit Response: LOW
Terms added sequentially (first to last)
Df Deviance Resid. Df Resid. Dev P(>|Chi|)
NULL 188 234.672
LWT 1 5.981 187 228.691 0.014
RACE 2 5.432 185 223.259 0.066
AGE 1 0.598 184 222.661 0.439
FTV 1 0.088 183 222.573 0.767
Se ci si attiene alla sola significativit`a statistica si conclude che `e possibile fittare un modello pi`u
“parsimonioso”, contenente la sola variabile indipendenteLW T. Tuttavia, come nel caso di regressione lineare multipla, l’inclusione di una variabile nel modello pu`o avvenire per motivi differenti, ad esempio in questo caso la variabileRACE`e considerata in letteratura come importante nel predire l’effetto in questione, quindi la si include nel modello ristretto. Nel valutare i risultati della tabella ANOVA si deve sempre ricordare che l’ordine in cui le variabili entrano nel modello altera i valori che vi appaiono.
Si verifica quindi che il modello contenente solamente LW T e RACE sia altrettanto buono del modello completo:
> mod.low2 <- glm(LOW ~ LWT + RACE, family=binomial(link=logit))
> anova(mod.low2, mod.low, test="Chisq") Analysis of Deviance Table
Model 1: LOW ~ LWT + RACE
Model 2: LOW ~ LWT + RACE + AGE + FTV
Resid. Df Resid. Dev Df Deviance P(>|Chi|)
1 185 223.259
2 183 222.573 2 0.686 0.710
Quindi il modello ristretto si comporta altrettanto bene del modello completo, e se lo scopo della ricerca `e costruire il modello pi`u semplice possibile sar`a quello adottato. Il risultato del fit finale `e quindi:
> summary(mod.low2) Coefficients:
Estimate Std. Error z value Pr(>|z|) (Intercept) 0.805754 0.844982 0.954 0.3403 LWT -0.015223 0.006438 -2.365 0.0180 * RACE2 1.081066 0.487994 2.215 0.0267 * RACE3 0.480603 0.356593 1.348 0.1777 [...]
Null deviance: 234.67 on 188 degrees of freedom Residual deviance: 223.26 on 185 degrees of freedom
Per quanto riguarda la valutazione degliOR, il predittoreRACE `e discreto a 3 livelli. In questo caso il livello 1 (RACE = White) viene assunto come categoria di riferimento. Si ha:
OR(RACE2 = Black, RACE1 = White) = exp(1.081) = 2.95 OR(RACE3 = Other, RACE1 = White) = exp(0.4806) = 1.62
6.2.1 Tabelle di classificazione
Un modo spesso utilizzato per presentare i risultati di un fit tramite regressione logistica sono le tabelle di classificazione. In queste tabelle i dati vengono classificati secondo due chiavi: il valore della variabile dipendente dicotomay e il valore di una variabile dicotoma ymod derivato dalla stima della probabilit`a ottenuta dal modello.
I valori di questa variabile si ottengono confrontando il valore della probabilit`a con un cut-off pointc∈[0,1]; se il valore della probabilit`a stimata dal modello superacaymodsi assegna il valore 1, altrimenti il valore 0. Molto spesso si sceglie percil valore 0.5. Nel caso del modello a due predittori fittato nel paragrafo precedente si ha:
> tab <- table(mod.low2$fitted > 0.5, lw$LOW)
> tab
0 1
FALSE 124 53
TRUE 6 6
dove il fattore di riga `e la classificazione operata dal modello confrontata con quella reale (fattore di colonna). Il numero di casi classificati correttamente si ottiene con la chiamata:
> sum(diag(tab))/sum(tab) [1] 0.6878307
quindi circa il 70% dei casi sono classificati in modo corretto.
Questo approccio apparentemente semplice e comodo risente tuttavia del fatto che `e frequente il caso in cui a modelli che ben si adattano a descrivere i dati corrispondono tabelle che predicono assai male l’appartenenza ai gruppiy= 0,1 (si veda [31] pag. 156 e seguenti per una spiegazione dettagliata del fenomeno). Inoltre risulta che la corrispondenza `e sempre migliore nel gruppo pi`u numeroso. Per quasti motivi tale tecnica `e da sconsigliarsi come unico metodo per testare l’adeguatezza del modello.
6.2 Regressione logistica multipla 117
0.1 0.2 0.3 0.4 0.5 0.6
0123456
pi
zj^2
21 3
4 5 6
87 9 10 11
12 13 14 1615 17 18 19
20 21 22 2423 25
26 27 28 29 30
31 32 33
34 35
36 37
38 39
4140 42
4443 45 4746 48 49 50
5251 53
54
5655 57 58
59 60
6261 63
64 65
67 66 69 68 70 71
72
74 73
75
76 7877 79
80 81 82
83
84 85
86 87 88
89 90
9291 9493 95
96 97 98
99 100 101 102
103 104 105
107106 108 109
Figura 6.4: Analisi dei quadrati dei residui.
6.2.2 Calcolo dei residui
Il calcolo dei residui richiede sempre di classificare i dati percovariate pattern. A differenza di quanto visto precedentemente, la procedura coinvolge ora pi`u di una variabile. La funzionecovariate`e dise-gnata per trattare problemi di questo genere e pu`o quindi essere impiegata anche nel caso multivariato.
La chiamata:
> cp <- covariate(mod.low2)
> cp
n Y X.1 X.2 X.3 fitted h rj zj
1 3 0 90 0 0 0.36254716 0.07744969 -1.306227580 -1.359952751 2 1 1 91 0 0 0.35903641 0.02503489 1.336126054 1.353171668 3 1 1 92 0 0 0.35554070 0.02427579 1.346334849 1.362980198 [...]
109 1 0 250 0 1 0.07450801 0.05497125 -0.283736459 -0.291872136
produce in output un data frame contenente tre colonne X.1, X.2 e X.3, relative alle tre variabili che entrano nel modello. Dato che l’ordine in cui sono inserite `e esattamente quello in cui vengono specificate al momento del fit del modello, la prima sar`a relativa al predittoreLW T e le altre due al predittoreRACE (tenendo conto che RACE `e discreto a tre livelli e quindi ha 2 gradi di libert`a a cui sono associate due variabili dummy).
Per verificare qualicovariate patternforniscono i residui maggiori `e spesso usato il plot dizj2contro i valori di ˆπj (in Fig. 6.4), che si pu`o ottenere con le chiamate:
> plot(cp$fitted, cp$zj^2, type="n", xlab="pi", ylab="zj^2")
> text(cp$fitted, cp$zj^2)
dove al posto dei punti `e sostituito il numero dicovariate patternper meglio identificarlo.
Dall’analisi del grafico risulta che icovariate pattern42 e 71 si adattano piuttosto male al modello.
Per verificare a quali casi si riferiscano si pu`o usare la chiamata:
> cp[c(42,71), ]
n Y X.1 X.2 X.3 fitted h rj zj
42 1 1 165 0 0 0.1536757 0.01595530 2.346745 2.365693 71 2 2 187 1 0 0.2768981 0.10243189 2.285361 2.412243