Esatto test binomiale di due proporzioni campione in R (e alcuni strani valori p)


23

Sto cercando di risolvere la seguente domanda:

Il giocatore A ha vinto 17 partite su 25 mentre il giocatore B ne ha vinte 8 su 20 - c'è una differenza significativa tra i due rapporti?

La cosa da fare in R che mi viene in mente è la seguente:

> prop.test(c(17,8),c(25,20),correct=FALSE)

    2-sample test for equality of proportions without continuity correction

data:  c(17, 8) out of c(25, 20)
X-squared = 3.528, df = 1, p-value = 0.06034
alternative hypothesis: two.sided
95 percent confidence interval:
 -0.002016956  0.562016956
sample estimates:
prop 1 prop 2 
  0.68   0.40 

Quindi questo test afferma che la differenza non è significativa al livello di confidenza del 95%.

Perché sappiamo che prop.test()sta usando solo un'approssimazione, voglio rendere le cose più esatte usando un test binomiale esatto - e lo faccio in entrambi i modi:

> binom.test(x=17,n=25,p=8/20)

    Exact binomial test

data:  17 and 25
number of successes = 17, number of trials = 25, p-value = 0.006693
alternative hypothesis: true probability of success is not equal to 0.4
95 percent confidence interval:
 0.4649993 0.8505046
sample estimates:
probability of success 
                  0.68 

> binom.test(x=8,n=20,p=17/25)

    Exact binomial test

data:  8 and 20
number of successes = 8, number of trials = 20, p-value = 0.01377
alternative hypothesis: true probability of success is not equal to 0.68
95 percent confidence interval:
 0.1911901 0.6394574
sample estimates:
probability of success 
                   0.4 

Ora è strano, no? I valori p ogni volta sono totalmente diversi! In entrambi i casi ora i risultati sono (altamente) significativi ma i valori di p sembrano saltare piuttosto a casaccio.

Le mie domande

  1. Perché i p-value che diverso ogni volta?
  2. Come eseguire un test binomiale esatto in due proporzioni campione in R correttamente?

3
Sebbene la funzione R sia diversa ( prop.testvs chisq.test), lo stesso concetto di base è in questa domanda . Stai eseguendo tre diversi test con differenti "ipotesi nulla" in ciascuno dei tuoi tre esempi.
Affine,

Risposte:


26

Se stai cercando un test "esatto" per due proporzioni binomiali, credo che tu stia cercando il test esatto di Fisher . In R si applica così:

> fisher.test(matrix(c(17, 25-17, 8, 20-8), ncol=2))
    Fisher's Exact Test for Count Data
data:  matrix(c(17, 25 - 17, 8, 20 - 8), ncol = 2)
p-value = 0.07671
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
  0.7990888 13.0020065
sample estimates:
odds ratio 
  3.101466 

La fisher.testfunzione accetta un oggetto matrice dei "successi" e degli "insuccessi" delle due proporzioni binomiali. Come puoi vedere, tuttavia, l'ipotesi su due lati non è ancora significativa, mi dispiace dirlo. Tuttavia, il test Exact di Fisher viene in genere applicato solo quando il conteggio delle cellule è basso (in genere questo significa 5 o meno ma alcuni dicono 10), quindi l'utilizzo iniziale di prop.testè più appropriato.

Per quanto riguarda le tue binom.testchiamate, stai fraintendendo la chiamata. Quando corri, binom.test(x=17,n=25,p=8/20)stai verificando se la proporzione è significativamente diversa da una popolazione in cui la probabilità di successo è 8/20 . Allo stesso modo con binom.test(x=8,n=20,p=17/25)dice che la probabilità di successo è 17/25, motivo per cui questi valori p differiscono. Pertanto non stai affatto confrontando le due proporzioni.


2
Grazie, ho accettato la tua risposta. Quando dici che prop.test è "più appropriato" cosa intendi esattamente? Il risultato più esatto è (letteralmente) dato dal test esatto di Fisher, non è vero?
vonjd,

4
Questo è in realtà qualcosa di cui si discute tra gli statistici e non ho una risposta assoluta. Storicamente, hai evitato quello di Fisher perché diventa molto complesso dal punto di vista computazionale ma il computer lo aggira. In generale, tuttavia, il test esatto di Fisher è prudente e se i tuoi numeri sono abbastanza grandi, prop.testè più probabile che la statistica chi-quadro (che è ciò che calcola) non commetta un errore di tipo II.
cdeterman,

Il punto cruciale per me sono le diverse semantiche di prop.teste fisher.test: la prima si chiama like prop.test(matrix(c(17, 8, 25, 20), ncol=2))(dando il numero di successi nella prima colonna e il numero di prove nella seconda colonna), mentre la seconda si chiama like fisher.test(matrix(c(17, 25-17, 8, 20-8), ncol=2))(dando il numero di successi e fallimenti ); poiché anche la fisher.testtrasposizione non sembra cambiare il risultato.
krlmlr,

Un'alternativa più potente è disponibile anche per i test 2x2 - en.wikipedia.org/wiki/Barnard%27s_test
Hamy

4

C'è una differenza tra due campioni e un campione rispetto a un'ipotesi nota. Quindi se qualcuno lancia una moneta 100 volte e ottiene teste 55 volte e l'ipotesi è una moneta giusta, contro due persone che lanciano una moneta di equità sconosciuta e una che ottiene teste 55 volte e l'altra 45 volte. Nel primo caso stai semplicemente cercando di identificare se la pinna sembra lanciare una moneta giusta. In quest'ultimo caso, stai cercando di vedere se stanno lanciando monete della stessa correttezza. Puoi vedere come se guardi ogni giocatore con una probabilità nota (45 contro 50 e 55 contro 50) sia diverso dal confrontarli tra loro (45 contro 55).


2

La sintassi del binom.testè i tuoi successi in una serie di prove rispetto a una stima dei punti della popolazione . Sebbene sia stato inserito come p = 8/20, il calcolo è come se quella fosse una verità assoluta data da Dio 0.4 con varianza zero attorno ad essa. O è come se stessi confrontando le 17 vittorie su 25 del giocatore A con le ipotetiche 8 miliardi di vittorie del giocatore B su 20 miliardi di partite. Tuttavia, prop.testconfronta la proporzione di 17/25 con tutta la sua varianza potenziale con la proporzione di 8/20 con tutta la propria varianza. In altre parole, la varianza intorno a 0,7 (stima del 17/25) e la varianza intorno a 0,4 possono sanguinare l' una nell'altra con una risultante p = 0,06.


Quindi questo significherebbe che il modo giusto per risolvere la domanda originale è prop.test(c(17,8),c(25,20),correct=FALSE), giusto?
vonjd

1
Si, è corretto. Se vuoi una guida per sapere se dovresti avere correct = FALSEvs correct = TRUEallora ti suggerisco di leggere le seguenti stats.stackexchange.com/questions/185433/…
Farrel

2

Innanzitutto suggerirei di voler eseguire una correzione di continuità, poiché stai stimando una distribuzione discreta con una distribuzione continua (chi-quadrato).

In secondo luogo, è importante chiarire come è stato condotto l '"esperimento". Il numero di giochi giocati da ciascuna persona è stato determinato in anticipo (o in volgare del settore, fissato in base alla progettazione)? In tal caso, e supponendo inoltre che i risultati di ciascun giocatore siano indipendenti dall'altro, hai a che fare con il prodotto di 2 distribuzioni binomiali. Se invece il numero di giochi era libero di variare (diciamo ad esempio, il numero di giochi giocati da ogni persona erano variabili, in base al numero di giochi che ciascuno era in grado di completare in un intervallo di tempo fisso), allora hai a che fare con un Multinomial o distribuzione di Poisson.

Nel secondo caso il test chi-quadro (o qual è la stessa cosa, un test z di differenza nelle proporzioni) è appropriato, ma nel primo caso non lo è. Nel primo caso, devi davvero calcolare il prodotto esatto di ogni possibile esito binomiale per ciascun giocatore e sommare queste probabilità per tutte le occorrenze uguali o inferiori alla probabilità binomiale comune degli esiti osservati (è semplicemente il prodotto dei 2 binomi perché i risultati di ciascun giocatore sono indipendenti dai risultati dell'altro giocatore).

Riconosci innanzitutto che lo scopo centrale di qualsiasi test di ipotesi è calcolare quanto "raro" o insolito sia il risultato specifico che hai osservato, rispetto a tutti gli altri possibili risultati. Questo viene calcolato calcolando la probabilità del risultato che hai osservato - dato il presupposto che l'ipotesi nulla sia vera - sommato insieme a tutti gli altri possibili risultati di probabilità uguale o inferiore.

Ora è inutile ripetere che ciò che intendiamo per "quanto è raro" è "quanto è bassa la probabilità di osservare il risultato ottenuto rispetto a tutti gli altri possibili risultati?" Bene, la probabilità del risultato specifico che abbiamo osservato è 0,0679 * 0,0793 = 0,005115. Ora considera un risultato alternativo specifico: è certamente possibile che il giocatore A abbia vinto 7 delle sue 20 partite e che il giocatore B abbia vinto 13 delle sue 25 partite. La probabilità di questo risultato è 0,004959. Si noti che questo è INFERIORE alla probabilità del nostro risultato osservato, quindi dovrebbe essere incluso nel valore p. Ma guarda ancora: se stai decidendo su quali risultati includere nella tua somma in base al fatto che la differenza nelle proporzioni superi la differenza nelle proporzioni nel nostro risultato osservato, questa probabilità sarà esclusa! Perché? Perché la differenza nelle proporzioni per questo risultato specifico è inferiore alla differenza nelle proporzioni per il nostro risultato osservato. Ma questo non è il focus giusto - dobbiamo preoccuparci della probabilità di questo risultato specifico e se è uguale o inferiore alla probabilità del risultato che abbiamo osservato!

Una buona spiegazione formale di questo può essere trovata qui:

http://data.princeton.edu/wws509/notes/c5.pdf

Si noti in particolare l'affermazione a pagina 9 che "Se il margine di riga è fisso e lo schema di campionamento è binomiale, è necessario utilizzare il modello binomiale del prodotto, poiché non è possibile stimare la distribuzione congiunta per le due variabili senza ulteriori informazioni."


Per il codice R che calcola la somma delle probabilità binomiali comuni che hanno una probabilità uguale o inferiore di verificarsi rispetto alla probabilità del risultato osservato, vedere la risposta al seguente post correlato: stats.stackexchange.com/questions/213295/…
user221943,
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.