Rows: 5,110
Columns: 12
$ id <chr> "9046", "51676", "31112", "60182", "1665", "56669", …
$ gender <fct> Male, Female, Male, Female, Female, Male, Male, Fema…
$ age <dbl> 67, 61, 80, 49, 79, 81, 74, 69, 59, 78, 81, 61, 54, …
$ hypertension <fct> No, No, No, No, Yes, No, Yes, No, No, No, Yes, No, N…
$ heart_disease <fct> Yes, No, Yes, No, No, No, Yes, No, No, No, No, Yes, …
$ ever_married <fct> Yes, Yes, Yes, Yes, Yes, Yes, Yes, No, Yes, Yes, Yes…
$ work_type <fct> Private, Self-employed, Private, Private, Self-emplo…
$ residence_type <fct> Urban, Rural, Rural, Urban, Rural, Urban, Rural, Urb…
$ avg_glucose_level <dbl> 228.69, 202.21, 105.92, 171.23, 174.12, 186.21, 70.0…
$ bmi <dbl> 36.6, NA, 32.5, 34.4, 24.0, 29.0, 27.4, 22.8, NA, 24…
$ smoking_status <fct> formerly smoked, never smoked, never smoked, smokes,…
$ stroke <fct> Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Ye…
34 분할표 분석: 두 명목 변수의 독립성을 검정-카이제곱(Chi-Squared) 검정
이 장에서는 두 명목형 변수의 독립성을 검정하는 카이제곱(Chi-Squared) 검정에 대해 알아본다. 카이제곱 검정은 두 명목형 변수의 분포가 서로 독립적인지 검정하는 방법이다. 예를 들어, 뇌졸중(stroke)과 고혈압(hypertension)의 관계를 살펴보자.
34.1 분할표 만들기
뇌졸중과 고혈압의 관계를 살펴보기 위해, 먼저 두 변수의 분할표를 만들어보자. 카이제곱 검정은 뒤에서 보겠지만 이런 분할표로 chisq.test()
함수를 사용하여 바로 검정할 수 있는데, 어떤 원리로 검정이 되는지 이해하기 위해서 분할표로 시작하자.
tbl <- xtabs(~ stroke + hypertension, stroke_df)
tbl
hypertension
stroke No Yes
No 4429 432
Yes 183 66
addmargins()
함수를 사용하여 분할표에 마진을 추가할 수 있다. 마진은 각 행과 열의 합계를 나타낸다.
tbl_with_margins <- addmargins(tbl)
tbl_with_margins
hypertension
stroke No Yes Sum
No 4429 432 4861
Yes 183 66 249
Sum 4612 498 5110
위 분할표에서 뇌졸중 확률은 다음과 같이 계산할 수 있다. 이런 확률은 마진을 보면서 계산한다.
\[ \begin{aligned} P(\text{stroke+}) &= \frac{249}{5110} = 0.0487 \\ P(\text{stroke-}) &= \frac{4861}{5110} = 0.9513 \\ P(\text{hypertension+}) &= \frac{498}{5110} = 0.0975 \\ P(\text{hypertension-}) &= \frac{4612}{5110} = 0.9025 \end{aligned} \]
34.2 기대값 계산하기
카이제곱 검정은 관측된 값과 기대값을 비교하여 두 변수의 독립성을 검정한다. 기대값은 각 칸에 대해 계산할 수 있다. 뇌졸중이 없으면서, 고혈압이 없는 사람들은 얼마나 기대할 수 있는가? 확률론에서 두 사건이 독립이라면(서로 영향을 주지 않으면, independent) 다음과 같은 공식이 성립한다.
\[ P(A\cap B) = P(A) \times P(B) \]
위 공식을 사용하여 각 칸에 대한 기대값을 계산할 수 있다.
-
뇌졸중이 없으면서, 고혈압이 없는 사람들은 다음과 같이 계산할 수 있다.
\[ \begin{aligned} P(\text{stroke-, hypertension-}) &= P(\text{stroke-}) \times P(\text{hypertension-}) \\ &= 0.9513 \times 0.9025 = 0.8586 \end{aligned} \]
이 확률값에 대해서, 전체 샘플이
5110
개 이므로, 기대되는 값은 다음과 같다.\[ \text{기대값} = 0.8586 \times 5110 = 4387.446 \]
-
같은 방법으로 뇌졸중이 없고 고혈압이 있는 경우에는 다음과 같이 계산된다. \[ \begin{aligned} P(\text{stroke-, hypertension+}) &= P(\text{stroke-}) \times P(\text{hypertension+}) \\ &= 0.9513 \times 0.0975 \\ &= 0.09275 \end{aligned} \]
이 확률값에 대해서, 전체 샘플이
5110
개 이므로, 기대되는 값은 다음과 같다. \[ \text{기대값} = 0.09275 \times 5110 = 473.9525 \]
이같은 방법으로 모든 칸에 대해 기대값을 계산하면 다음과 같은 결과를 얻는다.
chisq.test(tbl)$expected
hypertension
stroke No Yes
No 4387.2665 473.73346
Yes 224.7335 24.26654
34.3 카이제곱 통계량 계산하기
카이제곱 검정은 관측값과 기대값의 차이를 이용하여 두 변수의 독립성을 검정한다. 두 명목형 변수에 대한 카이제곱 통계량(chisquared statistic)은 다음과 같이 계산된다.
\[ \chi^2 = \sum_{i=1}^n \frac{(O_i - E_i)^2}{E_i} \]
여기서 \(O_i\)는 관측값, \(E_i\)는 기대값이다.
이 경우는 카이제곱 통계량은 다음과 같이 계산된다.
\[ \begin{aligned} (4429 - 4387.27)^2 / 4387.27 + (432 - 473.73)^2 / 473.73 + \\ (183 - 224.73)^2 / 224.73 + (498 -24.26)^2 / 24.26 \end{aligned} \]
이 값은 다음과 같다.
chisq.test(tbl)$statistic
X-squared
81.60537
이 값은 관측된 개수와 기대되는 개수의 차이를 제곱하여 기대되는 개수로 나눈 값을 모두 더한 값이다.
34.4 카이제곱 검정 수행하기
카이제곱 검정은 chisq.test()
함수를 사용하여 수행할 수 있다. 이 함수는 관측값과 기대값을 비교하여 두 변수의 독립성을 검정한다. 이 카이제곱 통계량은 자유도가 (r-1)(c-1)
인 카이제곱 분포를 따른다. 여기서 r
은 행의 개수, c
는 열의 개수이다.
chisq.test(tbl)
Pearson's Chi-squared test with Yates' continuity correction
data: tbl
X-squared = 81.605, df = 1, p-value < 2.2e-16
chisq.test()
함수는 카이제곱 통계량, 자유도, p-값을 반환한다. p-값은 두 변수의 독립성을 검정하는 데 사용된다. 일반적으로 p-값이 0.05보다 작으면 두 변수는 독립적이지 않다고 판단한다.
카이제곱 검정의 예시로, 뇌졸중과 고혈압의 관계를 살펴보았다. 이 예시에서는 두 변수의 독립성을 검정하기 위해 카이제곱 검정을 수행하였다. 결과적으로 p-값이 0.05보다 작아서, 뇌졸중과 고혈압은 독립적이지 않다고 판단할 수 있다.
34.5 카이제곱 검정의 가정
카이제곱 검정을 수행하기 전에 몇 가지 가정을 확인해야 한다.
- 독립성: 각 관측값은 서로 독립적이어야 한다. 즉, 한 관측값이 다른 관측값에 영향을 미치지 않아야 한다.
- 표본 크기: 각 셀의 기대값이 5 이상이어야 한다. 만약 기대값이 5 미만인 셀이 있다면, 카이제곱 검정의 결과가 신뢰할 수 없을 수 있다. 이 경우, Fisher의 정확 검정(Fisher’s Exact Test)을 고려할 수 있다.
- 명목형 변수: 카이제곱 검정은 명목형 변수에 대해서만 적용할 수 있다. 순서형 변수에 대해서는 다른 검정 방법을 사용해야 한다.