Uji apakah dua distribusi binomial secara statistik berbeda satu sama lain


37

Saya memiliki tiga kelompok data, masing-masing dengan distribusi binomial (yaitu masing-masing kelompok memiliki elemen yang berhasil atau gagal). Saya tidak memiliki probabilitas keberhasilan yang diprediksi, tetapi sebaliknya hanya dapat mengandalkan tingkat keberhasilan masing-masing sebagai perkiraan untuk tingkat keberhasilan yang sebenarnya. Saya hanya menemukan pertanyaan ini , yang dekat tetapi tampaknya tidak persis berurusan dengan skenario ini.

Untuk menyederhanakan tes, anggap saja saya memiliki 2 kelompok (3 dapat diperpanjang dari kasus dasar ini).

  • Uji coba Grup 1: = 2455n1
  • Uji coba Grup 2: = 2730n2

  • Keberhasilan grup 1: = 1556k1
  • Keberhasilan grup 2: = 1671k2

Saya tidak memiliki probabilitas keberhasilan yang diharapkan, hanya yang saya tahu dari sampel. Jadi tingkat keberhasilan tersirat saya untuk kedua kelompok adalah:

  • Tingkat keberhasilan Grup 1: = 1556/2455 = 63,4%p1
  • Tingkat keberhasilan Grup 2: = 1671/2730 = 61.2%p2

Tingkat keberhasilan masing-masing sampel cukup dekat. Namun ukuran sampel saya juga cukup besar. Jika saya memeriksa CDF dari distribusi binomial untuk melihat betapa berbedanya itu dari yang pertama (di mana saya mengasumsikan yang pertama adalah tes nol) saya mendapatkan probabilitas yang sangat kecil bahwa yang kedua dapat dicapai.

Di Excel:

1-BINOM.DIST (1556.2455,61.2%, BENAR) = 0,012

Namun, ini tidak memperhitungkan perbedaan hasil pertama, hanya mengasumsikan hasil pertama adalah probabilitas pengujian.

Apakah ada cara yang lebih baik untuk menguji apakah kedua sampel data ini secara statistik berbeda satu sama lain?


Pertanyaan lain yang saya temui tidak banyak membantu: stats.stackexchange.com/questions/82059/…
Scott

Apakah pertanyaan ini membantu? stats.stackexchange.com/questions/25299/…
Eric

2
Dalam R, Anda bisa menggunakan prop.test: prop.test(c(1556, 1671), c(2455, 2730)).
COOLSerdash

1
Dapat dilakukan sebagai uji proporsi dua sampel (binomial), atau 2x2 chi-square
Glen_b -Reinstate Monica

1
Memperluas kasus dasar dari dua kelompok menjadi tiga bisa menjadi masalah, karena tes akan saling tergantung: Anda akan memerlukan versi binomial ANOVA untuk mengatasinya.
whuber

Jawaban:


36

Solusinya adalah google away yang sederhana: http://en.wikipedia.org/wiki/Statribution_hypothesis_testing

Jadi, Anda ingin menguji hipotesis nol berikut terhadap alternatif yang diberikan

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

Jadi Anda hanya perlu menghitung statistik uji yang mana

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

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

Jadi sekarang, dalam masalah , p 2 = 0,612 , n 1 = 2455 dan n 2 = 2730.p^1=.634p^2=.612n1=2455n2=2730.

Setelah Anda menghitung statistik pengujian, Anda hanya perlu menghitung nilai wilayah kritis yang sesuai untuk membandingkan statistik pengujian Anda juga. Misalnya, jika Anda menguji hipotesis ini pada tingkat kepercayaan 95% maka Anda perlu membandingkan statistik pengujian Anda dengan nilai wilayah kritis (untuk tes dua sisi ini).zα/2=1.96

Sekarang, jika maka Anda dapat menolak hipotesis nol, jika tidak Anda harus gagal menolak hipotesis nol. z>zα/2

Nah solusi ini berfungsi untuk kasing saat Anda membandingkan dua grup, tetapi tidak digeneralisir ke kasing di mana Anda ingin membandingkan 3 grup.

Namun Anda dapat menggunakan tes Chi Squared untuk menguji apakah ketiga kelompok memiliki proporsi yang sama seperti yang disarankan oleh @Eric dalam komentarnya di atas: "Apakah pertanyaan ini membantu? Stats.stackexchange.com/questions/25299/ ... - Eric"


6
Terima kasih @Dan. Seperti halnya Google, mengetahui istilah yang tepat untuk mencari adalah rintangan pertama. Saya memang melihat tes chi-squared. Masalahnya di sana, seperti di mana saya pertama kali macet, adalah bahwa perhitungan yang saya harapkan didasarkan pada sampel. Karena itu saya tidak bisa memberikan nilai yang diharapkan, karena sampel saya digunakan untuk menentukan nilai yang diharapkan.
Scott

@Scott, jika proporsi Anda yang dihipotesiskan untuk ketiga kelompok adalah semuanya sama maka nilai yang diharapkan harus 1/3 untuk masing-masing kelompok.
Dan

1
Penjelasan terkait tentang penggunaan tes ini dapat ditemukan di sini: itl.nist.gov/div898/handbook/prc/section3/prc33.htm (saat ini, halaman Wikipedia tidak menyediakan contoh walk-through).
wwwilliam

Dapatkah seseorang membantu saya membuktikan standar deviasi perbedaan antara dua distribusi binomial, dengan kata lain membuktikan bahwa:
p^(1p^)(1n1+1n2)=p^1(1p^1)n1+p^2(1p^2)n2
Tanguy

jawaban atas pertanyaan saya dapat ditemukan di sini: stats.stackexchange.com/questions/361015/…
Tanguy

11

Dalam R jawabannya dihitung sebagai:

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

8
Apakah Anda mempertimbangkan untuk menulis sedikit lebih banyak daripada menyediakan fungsi R? Memberi nama fungsi tidak membantu dalam memahami masalah dan tidak semua orang menggunakan R, jadi itu tidak akan membantu bagi mereka.
Tim

1
Ini adalah jawaban statistik yang paling tepat, dan berfungsi untuk sejumlah kecil pengamatan (lihat yang berikut: itl.nist.gov/div898/handbook/prc/section3/prc33.htm ).
Andrew Mao


3

Hanya ringkasan:

Jawaban Dan dan Abaumann menyarankan pengujian di bawah model binomial di mana hipotesis nol adalah model binomial tunggal yang disatukan dengan estimasi rata-rata dari data empiris. Jawaban mereka benar dalam teori tetapi mereka membutuhkan perkiraan menggunakan distribusi normal karena distribusi statistik uji tidak persis mengikuti distribusi normal. Oleh karena itu, itu hanya benar untuk ukuran sampel yang besar.

Tetapi jawaban David menunjukkan tes nonparametrik menggunakan uji Fisher. Informasi ada di sini: https://en.wikipedia.org/wiki/Fisher%27s_exact_test Dan itu dapat diterapkan untuk ukuran sampel kecil tetapi sulit untuk menghitung untuk ukuran sampel besar.

Tes mana yang harus digunakan dan seberapa besar Anda mempercayai nilai-p Anda adalah sebuah misteri. Tetapi selalu ada bias dalam tes mana pun untuk memilih.


2
1/2

1
Untuk kasus ini, saya pikir Anda bisa menggunakan metode Dan tetapi menghitung nilai p dengan cara yang tepat (binomial) dan cara perkiraan (normal Z> Φ − 1 (1 − α / 2) Z> Φ 1 (1 − α / / 2) dan Z <Φ − 1 (α / 2)) untuk membandingkan apakah mereka cukup dekat.
Dr_Hope

1

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.