İki binom dağılımının birbirinden istatistiksel olarak farklı olup olmadığını test edin


37

Her biri binom dağılımlı üç veri grubum var (yani, her bir grupta başarılı veya başarısız olan öğeler var). Öngörülen bir başarı olasılığım yok, ancak bunun yerine her birinin başarı oranına gerçek başarı oranı için bir yaklaşım olarak dayanabilir. Bu soruyu sadece buldum , bu çok yakın ancak bu senaryo ile tam olarak ilgilenmiyor gibi görünüyor.

Testi basitleştirmek için 2 grubum olduğunu varsayalım (bu temel durumdan 3 tanesi uzatılabilir).

  • Grup 1 denemeleri: = 2455n1
  • Grup 2 denemeleri: = 2730n2

  • Grup 1 başarısı: = 1556k1
  • 2. Grup başarısı: = 1671k2

Beklenen bir başarı olasılığım yok, sadece örneklerden bildiğim kadarıyla. Yani iki grup için ima ettiğim başarı oranı:

  • Grup 1 başarı oranı: = 1556/2455 =% 63,4p1
  • Grup 2 başarı oranı: = 1671/2730 =% 61,2p2

Numunelerin her birinin başarı oranı oldukça yakın. Ancak örneklem büyüklüğüm de oldukça büyük. Eğer ilkinden ne kadar farklı olduğunu görmek için binom dağılımının CDF'sini kontrol edersem (ilkini null testi olarak kabul ediyorum) ikincinin elde edilebileceği konusunda çok küçük bir olasılık elde ederim.

Excel'de:

1-BINOM.DIST (1556,2455,61.2,% TRUE) = 0,012

Ancak, bu ilk sonucun herhangi bir varyansını dikkate almaz, sadece ilk sonucun test olasılığı olduğunu varsayar.

Bu iki veri örneğinin aslında istatistiki olarak birbirinden farklı olup olmadığını test etmenin daha iyi bir yolu var mı?


Karşılaştığım başka bir soru da pek yardımcı olmadı: stats.stackexchange.com/questions/82059/…
Scott

Bu soru yardımcı olur mu? stats.stackexchange.com/questions/25299/…
Eric

2
R olarak, şunu kullanabilirsiniz prop.test: prop.test(c(1556, 1671), c(2455, 2730)).
COOLSerdash

1
İki örneklemli (binom) orantı testi veya 2x2 ki-kare olarak yapılabilir
Glen_b

1
Temel durumu iki gruptan üçe genişletmek sorunlu olabilir, çünkü testler birbirine bağlı olacaktır: bununla başa çıkmak için ANOVA'nın binom versiyonuna ihtiyacınız olacak.
whuber

Yanıtlar:


36

Çözüm, basit bir google uzakta: http://en.wikipedia.org/wiki/Statistical_hypothesis_testing

Bu yüzden, aşağıdaki boş hipotezi verilen alternatife karşı denemek istersiniz.

H A : p 1p 2H0:p1=p2 , karşıHA:p1p2

Yani sadece test istatistiklerini hesaplamanız gerekir.

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

burada . p^=n1p^1+n2p^2n1+n2

Şimdi probleminizde, , , ve p 2=0,612, n1=2455N2=2730.p^1=.634p^2=.612n1=2455n2=2730.

Test istatistiklerini hesapladığınızda, test istatistiğinizi de karşılaştırmak için ilgili kritik bölge değerini hesaplamanız yeterlidir. Örneğin, bu hipotezi% 95 güven düzeyinde test ediyorsanız, test istatistiklerinizi (bu iki kuyruklu test için) kritik bölge değeriyle karşılaştırmanız gerekir .zα/2=1.96

Şimdi, eğer ise boş hipotezi reddedebilirsiniz, aksi takdirde boş hipotezi reddetmek zorunda kalmazsınız. z>zα/2

Peki, bu çözüm iki grubu karşılaştırırken durum için işe yarar, ancak 3 grubu karşılaştırmak istediğiniz durum için genel değildir.

Bununla birlikte, yukarıdaki üç yorumda @Eric'in önerdiği gibi her üç grubun da eşit oranlara sahip olup olmadığını test etmek için bir Chi Squared testi kullanabilirsiniz: "Bu soru yardımcı olur mu? Stats.stackexchange.com/questions/25299/… - Eric"


6
Teşekkürler @Dan. Google’da birçok kez olduğu gibi, aranacak doğru terimi bilmek ilk engeldir. Ki-kare testine bir göz attım. Buradaki sorun, ilk olarak nerede sıkışıp kaldığımda, beklenen hesaplamanın numuneye dayanması. Bu nedenle beklenen bir değeri sağlayamıyorum, çünkü numunelerim beklenen değeri belirlemek için kullanılıyor.
Scott,

@Scott, eğer üç grup için varsayımlı oranlarınız hepsinin eşit olması durumunda, beklenen değer her grup için 1/3 olmalıdır.
Dan

1
Bu testi kullanmayla ilgili bir açıklama burada bulunabilir: itl.nist.gov/div898/handbook/prc/section3/prc33.htm (şu anda, Wikipedia sayfası tam bir örnek sunmamaktadır).
wwwilliam

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

sorumun cevabını burada bulabilirsiniz: stats.stackexchange.com/questions/361015/…
Tanguy

10

R'de cevap şu şekilde hesaplanır:

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

8
R işlevini sağlamaktan biraz daha fazlasını yazmayı düşünür müsünüz? İşlevin adlandırılması sorunu anlamada yardımcı olmaz ve herkes R kullanmaz, bu nedenle onlar için hiçbir yardımı olmaz.
Tim

1
Bu en kesin istatistiksel cevaptır ve az sayıda gözlem için işe yarar (aşağıdakilere bakın: itl.nist.gov/div898/handbook/prc/section3/prc33.htm ).
Andrew Mao,


3

Sadece bir özet:

Dan ve Abaumann'ın cevapları, sıfır hipotezinin, ampirik verilerden tahmin edilen ortalamasıyla birleştirilmiş tek binom model olduğu binom modelinde test yapılmasını önermektedir. Cevapları teoride doğrudur, ancak test istatistiğinin dağılımı Normal dağılımı tam olarak takip etmediğinden normal dağılım kullanarak yaklaşıma ihtiyaç duyarlar. Bu nedenle, yalnızca büyük bir örneklem büyüklüğü için doğru.

Ancak David'in cevabı Fisher'in testini kullanarak parametrik olmayan bir testi gösteriyor. Bilgi burada: https://en.wikipedia.org/wiki/Fisher%27s_exact_test Ve küçük örneklem büyüklüklerine uygulanabilir, ancak büyük örneklem büyüklükleri için hesaplanması zor olabilir.

Hangi testin kullanılacağı ve p-değerinize ne kadar güvendiğiniz bir gizemdir. Ancak hangi testi seçeceğiniz konusunda daima önyargılar vardır.


2
1/2

1
Bu durumda, Dan'in yöntemini kullanabileceğinizi ancak p değerini tam olarak (binom) ve yaklaşık olarak (hesapladığınız Z (Φ − 1 (1 − α / 2) Z) − − 1 (1 − α / 2) ve Z <Φ − 1 (α / 2)) yeterince yakın olup olmadıklarını karşılaştırmak için.
Dr_Hope

1

Z=p1^p2^p^(1p^)(1/n1+1/n2)p^=n1p1^+n2p2^n1+n2

Z>Φ1(1α/2)Z<Φ1(α/2)


1

Python'da, istatistik modelleri adlı bir işleve sahiptir proportions_ztest. İşte kullanımına bir örnek:

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

Bu yazdırır:

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

-1

Orijinal yazı: Dan'ın cevabı kimseyi kırmak için değil, yanlış. Bir z testi, yalnızca verileriniz normal bir normal dağılıma uyuyorsa kullanılır. Bu durumda, verileriniz binom dağılımını takip eder, bu nedenle numuneniz büyükse ki-kare testi veya numuneniz küçükse balıkçının testi kullanın.

Düzenleme: Benim hatam, @Dan için özür dilerim. Değişkenleriniz bağımsızsa burada bir z testi geçerlidir. Bu varsayım karşılanmazsa veya bilinmiyorsa, bir z testi geçersiz olabilir.


2
χ2

CLT'ye inanıyorsanız, normal dağılım genellikle var olur.
Ryan

2
@Ryan CLT'ye inanıyorum, fakat n = 30 veya n = 300 veya n = 5000 hakkında bir şey söylemiyor. Sonsuz örneklem büyüklüğüne sahip olmayı başaramazsanız veya bir şekilde normallikle başlamazsanız, aslında normallik elde edemezsiniz. Ortalamaları alırken normale ne kadar yakın olduğumuzla ilgili sorular CLT tarafından ele alınmaz. (Bu soruları dikkate alabiliriz, ancak yaklaşımın iyi olup olmadığını öğrenmek için
CLT'yi kullanmayız
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.