2つの二項分布が互いに統計的に異なるかどうかをテストします


37

データには3つのグループがあり、それぞれに二項分布があります(つまり、各グループには成功または失敗の要素があります)。成功の予測確率はありませんが、真の成功率の近似として、それぞれの成功率にのみ頼ることができます。私はこの質問を見つけましたが、これは近いですが、このシナリオに正確に対処していないようです。

テストを簡略化するために、2つのグループがあるとしましょう(このベースケースから3つのグループを拡張できます)。

  • グループ1の試行: = 2455n1
  • グループ2試験: = 2730n2

  • グループ1の成功:k1 = 1556
  • グループ2の成功:k2 = 1671

予想される成功確率はありません。サンプルから知っていることだけです。したがって、2つのグループの成功率は次のとおりです。

  • グループ1の成功率:p1 = 1556/2455 = 63.4%
  • グループ2の成功率: p2 = 1671/2730 = 61.2%

各サンプルの成功率はかなり近いです。しかし、私のサンプルサイズも非常に大きいです。二項分布のC​​DFを調べて、最初の分布との違いを確認すると(最初はヌルテストであると仮定します)、2番目の分布が達成される可能性は非常に小さくなります。

Excelの場合:

1-BINOM.DIST(1556,2455,61.2%、TRUE)= 0.012

ただし、これは最初の結果の分散を考慮せず、最初の結果がテスト確率であると見なします。

これらの2つのデータサンプルが実際に互いに統計的に異なるかどうかをテストするより良い方法はありますか?


私が出くわした別の質問はあまり役に立ちませんでした:stats.stackexchange.com/questions/82059/…-
スコット

この質問は役に立ちますか?stats.stackexchange.com/questions/25299/…–
エリック

2
Rでは、あなたが使用することができますprop.testprop.test(c(1556, 1671), c(2455, 2730))
COOLSerdash 14

1
2サンプル(二項)比率検定、または2x2カイ2乗
Glen_b -Reinstate Monica 14

1
基本ケースを2つのグループから3つのグループに拡張すると、テストが相互依存するため、問題が発生する可能性があります。これを処理するには、ANOVAの2項バージョンが必要になります。
whuber

回答:


36

解決策は、Googleを使用しない簡単な方法です:http : //en.wikipedia.org/wiki/Statistical_hypothesis_testing

そのため、次の帰無仮説を与えられた選択肢に対してテストしたいと思います。

H Ap 1p 2H0:p1=p2HA:p1p2

したがって、テスト統計を計算するだけです。

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

ここで、P = N 1つのP 1 + N 2 P 2p^=n1p^1+n2p^2n1+n2

だから今、あなたの問題ではP 2 = 0.612nは1 = 2455およびN 2 = 2730。p^1=.634p^2=.612n1=2455n2=2730.

テスト統計を計算したら、対応する重要な領域の値を計算して、テスト統計も比較するだけです。たとえば、95%の信頼レベルでこの仮説をテストしている場合、あなたはの重要な領域値と照らし合わせて検定統計量を比較する必要が(この2尾テスト用)。zα/2=1.96

さて、もし、あなたはそうしないと、帰無仮説を棄却に失敗しなければならない、帰無仮説を拒否することができます。 z>zα/2

このソリューションは、2つのグループを比較する場合には有効ですが、3つのグループを比較する場合には一般化されません。

ただし、カイ2乗検定を使用して、上記のコメントで@Ericが示唆したように、3つのグループすべてが等しい比率を持っているかどうかをテストできます。


6
ありがとう@ダン。Googleで何度も言うように、検索に適した用語を知ることが最初のハードルです。私はカイ二乗検定を見ました。そこにある問題は、私が最初に行き詰まっていたときと同様に、私の予想される計算がサンプルに基づいていることです。したがって、サンプルを使用して期待値を決定するため、期待値を提供することはできません。
スコット14

@ Scott、3つのグループの仮定の比率がすべて等しい場合、各グループの期待値は1/3になります。
ダン14

1
このテストの使用に関する関連説明は、itl.nist.gov / div898 / handbook / prc / section3 / prc33.htmにあります(現在、Wikipediaページにはウォークスルーの例はありません)。
wwwilliam

私は他の言葉では、2つの二項分布の差の標準偏差を証明することができる誰かの助けを借りていることを証明:
p^(1p^)(1n1+1n2)=p^1(1p^1)n1+p^2(1p^2)n2
タンガイ

私の質問への答えは、ここで見つけることができます:stats.stackexchange.com/questions/361015/...
タンギーを

11

Rでは、答えは次のように計算されます。

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

8
R関数を提供するよりも、もう少し書くことを検討しますか?関数に名前を付けることは問題を理解するのに役立ちませんし、誰もがRを使用するわけではないので、彼らにとっては助けにはなりません。
ティム

1
これは最も正確な統計的回答であり、少数の観測値で機能します(itl.nist.gov/div898/handbook/prc/section3/prc33.htmを参照)。
アンドリューマオ

1
フィッシャーの正確なテストen.wikipedia.org/wiki/Fisher's_exact_test
キース

3

要約:

ダンとアバウマンの答えは、帰無仮説が経験的データから推定された平均を持つ統一された単一二項モデルである二項モデルの下でのテストを示唆しています。それらの答えは理論的には正しいですが、検定統計量の分布は正規分布に正確には従わないため、正規分布を使用した近似が必要です。したがって、サンプルサイズが大きい場合にのみ適切です。

しかし、デビッドの答えフィッシャーのtest.The情報を使用してノンパラメトリック検定を示すさはここにある:https://en.wikipedia.org/wiki/Fisher%27s_exact_test そして、大きなサンプルサイズのために計算する小さなサンプルサイズに適用されるが、ハードすることができます。

どのテストを使用し、p値をどれだけ信頼するかは謎です。ただし、選択するテストには常にバイアスがあります。


2
1/2

1
この場合、ダンの方法を使用できますが、p値を正確な方法(二項)および近似方法(通常のZ> Φ−1(1−α / 2)Z> Φ−1(1−α / 2)およびZ <Φ-1(α/ 2))で、十分に近いかどうかを比較します。
-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では、statsmodelsにという関数がありますproportions_ztest。その使用例を次に示します。

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

これは印刷されます:

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

-1

元の投稿:ダンの答えは実際には間違っている。z検定は、データが標準正規分布に従う場合にのみ使用されます。この場合、データは二項分布に従うため、サンプルが大きい場合はカイ2乗検定を使用し、サンプルが小さい場合はフィッシャー検定を使用します。

編集:私の間違い、@ Danに謝罪します。変数が独立している場合、Zテストはここで有効です。この仮定が満たされていないか不明な場合、z検定は無効である可能性があります。


3
「場合のみ」の部分は、多くの人が共有する可能性が低い極端な位置です。実際に正規分布に従うデータはありません。実際には、正規分布からランダムに独立して描画されるように動作するデータはほとんどありません。それにもかかわらず、zテストは、それらが適用される統計の分布(平均の差など)が正規分布によって非常によく近似できるため、引き続き有効です。実際、χ2テストは、azテストと同じ漸近的な仮定に依存しています!
whuber

CLTを信じている場合、正規分布は一般に存在します。
ライアン

2
@Ryanまあ、私はCLTを信じていますが、n = 30またはn = 300またはn = 5000については何も言いません。なんらかの方法でサンプルサイズを無限にすることができない場合、または何らかの形で正規性から始めない限り、実際には正規性は得られません。平均をとるときの正常性への近さに関する質問は、CLTによって対処されません。(これらの質問は検討できますが、CLTを使用して、近似が適切かどうかを判断しません。)
Glen_b -Reinstate Monica
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.