테이블형 자료 분석을 다룬 챕터: prop.test, binom.test, chisq.test, fisher.test 함수에 대해 다룸.
* 1-sample proportion test: binomial test
Single proportion test란, 하나의 요인에 따라 집단을 둘로 나누고 한 집단에 속할 확률이 특정값인지 검증하는 과정을 말한다. 예를 들면, 215명의 환자를 랜덤추출 했을 때 39명의 환자가 천식을 가진 확률시행이 있다고 하자. 이 때 천식 발생확률이 15%인지 확인할 때 이 검정을 사용할 수 있다.
이 확률을 계산하기 위해서는 이항분포 B(n,p)가 사용된다. 하나의 집단에 속하는 확률을 p, 아닌 확률을 1-p로 둘 수 있고, n번의 시행(=n size의 샘플)을 했을 때 E(X)= np, Var(X) = np(1-p)가 된다. 그리고 n이 충분히 큰 경우, 이 분포는 정규분포 ~N(np, np(1-p))를 따르는 것으로 알려져 있다. 따라서 이 확률변수를 표준정규분포로 변환하여 p value를 구하고, 유의성을 파악할 수 있다.

여기서 u값이 표준정규확률변수이며, p0가 우리가 검증하고자 하는 p값 (H0에서 가정한 p값)이다. u^2은 df가 1인 chi-square distribution을 따른다.
prop.test() 함수를 통해 위의 확률계산을 할 수 있다.
prop.test(x, n, p)
x는 성공횟수, n은 시행횟수, p는 가정한 성공확률을 말한다.

위의 asthma 예제로 prop.test()를 시행한 결과이다. P-value > 0.05 이므로 H0을 기각하지 못한다.
하지만 일반적으로, p0를 예상하고 test를 돌리는 경우는 많지 않다. 그보다는 n과 x가 주워졌을 때, confidence interval을 구하는 쪽이 더 현실적으로 많이 사용될 것이다.
* Two independent proportions
두개 이상의 proportion 들을 비교할 때도 prop.test() function을 이용할 수 있음. 그룹 1, 2의 확률을 각각 p1, p2 라고 한다면 H0를 p1=p2=p로 가정하고 아래와 같이 쓸 수 있다.
x1~ N(n1p, n1pq), x2~ N(n2p, n2pq)라고 할 때, d = x1/N1 - x2/N2 라고 정의하면 d~ N(0, (1/n1 + 1/n2) * pq)를 따르는 정규분포가 된다. 그리고 확률변수 u = d/sqrt(V(d)) 는 표준정규분포 N(0,1)을, u^2는 마찬가지로 df=1인 chi-square distribution을 따름.

prop.test()에 두 개 이상의 확률변수를 비교하기 위해서는 vector값을 넣어줘야 한다. 위의 예에서 볼 수 있듯, group 별 success 한 숫자, 그리고 total number를 각각 vector값으로 넣어주면, 위에서 언급한 u값을 구해서 이에 대응되는 p-value를 계산해준다. 위의 test에서 confidence interval은 확률변수 d에 대해 제시된 값이다.
prop.test()에서는 Yates continuity correction (Pearson's chi-square statistics를 교정하는 방법.. 자세한건 구글링)이 기본적으로 시행이 된 상태이다. 이를 off 하기 위해선 argument에 correction=F를 추가하면 된다.
기대빈도 5미만의 셀이 전체 cell의 20%를 넘어서는 경우, Chi-square test를 시행할 수 없고 Fisher's exact test를 시행해야 한다.
fisher.test()
2개의 인자에 대한 2x2 table 구조의 matrix를 입력함으로써 시행할 수 있다. (k개의 성공과 N-k개의 실패로 구성된 집단에서 크기가 n인 확률표본을 취할 때, 성공의 개수 x에 대한 확률질량함수는 f(x) = kCx * N-k C (n-x) / N C n, E(X) = k/N * n, Var(x) = k/N (1-k/N) * n 이 되며 이때 X는 초기하분포(hypergeometric distribution)을 따른다고 한다.)
Fisher test는 아래와 같이 시행함.

Confidence interval이 odd ratio (즉, (p1/(1-p1)) / (p2/(1-p2))로 주어진다.
표준적인 chi-square test 역시 matrix를 만들어 넣어줘야 하며 아래와 같이 시행이 가능함.

* K proportions, test for trend
여러 개의 group에 대해 비율을 비교하고 싶을 때도 prop.test()를 사용할 수 있다.

위의 test 결과를 보면, 각각의 estimate 값과 p-value가 제시되어 있다. 이 경우 p-value만 보면 insignificant한 것 처럼 보이나, total에 비해 subdivision이 너무 세세하며 따라서 각 cell 당 n수가 지나치게 작다. 아래에 보면 기대도수가 5 미만인 cell 이 있는 경우, chi-square 값이 부정확할 수 있다는 warning message도 확인할 수 있다.
이 경우에는 따라서 정확한 검정보다는 일정한 trend가 있는지 확인하는 방법이 있다. prop.trend.test() 함수를 이용하는 것이다. 원리적으로는 linear regression을 사용, H0는 slope = 0 로 두고 검정을 시행하는 것이다. 즉, 이 test의 결과로 p-value < 0.05가 확인된다면 범주 간 linear regression, 즉 일정한 trend가 있을 가능성이 높다.

* r x c table
table을 분석하는 많은 경우, 양측에 2개 이상의 범주형 변수를 가지고 있다. 이 때 chi-square test나 fisher test를 시행할 수 있고, 각각의 함수는 chisq.test, fisher.test이다.

위는 각각 r, c개의 범주를 가지는 2개의 요인에 대한 r x c table이다.

Chi-square 검정값은, 관측값에서 expected value의 차를 구해 제곱한 뒤 관측치로 나눠준 것이다. 이 값은 (r-1) * (c-1)의 df를 가지는 chi-square distribution을 따르는 것으로 알렬져 있다. 이 때 기대값은 아래와 같다.

Caffeine 섭취와 marital 과의 관계 역시 chi-square test로 간단히 구할 수 있다.

위 test 결과에서 유의미한 관계가 있음을 알 수 있다. 하지만 chi-square test 자체는 기본으로 print되는 것보다 더 많은 정보를 가지고 있다. str을 통해 이를 파악할 수 있다.

observed, expected에 대한 자료를 각각 가지고 있으며, 이를 이용하면 아래와 같은 조작 역시 가능하다.

Expected와 observed를 정의에 다라 계산한 위 결과를 보면, 각 cell 별로 어떤 (O-E)^2/E 값을 가지는지 알 수 있고 이에 따라 chi-square 값에 대한 contribution 정도를 알 수 있다. 위 예를 보면 single 중 caffeine 소비량이 0인 사람이 예측에서 매우 벗어나있어 chi-square test의 p-value에 큰 영향을 미쳤음을 짐작할 수 있다.
또한, untabulated data에서 column을 직접 지정해 아래와 같이 chisq test를 간단히 시행할 수도 있다.

'[학습] 데이터분석방법론: R' 카테고리의 다른 글
Introductory statistics with R: chapter 10 (0) | 2021.04.03 |
---|---|
Introductory statistics with R: chapter 9 (0) | 2021.04.01 |
Introductory statistics with R: chapter 7 (0) | 2021.03.24 |
Introductory statistics with R: chapter 6 (0) | 2021.03.18 |
Introductory statistics with R: chapter 5 (0) | 2021.03.17 |