두 이항 분포가 서로 통계적으로 다른지 테스트


37

나는 이항 분포를 갖는 세 개의 데이터 그룹을 가지고 있습니다 (즉, 각 그룹에는 성공 또는 실패 요소가 있습니다). 예상되는 성공 확률은 없지만 대신 실제 성공률에 대한 근사값으로 각각의 성공률에만 의존 할 수 있습니다. 이 질문 만 찾았 습니다. 가까이 있지만이 시나리오를 정확하게 다루지 않는 것 같습니다.

테스트를 단순화하기 위해 2 개의 그룹 (이 기본 사례에서 3 개를 확장 할 수 있음)이 있다고 가정 해 보겠습니다.

  • 그룹 1 시험 : = 2455n1
  • 그룹 2 시험 : = 2730n2

  • 그룹 1 성공 : = 1556k1
  • 그룹 2 성공 : = 1671k2

나는 예상되는 성공 확률이 없으며 샘플에서 아는 것만 있습니다. 따라서 두 그룹의 내 암시 적 성공률은 다음과 같습니다.

  • 그룹 1 성공률 : = 1556/2455 = 63.4 %p1
  • 그룹 2 성공률 : = 1671/2730 = 61.2 %p2

각 샘플의 성공률은 상당히 비슷합니다. 그러나 내 샘플 크기도 상당히 큽니다. 이항 분포의 CDF를 검사하여 첫 번째와 다른 점을 확인하면 (첫 번째는 널 테스트라고 가정) 두 번째는 달성 될 가능성이 매우 적습니다.

Excel에서 :

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

그러나 이것은 첫 번째 결과의 분산을 고려하지 않고 첫 번째 결과가 검정 확률이라고 가정합니다.

이 두 샘플 데이터가 실제로 통계적으로 다른지 테스트하는 더 좋은 방법이 있습니까?


: 그 건너 온 또 다른 질문은 정말 많이 도움이되지 않았다 stats.stackexchange.com/questions/82059/...
스콧

이 질문이 도움이됩니까? stats.stackexchange.com/questions/25299/…
Eric

2
R, 당신은 사용할 수 있습니다 prop.test: prop.test(c(1556, 1671), c(2455, 2730)).
COOLSerdash

1
2 표본 (이항) 비율 검정 또는 2x2 카이 제곱으로 수행 할 수 있습니다.
Glen_b

1
테스트가 상호 의존적이므로 기본 사례를 두 그룹에서 세 그룹으로 확장하는 것은 문제가 될 수 있습니다.이를 처리하려면 이항 버전의 분산 분석이 필요합니다.
whuber

답변:


36

해결책은 간단합니다. http://en.wikipedia.org/wiki/Statistical_hypothesis_testing

따라서 주어진 대안에 대해 다음 귀무 가설을 검정하고 싶습니다.

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

따라서 검정 통계량을 계산하면됩니다.

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

여기서 입니다. p^=n1p^1+n2p^2n1+n2

이제 문제에서 , , 및 , P (2)=0.612N1=2,455N2=2,730.p^1=.634p^2=.612n1=2455n2=2730.

테스트 통계를 계산 한 후에는 해당 통계 영역을 계산하여 테스트 통계도 비교해야합니다. 예를 들어이 가설을 95 % 신뢰 수준에서 테스트하는 경우 테스트 통계를 (이 두 테일 테스트) 의 임계 영역 값과 비교해야합니다 .zα/2=1.96

이제 이면 귀무 가설을 기각 할 수 있습니다. 그렇지 않으면 귀무 가설을 기각해야합니다. z>zα/2

이 솔루션은 두 그룹을 비교할 때 효과적이지만 3 개의 그룹을 비교하려는 경우에는 일반화되지 않습니다.

그러나 위의 주석에서 @Eric이 제안한 것처럼 세 그룹 모두 동일한 비율을 갖는지 테스트하기 위해 Chi Squared 테스트를 사용할 수 있습니다. "이 질문이 도움이 되었습니까? stats.stackexchange.com/questions/25299/… – Eric"


6
감사합니다 @ Dan. Google에서 여러 번 검색 할 올바른 용어를 아는 것이 첫 번째 장애물입니다. 카이 제곱 테스트를 살펴 보았습니다. 내가 처음 붙잡힌 곳에서와 같은 문제는 예상 계산이 샘플을 기반으로한다는 것입니다. 따라서 샘플이 해당 예상 값을 결정하는 데 사용되므로 예상 값을 제공 할 수 없습니다.
Scott

@Scott, 세 그룹에 대한 가정 된 비율이 모두 같으면 기대 값은 각 그룹의 1/3이어야합니다.
Dan

1
이 시험 사용에 대한 관련 설명은 itl.nist.gov/div898/handbook/prc/section3/prc33.htm 에서 찾을 수 있습니다 (현재 Wikipedia 페이지는 연습 예제를 제공하지 않습니다).
wwwilliam

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

내 질문에 대한 답변은 여기에서 찾을 수 있습니다 : stats.stackexchange.com/questions/361015/…
Tanguy

10

R에서 답은 다음과 같이 계산됩니다.

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

8
R 함수를 제공하는 것보다 조금 더 작성해 보시겠습니까? 함수의 이름을 지정해도 문제를 이해하는 데 도움이되지 않으며 모든 사람이 R을 사용하지는 않으므로 도움이되지 않습니다.
Tim

1
이것은 가장 정확한 통계적 답변이며 적은 수의 관측에 효과적입니다 ( itl.nist.gov/div898/handbook/prc/section3/prc33.htm 참조 ).
Andrew Mao

Fishers 정확한 테스트 en.wikipedia.org/wiki/Fisher's_exact_test
Keith

3

단지 요약 :

Dan과 Abaumann의 답변은 귀무 가설이 경험적 데이터로부터 추정 된 평균을 가진 단일화 된 단일 이항 모델 인 이항 모델에서 테스트 할 것을 제안합니다. 답은 이론적으로는 정확하지만 검정 통계량 분포는 정규 분포를 정확히 따르지 않으므로 정규 분포를 사용하여 근사해야합니다. 따라서 큰 표본 크기에만 적합합니다.

그러나 다윗의 대답은 피셔의 test.The 정보를 사용하여 비모수 테스트를 나타내는되어 여기에 있습니다 : https://en.wikipedia.org/wiki/Fisher%27s_exact_test를 그리고 그것은 큰 샘플 크기에 대한 계산에 작은 샘플 크기에 적용하지만 열심히 할 수 있습니다.

어떤 테스트를 사용하고 p- 값을 얼마나 신뢰하는지는 수수께끼입니다. 그러나 어떤 테스트를 선택하든 항상 편견이 있습니다.


2
1/2

1
이 경우 Dan의 방법을 사용할 수 있지만 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

원래 게시물 : Dan의 대답은 실제로 잘못되어 다른 사람을 화나게하지 않습니다. z- 검정은 데이터가 표준 정규 분포를 따르는 경우에만 사용됩니다. 이 경우 데이터는 이항 분포를 따르므로 표본이 크면 카이 제곱 검정을 사용하고 표본이 작 으면 피셔 검정을 사용하십시오.

편집 : 내 실수, @ Dan에게 사과드립니다. 변수가 독립적 인 경우 z- 검정이 유효합니다. 이 가정이 충족되지 않거나 알 수없는 경우 z- 검정이 유효하지 않을 수 있습니다.


2
χ2

CLT를 믿는다면 정규 분포가 일반적으로 존재합니다.
Ryan

2
@ Ryan 글쎄, 나는 CLT를 믿지만 n = 30 또는 n = 300 또는 n = 5000에 대해서는 아무 것도 말하지 않습니다. 무한한 표본 크기를 가지거나 정규성으로 시작하지 않으면 실제로 정규성을 얻지 못합니다. 평균을 취할 때 우리가 정상에 얼마나 가까운 지에 관한 질문은 CLT에 의해 다루어지지 않습니다. (우리는 그러한 질문을 고려할 수 있지만 근사치가 좋은지 알아 내기 위해 CLT를 사용하지는 않습니다.)
Glen_b
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.