Teste si deux distributions binomiales sont statistiquement différentes l'une de l'autre

37

J'ai trois groupes de données, chacun avec une distribution binomiale (c'est-à-dire que chaque groupe a des éléments qui réussissent ou échouent). Je n'ai pas de probabilité de réussite prévue, mais je ne peux me fier qu'au taux de réussite de chacun comme approximation du taux de réussite réel. J'ai seulement trouvé cette question , qui est proche mais ne semble pas traiter exactement avec ce scénario.

Pour simplifier le test, disons simplement que j'ai 2 groupes (3 peuvent être étendus à partir de ce scénario de base).

  • Essais du groupe 1: = 2455n1
  • Essais du groupe 2: = 2730n2

  • Succès du groupe 1: = 1556k1
  • Succès du groupe 2: = 1671k2

Je n'ai pas de probabilité de réussite attendue, seulement ce que je sais des échantillons. Donc, mon taux de réussite implicite pour les deux groupes est:

  • Taux de réussite du groupe 1: = 1556/2455 = 63,4%p1
  • Taux de réussite du groupe 2: = 1671/2730 = 61,2%p2

Le taux de réussite de chacun des échantillons est assez proche. Cependant, la taille de mes échantillons est également assez grande. Si je vérifie le CDF de la distribution binomiale pour voir à quel point il est différent du premier (où je suppose que le premier est le test nul), la probabilité que le second puisse être atteint est très faible.

Dans Excel:

1-BINOM.DIST (1556,2455,61,2%, VRAI) = 0,012

Cependant, ceci ne tient pas compte de la variance du premier résultat, il suppose simplement que le premier résultat est la probabilité du test.

Existe-t-il un meilleur moyen de vérifier si ces deux échantillons de données sont réellement différents sur le plan statistique?

Scott
la source
Une autre question que je suis tombé sur qui n'a pas vraiment aidé beaucoup: stats.stackexchange.com/questions/82059/…
Scott
Est-ce que cette question aide? stats.stackexchange.com/questions/25299/…
Eric
2
En R, vous pouvez utiliser prop.test: prop.test(c(1556, 1671), c(2455, 2730)).
COOLSerdash
1
Pourrait être effectué sous la forme d'un test de proportions à deux échantillons (binomial) ou d'un chi-carré 2x2
Glen_b -Reinstate Monica
1
Étendre le scénario de base de deux groupes à trois pourrait poser problème, car les tests seront interdépendants: vous aurez besoin d’une version binomiale de ANOVA pour gérer cela.
whuber

Réponses:

36

La solution est un simple google away: http://en.wikipedia.org/wiki/Statistical_hypothesis_testing

Donc, vous souhaitez tester l'hypothèse nulle suivante contre l'alternative donnée

H A : p 1p 2H0:p1=p2 contreHA:p1p2

Donc, il vous suffit de calculer la statistique de test qui est

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

où . p^=n1p^1+n2p^2n1+n2

Alors maintenant, dans votre problème, , , et p 2=0,612n1=2455n2=2730.p^1=.634p^2=.612n1=2455n2=2730.

Une fois que vous avez calculé la statistique de test, il vous suffit de calculer la valeur de la région critique correspondante pour comparer également votre statistique de test. Par exemple, si vous testez cette hypothèse au niveau de confiance de 95%, vous devez comparer votre statistique de test à la valeur de la région critique de (pour ce test à deux queues).zα/2=1,96

Maintenant, si vous pouvez alors rejeter l'hypothèse nulle, sinon vous ne pourrez pas rejeter l'hypothèse nulle. z>zα/2

Eh bien, cette solution fonctionne dans le cas où vous comparez deux groupes, mais elle ne se généralise pas au cas où vous souhaitez comparer trois groupes.

Vous pouvez toutefois utiliser un test de Chi Squared pour vérifier si les trois groupes ont des proportions égales, comme suggéré par @Eric dans son commentaire ci-dessus: "Cette question est-elle utile? Stats.stackexchange.com/questions/25299/ ... - Eric"

Dan
la source
6
Merci @ Dan. Comme souvent avec Google, connaître le bon terme à rechercher est le premier obstacle. J'ai jeté un coup d'œil au test du chi carré. Le problème ici, comme dans le cas où je me trouvais pour la première fois bloqué, est que mon calcul attendu est basé sur l'échantillon. Je ne peux donc pas fournir de valeur attendue, car mes échantillons sont utilisés pour déterminer cette valeur attendue.
Scott
@ Scott, si vos proportions supposées pour les trois groupes sont égales, la valeur attendue doit être 1/3 pour chaque groupe.
Dan
1
Une explication connexe de l'utilisation de ce test peut être trouvée ici: itl.nist.gov/div898/handbook/prc/section3/prc33.htm (actuellement, la page Wikipedia ne fournit pas un exemple explicite ).
wwwilliam
Quelqu'un peut-il m'aider à prouver l'écart-type de la différence entre les deux distributions binomiales, autrement dit, à prouver que:
p^(1-p^)(1n1+1n2)=p^1(1-p^1)n1+p^2(1-p^2)n2
Tanguy
répondre à ma question peut être trouvé ici: stats.stackexchange.com/questions/361015/…
Tanguy
11

En R, la réponse est calculée comme suit:

fisher.test(rbind(c(1556,2455-1556), c(1671,2730-1671)), alternative="less")
David Makovoz
la source
8
Envisageriez-vous d'écrire un peu plus que de fournir la fonction R? Nommer la fonction n'aide pas à comprendre le problème et tout le monde n'utilise pas R, ce ne serait donc d'aucune aide.
Tim
1
C'est la réponse statistique la plus exacte, et fonctionne pour un petit nombre d'observations (voir ce qui suit: itl.nist.gov/div898/handbook/prc/section3/prc33.htm ).
Andrew Mao
1
Fishers test exact fr.wikipedia.org/wiki/Fisher's_exact_test
Keith
3

Juste un résumé:

Les réponses de Dan et Abaumann suggèrent de tester sous un modèle binomial où l'hypothèse nulle est un modèle binomial unifié dont la moyenne est estimée à partir des données empiriques. Leurs réponses sont correctes en théorie, mais elles nécessitent une approximation utilisant la distribution normale car la distribution de la statistique de test ne suit pas exactement la distribution normale. Par conséquent, ce n'est correct que pour un échantillon de grande taille.

Mais la réponse de David indique un test non paramétrique utilisant le test de Fisher. Les informations sont ici: https://en.wikipedia.org/wiki/Fisher%27s_exact_test Et il peut être appliqué à des échantillons de petite taille mais difficile à calculer pour des échantillons de grande taille.

Quel test utiliser et à quel point vous faites confiance à votre valeur p est un mystère. Mais il y a toujours des biais dans le test à choisir.

Dr_Hope
la source
2
Essayez-vous de suggérer que les tailles d'échantillon dans les milliers, avec des valeurs de paramètre probables proches de , ne soient pas grandes à cette fin? 1/2
whuber
1
Dans ce cas, je pense que vous pourriez utiliser la méthode de Dan, mais calculer la valeur p de manière exacte (binôme) et approximative (Z> Φ − 1 (1 − α / 2) Z> Φ − 1 (1 − α / 2) et Z <Φ − 1 (α / 2)) pour comparer s’ils sont assez proches.
Dr_Hope
1

Votre statistique de test est , où .Z=p1^-p2^p^(1-p^)(1/n1+1/n2)p^=n1p1^+n2p2^n1+n2

Les régions critiques sont et pour le test à deux queues avec les ajustements habituels pour un un test à queue.Z>Φ-1(1-α/2)Z<Φ-1(α/2)

Abaumann
la source
1

En Python, statsmodels a une fonction appelée proportions_ztest. Voici un exemple de son utilisation:

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))

Cela imprime:

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

Original post: La réponse de Dan est en fait incorrecte, ne choque personne. Un test z est utilisé uniquement si vos données suivent une distribution normale standard. Dans ce cas, vos données suivent une distribution binomiale. Par conséquent, utilisez un test du khi-carré si votre échantillon est grand ou un test de Fisher si votre échantillon est petit.

Edit: Mon erreur, excuses à @Dan. Un test z est valide ici si vos variables sont indépendantes. Si cette hypothèse n'est pas satisfaite ou inconnue, un test z peut être invalide.

Ryan
la source
3
χ2
Si vous croyez en la CLT, la distribution normale existe généralement.
Ryan
2
@Ryan Eh bien, je crois au CLT mais cela ne dit rien de n = 30, n = 300 ou n = 5000. Vous n'obtenez en réalité la normalité que si vous parvenez d'une manière ou d'une autre à avoir une taille d'échantillon infinie ou si vous avez commencé d'une manière ou d'une autre avec la normalité. Les questions sur la façon dont nous sommes proches de la normale en prenant des moyennes ne sont pas traitées par le CLT .. (On peut considérer ces questions , mais nous ne pas utiliser le CLT pour savoir si le rapprochement est tout bon.)
Glen_b -Reinstate Monica