ANOVA su dati binomiali


32

Sto analizzando un set di dati sperimentali. I dati sono costituiti da un vettore associato del tipo di trattamento e da un risultato binomiale:

Treatment    Outcome
A            1
B            0
C            0
D            1
A            0
...

Nella colonna dei risultati, 1 indica un successo e 0 indica un errore. Vorrei capire se il trattamento varia in modo significativo il risultato. Esistono 4 diversi trattamenti con ogni esperimento ripetuto un gran numero di volte (2000 per ciascun trattamento).

La mia domanda è: posso analizzare l'esito binario usando ANOVA? O dovrei usare un test chi-quadro per controllare i dati binomiali? Sembra che il chi-quadrato supponga che la proporzione sarebbe suddivisa equamente, il che non è il caso. Un'altra idea sarebbe quella di riassumere i dati utilizzando la percentuale di successi rispetto ai fallimenti per ciascun trattamento e quindi di utilizzare un test proporzionale.

Sono curioso di ascoltare i tuoi consigli per i test che hanno senso per questo tipo di esperimenti binomiali di successo / fallimento.

Risposte:


18

No all'ANOVA, che assume una variabile di risultato normalmente distribuita (tra le altre cose). Ci sono trasformazioni da "vecchia scuola" da considerare, ma preferirei la regressione logistica (equivalente a un chi-quadrato quando esiste una sola variabile indipendente, come nel tuo caso). Il vantaggio dell'utilizzo della regressione logistica rispetto a un test chi quadro è che è possibile utilizzare facilmente un contrasto lineare per confrontare livelli specifici del trattamento se si riscontra un risultato significativo rispetto al test generale (tipo 3). Ad esempio A contro B, B contro C ecc.

Aggiornamento aggiunto per chiarezza:

Prendendo i dati a portata di mano (il set di dati post doc di Allison ) e usando le variabili cits come segue, questo era il mio punto:

postdocData$citsBin <- ifelse(postdocData$cits>2, 3, postdocData$cits)
postdocData$citsBin <- as.factor(postdocData$citsBin)
ordered(postdocData$citsBin, levels=c("0", "1", "2", "3"))
contrasts(postdocData$citsBin) <- contr.treatment(4, base=4) # set 4th level as reference
contrasts(postdocData$citsBin)
     #   1 2 3
     # 0 1 0 0
     # 1 0 1 0
     # 2 0 0 1
     # 3 0 0 0

# fit the univariate logistic regression model
model.1 <- glm(pdoc~citsBin, data=postdocData, family=binomial(link="logit"))

library(car) # John Fox package
car::Anova(model.1, test="LR", type="III") # type 3 analysis (SAS verbiage)
     # Response: pdoc
     #          LR Chisq Df Pr(>Chisq)
     # citsBin   1.7977  3     0.6154

chisq.test(table(postdocData$citsBin, postdocData$pdoc)) 
     # X-squared = 1.7957, df = 3, p-value = 0.6159

# then can test differences in levels, such as: contrast cits=0 minus cits=1 = 0
# Ho: Beta_1 - Beta_2 = 0
cVec <- c(0,1,-1,0)
car::linearHypothesis(model.1, cVec, verbose=TRUE) 

1
@ user2040. Non capisco come faresti il ​​test di "tipo 3"? È qualcosa legato a SAS? (scusate la mia conoscenza SAS è molto limitata). Avrei fatto una regressione logistica come hai suggerito, ma con 2 variabili fittizie. Inoltre, dato che capisco correttamente, se si esegue la regressione logistica, verificare se alcuni o tutti i coefficienti sono 0 viene eseguito per devianza (o rapporto di probabilità) ed è asintoticamente Chi-Sq (non necessariamente con df = 1)
suncoolsu

1
@suncoolsu: Sì, praticamente parlando dovresti ottenere la stessa conclusione. Non avrei dovuto dire "equivalente" (lavoro con i big data in modo che finiscano allo stesso modo). Ho aggiunto del codice nella risposta per chiarire.
B_Miner

8

Xkknkkkp^k=Xk/nk

g(p)=arcsinp

Tuttavia, alcuni autori moderni sono piuttosto scettici sulla trasformazione dell'arcosina, vedi ad esempio http://www.mun.ca/biology/dschneider/b7932/B7932Final10Dec2010.pdf Ma questi autori si preoccupano di problemi come la previsione, dove mostrano arcsine può portare a problemi. Se ti preoccupi solo del test delle ipotesi, dovrebbe essere OK. Un approccio più moderno potrebbe utilizzare la regressione logistica.


4
(+1) ... se tutti i gruppi hanno lo stesso no. osservazioni.
Scortchi - Ripristina Monica

1
Oppure si possono usare i pesi in base al numero di osservazioni.
kjetil b halvorsen,

3

Vorrei differenziarmi da ciò che pensi del test Chi-Sq. È applicabile anche se i dati non sono binomiali. Si basa sulla normalità asintotica di mle (nella maggior parte dei casi).

Farei una regressione logistica come questa:

logπ^1π^=β0+β1×D1+β2×D2

dove

D1D2D1=D2=0A,D1=1,D2=0B,D1=1D2=1C

Ho:β0=β1=β2=0

È ANOVA equivalente se esiste una relazione o no.

Ho:β0=0

Il test è A ha qualche effetto.

Ho:β1β0=0

Il test è B ha qualche effetto.

Ho:β2(β0+β12)=0

Il test è C ha qualche effetto.

Ora puoi fare ulteriori contrasti per trovare ciò che ti interessa. È ancora un test chi-sq, ma con diversi gradi di libertà (3, 1, 1 e 1, rispettivamente)


Devo ancora pensare al contrasto. Lo correggerò ogni volta che avrò tempo. Mi dispiace per questo
suncoolsu

-3

Penso che tu abbia ragione che ANOVA non dovrebbe essere usato per analizzare la variabile binomiale dipendente. Molte persone usano questo per confrontare i mezzi della variabile di risposta binaria (0 1), ma non dovrebbe essere usato perché questo viola gravemente il presupposto della normalità e della varianza uguale. I test Chi-Square o la regressione logistica sono i migliori per queste situazioni.


Come la tua risposta qui .
Scortchi - Ripristina Monica
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.