Verifica se due distribuzioni binomiali sono statisticamente diverse l'una dall'altra


37

Ho tre gruppi di dati, ognuno con una distribuzione binomiale (cioè ogni gruppo ha elementi che hanno successo o fallimento). Non ho una probabilità prevista di successo, ma invece posso solo fare affidamento sul tasso di successo di ciascuno come approssimazione per il vero tasso di successo. Ho trovato solo questa domanda , che è vicina ma non sembra affrontare esattamente questo scenario.

Per semplificare il test, diciamo solo che ho 2 gruppi (3 possono essere estesi da questo caso di base).

  • Prove di gruppo 1: n1 = 2455
  • Prove di gruppo 2: n2 = 2730

  • Successo gruppo 1: k1 = 1556
  • Successo gruppo 2: k2 = 1671

Non ho una probabilità di successo attesa, solo ciò che so dai campioni. Quindi il mio tasso di successo implicito per i due gruppi è:

  • Tasso di successo del gruppo 1: p1 = 1556/2455 = 63,4%
  • Gruppo 2 tasso di successo: p2 = 1671/2730 = 61.2%

Il tasso di successo di ciascuno dei campioni è abbastanza vicino. Tuttavia, anche le dimensioni dei miei campioni sono piuttosto grandi. Se controllo il CDF della distribuzione binomiale per vedere quanto è diverso dal primo (dove suppongo che il primo sia il test null) ho una probabilità molto piccola che il secondo possa essere raggiunto.

In Excel:

1-BINOM.DIST (1556.2455,61,2%, TRUE) = 0,012

Tuttavia, ciò non tiene conto di nessuna variazione del primo risultato, ma presuppone solo che il primo risultato sia la probabilità del test.

Esiste un modo migliore per verificare se questi due campioni di dati sono effettivamente statisticamente diversi l'uno dall'altro?


Un'altra domanda che mi è venuta in mente non è stata di grande aiuto: stats.stackexchange.com/questions/82059/…
Scott,


2
In R, è possibile utilizzare prop.test: prop.test(c(1556, 1671), c(2455, 2730)).
COOLSerdash,

1
Potrebbe essere fatto come un test di proporzioni a due campioni (binomiale) o un chi-quadrato 2x2
Glen_b -Restate Monica

1
L'estensione del caso base da due gruppi a tre potrebbe essere problematico, poiché i test saranno interdipendenti: per gestirlo avrai bisogno di una versione binomiale di ANOVA.
whuber

Risposte:


36

La soluzione è un semplice google: http://en.wikipedia.org/wiki/Statistical_hypothesis_testing

Quindi ti piacerebbe testare la seguente ipotesi nulla contro la data alternativa

contro H A : p 1p 2H0:p1=p2HA:p1p2

Quindi devi solo calcolare la statistica del test che è

z=p^1p^2p^(1p^)(1n1+1n2)

dove p = n 1 p 1 + n 2 p 2 . p^=n1p^1+n2p^2n1+n2

Così ora, nel vostro , p 2 = 0,612 , n 1 = 2455 e n 2 = 2730.p^1=.634p^2=.612n1=2455n2=2730.

Una volta calcolata la statistica del test, devi solo calcolare il valore della regione critica corrispondente per confrontare anche la statistica del test. Ad esempio, se si sta verificando questa ipotesi al livello di confidenza del 95%, è necessario confrontare la statistica del test con il valore della regione critica di (per questo test a due code).zα/2=1.96

Ora, se allora puoi rifiutare l'ipotesi nulla, altrimenti non puoi rifiutare l'ipotesi nulla. z>zα/2

Bene, questa soluzione funziona nel caso in cui si confrontino due gruppi, ma non si generalizza al caso in cui si desidera confrontare 3 gruppi.

Puoi comunque utilizzare un test Chi Squared per verificare se tutti e tre i gruppi hanno le stesse proporzioni come suggerito da @Eric nel suo commento sopra: "Questa domanda aiuta? Stats.stackexchange.com/questions/25299/ ... - Eric"


6
Grazie @ Dan. Come molte volte con Google, conoscere il termine giusto da cercare è il primo ostacolo. Ho dato un'occhiata al test chi quadrato. Il problema qui, come nel caso in cui mi sono bloccato per la prima volta, è che il mio calcolo previsto si basa sul campione. Non posso quindi fornire un valore atteso, perché i miei campioni vengono utilizzati per determinare quel valore atteso.
Scott,

@Scott, se le tue proporzioni ipotizzate per i tre gruppi sono che sono tutte uguali, il valore atteso dovrebbe essere 1/3 per ciascun gruppo.
Dan,

1
Una spiegazione correlata sull'uso di questo test è disponibile qui: itl.nist.gov/div898/handbook/prc/section3/prc33.htm (attualmente, la pagina di Wikipedia non fornisce un esempio dettagliato).
wwwilliam,

p^(1p^)(1n1+1n2)=p^1(1p^1)n1+p^2(1p^2)n2
Tanguy

answer to my question can be found here: stats.stackexchange.com/questions/361015/…
Tanguy

11

In R the answer is calculated as:

fisher.test(rbind(c(1556,2455-1556), c(1671,2730-1671)), alternative="less")

8
Would you consider writing a little bit more than providing the R function? Naming the function does not help in understanding the problem and not everyone use R, so it would be no help for them.
Tim

1
Questa è la risposta statistica più esatta e funziona per un numero limitato di osservazioni (vedere quanto segue: itl.nist.gov/div898/handbook/prc/section3/prc33.htm ).
Andrew Mao,

1
Test esatto dei pescatori en.wikipedia.org/wiki/Fisher's_exact_test
Keith

3

Solo un riassunto:

Le risposte di Dan e Abaumann suggeriscono di provare secondo un modello binomiale in cui l'ipotesi nulla è un singolo modello binomiale unificato con la sua media stimata dai dati empirici. Le loro risposte sono corrette in teoria ma hanno bisogno di approssimazione usando la distribuzione normale poiché la distribuzione della statistica del test non segue esattamente la distribuzione normale. Pertanto, è corretto solo per campioni di grandi dimensioni.

Ma la risposta di David sta indicando un test non parametrico usando il test di Fisher. Le informazioni sono qui: https://en.wikipedia.org/wiki/Fisher%27s_exact_test E possono essere applicate a campioni di piccole dimensioni ma difficili da calcolare per campioni di grandi dimensioni.

Quale test usare e quanto ti fidi del tuo valore p è un mistero. Ma ci sono sempre distorsioni nel test da scegliere.


2
Are you trying to suggest that sample sizes in the thousands, with likely parameter values near 1/2, are not large for this purpose?
whuber

1
For this case, I think you could use Dan's method but compute the p value in an exact way (binomial) and approxiamte way (normal Z>Φ−1(1−α/2)Z>Φ−1(1−α/2) and Z<Φ−1(α/2) ) to compare whether they are close enough.
Dr_Hope

1

Your test statistic is Z=p1^p2^p^(1p^)(1/n1+1/n2), where p^=n1p1^+n2p2^n1+n2.

The critical regions are Z>Φ1(1α/2) and Z<Φ1(α/2) for the two-tailed test with the usual adjustments for a one-tailed test.


1

In Python, statsmodels has a function called proportions_ztest. Here is an example of its usage:

import statsmodels.api as sm
import numpy as np
import rpy2.robjects.packages as rpackages
import rpy2.robjects as robjects
rstats = rpackages.importr('stats')

s1 = 1556
n1 = 2455

s2 = 1671
n2 = 2730

# manual calculation
p1 = s1 / n1
p2 = s2 / n2
p = (s1 + s2) / (n1 + n2)

z = (p1 - p2) / (p*(1-p)*((1/n1)+(1/n2)))**0.5

# using R in Python with rpy2
rmatrix = robjects.r.matrix(robjects.IntVector([s1, n1-s1, s2,n2-s2]), nrow=2)
fisher_test = rstats.fisher_test(rmatrix, alternative="two.sided")

zscore, pval = sm.stats.proportions_ztest([s1, s2], [n1, n2], alternative='two-sided')

print('Manual calculation of z: {:.6f}'.format(z))
print('Z-score from statsmodels: {:.6f}'.format(zscore))
print('R pvalue from fisher.test: {:.6f}'.format(fisher_test[0][0]))
print('Statsmodels pvalue: {:.6f}'.format(pval))

This prints out:

Manual calculation of z: 1.610825
Z-score from statsmodels: 1.610825
R pvalue from fisher.test: 0.108268
Statsmodels pvalue: 0.107218

-1

Original post: Dan's answer is actually incorrect, not to offend anyone. A z-test is used only if your data follows a standard normal distribution. In this case, your data follows a binomial distribution, therefore a use a chi-squared test if your sample is large or fisher's test if your sample is small.

Edit: My mistake, apologies to @Dan. A z-test is valid here if your variables are independent. If this assumption is not met or unknown, a z-test may be invalid.


3
The "only if" part is an extreme position unlikely to be shared by many. No data actually follow a normal distribution. Few data actually behave as if drawn randomly and independently from a normal distribution. Nevertheless, z tests continue to be effective because the distributions of statistics (such as the difference of means) to which they apply can be extremely well approximated by normal distributions. In fact, the appeal to a χ2 test relies on the same asymptotic assumptions as a z test does!
whuber

If you believe in the CLT, then the normal distribution does commonly exist.
Ryan

2
@Ryan Well, I believe in the CLT but it doesn't say anything about n=30 or n=300 or n=5000. You don't actually get normality unless you somehow manage to have infinite sample sizes, or you somehow started with normality. Questions about how close we are to normality when taking averages are not addressed by the CLT.. (We can consider those questions but we don't use the CLT to find out if the approximation is any good.)
Glen_b -Reinstate 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.