5.3 Potenza dei test statistici
5.3.3 Potenza dell’ANOVA
Siano datir gruppi di dati, ognuno di taglian′. L’ipotesiH0 prevede che tutti i gruppi provengano da popolazioni di uguale mediaµ, mentre l’ipotesiH1specifica le differenti medieµ1, . . . , µrper i vari gruppi. Posto:
f = rPr
i=1(µi−µ)2 r σ2
doveσ2 `e la varianza comune per lerpopolazioni, si definisce il parametro di non centralit`aλ:
λ=n f2 (5.5)
doven=rn′`e il numero totale di dati a disposizione dello sperimentatore. Per il calcolo della potenza del test si procede come nei casi precedenti, integrando la distribuzione diF non centrale.
Esempio
Si supponga di voler discriminare fra due ipotesi per cui `e notof = 0.2 in un disegno sperimentale composto da 4 gruppi. Se si hanno a disposizione 20 individui per gruppo quale potenza si pu`o raggiungere?
> n1 <- 20
> r <- 4
> n <- n1*r # dati complessivi
> df1 <- r-1 # gdl numeratore
> df2 <- n-r # gdl denominatore
> fc <- qf(0.95, df1, df2)
> 1 - pf(fc, ncp=n*0.2^2, df1, df2) [1] 0.2780544
La potenza che si raggiunge con un esperimento di tal genere `e bassa, pertanto `e molto elevata la probabilit`a di incorrere in un errore di tipo II.
Se interessa il calcolo del minimo n′ tale per cui si raggiunge una data potenza il procedimento passa per la definizione della funzione di cui trovare lo zero:
> f <- function(n1, nc, r, b) + { df1 <- r - 1;
+ df2 <- (n1*r) - r;
+ 1 - pf(qf(0.95, df1, df2), ncp=(n1*r)*nc^2, df1, df2) - b }
Ad esempio, la taglian′ di ogni gruppo necessaria a raggiungere una potenza 1−β= 0.8 risulta:
> uniroot(f, c(20,200), r=4, nc=0.2, b=0.8)
$root
[1] 69.12567 [...]
quindi sarebbero necessari almeno 70 individui per gruppo, per un totale di ben 280 individui.
Capitolo 6
Modelli lineari generalizzati (GLM)
6.1 Regressione logistica
In questa sezione viene presentata una panoramica veloce e necessariamente incompleta delle pro-blematiche connesse alla regressione logistica. Per una trattazione approfondita dell’argomento si rimanda a [31, 20].
Il modello di regressione logistica semplice `e impiegato quando la variabile dipendenteY `e dicotoma o binaria e si ha un unico predittoreX. Il modello specifico che lega la media dei valori della variabile dipendente dato il valore del predittore, indicata conE(Y|x), `e in questo caso:
π(x)≡E(Y|x) = eβ0+β1x
1 +eβ0+β1x (6.1)
Introducendo la trasformazionelogit:
g(x) = ln
π(x) 1−π(x)
=β0+β1x (6.2)
si ottiene un modello lineare che legag(x) a x.
R mette a disposizione la funzione glm che permette di fittare un modello lineare generalizzato una volta specificata la funzione di link desiderata (in questo caso un link logit). L’esempio seguente illustra la procedura.
Esempio
Si fa uso di un set di dati da [31], disponibile in rete all’indirizzo:
http://www-unix.oit.umass.edu/∼statdata/statdata/data/chdage.dat
Il file presenta i dati 100 pazienti in cui l’eta (variabile AGE) viene messa in relazione con la presenza o l’assenza di significativi disturbi coronarici (CHD). La variabile CHD `e codificata nel modo seguente:
• CHD = 1: disturbo presente.
• CHD = 0: disturbo assente.
Dopo aver acquisito il file di dati lo si importa in R:
> chd <- read.table("chdage.dat", head=TRUE)
> chd
ID AGE CHD
105
1 1 20 0
2 2 23 0
3 3 24 0
4 4 25 0
[..]
100 100 69 1
Il comandoread.tablelegge la tabella di dati passata come primo argomento. L’opzionehead=T RU E specifica che nella prima riga sono contenuti i nomi dei campi.
Come primo passo si esamina il plot dei dati (i punti sono individuati da cerchi in Fig. 6.1):
> attach(chd)
> plot(AGE, CHD)
La funzione attach rende disponibili le variabili contenute nella tabella chd (si pu`o quindi usare la variabile AGE invece di dover scrivere ogni volta chd$AGE). Per meglio comprendere la natura della relazione `e opportuno suddividere i pazienti in classi d’et`a e calcolare la media della variabile dipendente in ciascuna classe. Inseriti nel vettorexi limiti delle classi d’et`a che si vogliono creare, se ne calcolano i punti di mezzo per uso futuro:
> x <- c(19.999,29,34,39,44,49,54,59,70)
> mid <- c((x[2:9]+x[1:8])/2)
Per valutare il valor medio diCHDnelle classi si costruisce un vettoreGRAGE, che classifica i dati per classi d’et`a, usando la funzione cut:
> GRAGE <- cut(AGE, breaks=x)
> y <- tapply(CHD, GRAGE, mean)
> y
(20,29] (29,34] (34,39] (39,44] (44,49] (49,54] (54,59] (59,70]
0.1000000 0.1333333 0.2500000 0.3333333 0.4615385 0.6250000 0.7647059 0.8000000 Si sovrappongono i valori iny al grafico precedente:
> points(mid, y, col="red", pch=3) # percentuali nelle classi
In Fig. 6.1 questi punti sono identificati dalle crocette rosse. Dall’osservazione del grafico si comincia a capire la natura della relazione.
Se lenosservazioni della variabile dipendente y sono codificate (0,1), come nel caso in questione, si ha cheπ(x) =E(Y|x) `e la probabilit`a condizionata cheY sia uguale a 1 dato x, cio`eP(Y = 1|x).
Analogamente 1−π(x) `e la probabilit`a cheY sia uguale a 0 datox, cio`eP(Y = 0|x). Ne segue che la funzione di likelihood `e:
l(β) =
n
Y
i=1
π(xi)yi[1−π(xi)]1−yi , yi= 0,1 (6.3) da cui si deriva l’espressione della log-likelihood:
L(β) = lnl(β) =
n
X
i=1
{yiπ(xi) + (1−yi) [1−π(xi)]}. (6.4) La stima dei parametriβˆsi ottiene massimizzandoL(β) rispetto aβ. Derivando l’Eq. (6.4) rispetto aβ e uguagliando a zero il risultato si ottengono le equazioni di likelihood:
X[yiπ(xi)] = 0 (6.5)
Xxi[yiπ(xi)] = 0 (6.6)
InRla soluzione di queste equazioni si ottiene tramite il fit del modello:
6.1 Regressione logistica 107
> mod <- glm(CHD ~ AGE, family=binomial(link=logit))
> summary(mod) [...]
Coefficients:
Estimate Std. Error z value Pr(>|z|) (Intercept) -5.30945 1.13263 -4.688 2.76e-06 ***
AGE 0.11092 0.02404 4.614 3.95e-06 ***
[...]
Null deviance: 136.66 on 99 degrees of freedom Residual deviance: 107.35 on 98 degrees of freedom AIC: 111.35
Il modello stimato tramite maximum likelihood `e quindi:
ˆ
g(x) =−5.30945 + 0.11092×AGE (6.7)
La likelihood si ottiene con la chiamata:
> logLik(mod)
‘log Lik.’ -53.67655 (df=2) I valori di ˆg si ottengono come:
> mod$linear.predictors mentre per ˆπ(x) si usa la chiamata:
> mod$fitted.values
Il grafico delle predizioni del modello, mostrato con la linea continua in Fig. 6.1 `e dato da:
> lines(AGE, mod$fitted) # fit del modello
Per interpretare le ultime linee date in output dal fit del modello `e necessario introdurre il concetto di devianza. Per far ci`o `e utile pensare ai valori della variabile dipendentey come valori predetti da unmodello saturo, ossia un modello in cui si hanno tanti parametri quanti sono i punti sperimentali.
La quantit`a:
D=−2 ln
likelihood del modello fittato likelihood del modello saturo
(6.8)
`e detta rapporto di likelihood. La statisticaD`e di particolare importanza nello stabilire l’adeguatezza di un modello. Nel caso particolare in cuiyassume solo i valori 0 e 1 la likelihood del modello saturo
`e:
l(modello saturo) =
n
Y
i=1
yiyi×(1−yi)1−yi = 1 e quindi l’Eq. (6.8) si semplifica in:
D=−2 ln(likelihood del modello fittato) (6.9) che viene comunemente detta devianza. Per stabilire l’adeguatezza del modello che include una data variabile si calcola l’espressione:
G=D(modello con la variabile)−D(modello senza la variabile) (6.10) Se la variabile in questione `e continuaG`e distibuito∼χ2(1), mentre se la variabile `e categorialeG risulter`a distribuito come∼χ2(p−1) dovepsono i livelli assunti dalla variabile in esame. In Rla procedura per condurre tale indagine `e molto semplice:
20 30 40 50 60 70
0.00.20.40.60.81.0
AGE
CHD
Figura 6.1: Modello logistico. I dati originali sono rappresentati da cerchi. Le crocette si riferiscono ai dati raggruppati in classi d’et`a e la linea continua `e il fit logistico.
> anova(mod, test="Chisq") Analysis of Deviance Table [...]
Df Deviance Resid. Df Resid. Dev P(>|Chi|)
NULL 99 136.66
AGE 1 29.31 98 107.35 6.168e-08
Quindi si ha evidenza molto altamente significativa che la variabileAGE sia un buon predittore per CHD. I due valori di devianza (136.66 e 107.35) che appaiono nella tabella ANOVA sono gli stessi che si trovano riassunti nell’output del fit del modello.
Un seconda tecnica per valutare la significativit`a di un parametro `e quella del test di Wald. Si calcola il valore campionario della variabileW:
w= βˆ SE(ˆ β)ˆ
la quale `e distribuita ∼N(0,1). Si testa quindi la significativit`a del valore campionario con un test z. Rriporta questo test nelle linee in cui fornisce i parametri e il loro errore standard. I risultati sono nelle colonne “z value” e “Pr(>|z|)”. A causa della sua limitata potenza al test di Wald `e preferibile l’indagine sul rapporto di likelihood di cui sopra.