반응형

[R] 피셔 정확 검정 - CrossTable()

 

 범주형 변수의 분포 사이에 유의미한 차이가 있는지 확인하는 분석으로는 보통 카이 제곱 검정을 시행한다. R을 이용한 카이 제곱 검정 시행법은 다음 두 링크에서 확인할 수 있다.

2022.08.31 - [범주형 자료 분석/R] - [R] 카이 제곱 검정 - chisq.test()

2022.09.01 - [범주형 자료 분석/R] - [R] 카이 제곱 검정 - CrossTable()

 

그런데 기대 빈도가 5를 넘지 않는 셀이 전체의 25% 이상인 경우 카이 제곱 검정의 결과는 신뢰도가 떨어져 쓸 수 없게 되고 피셔 정확 검정을 사용해야 한다. 이에 대한 이론적인 내용은 다음 링크에서 확인할 수 있다.

피셔 정확 검정: 2022.08.26 - [통계 이론] - [이론] 피셔 정확 검정 (Fisher's exact test)

피셔 정확 검정과 카이 제곱 검정의 관계:2022.08.29 - [통계 이론] - [이론] 카이 제곱 검정과 피셔 정확 검정의 관계

 

이전 포스팅에서는 fisher.test()를 이용하여 피셔 정확 검정을 하는 방법을 소개했고 이번에는 CrossTable() 함수를 이용한 방법을 소개하겠다.

 

성별과 RH혈액형 간의 관계가 다음과 같다고 하자. RH혈액형의 분포를 보니 RH- 6명 중 5명이 무려 남성에 치우쳐져 있다. 이 결과를 보고 "남성일수록 RH-일 경향성이 있다."라고 할 수 있는지 따지는 검정이 피셔 정확 검정이다. 

  RH- RH+
여성 1 481
남성 5 513

 

일반적으로 이런 경우 카이 제곱 검정을 사용하지만 이 경우 사용할 수 없다. 기대 빈도가 5를 넘지 않는 셀이 전체의 25% 이상이기 때문인데, 한번 확인해보도록 하자.

 

*실습용 데이터는 아래 링크를 클릭하면 다운로드할 수 있습니다.

2022.08.04 - [공지사항 및 소개] - 분석용 데이터 (update 22.08.29)

 

분석용 데이터 (update 22.08.29)

2022년 08월 29일 버전입니다. 변수는 계속하여 추가될 예정입니다. 다음 카테고리에 있는 글에서 이용된 데이터입니다. - 기술 통계 - 통계 프로그램 사용 방법 1) 엑셀 파일 2) CSV 파일 3) 코드북

medistat.tistory.com

 

코드를 보여드리기에 앞서 워킹 디렉토리부터 지정하겠다.

워킹 디렉토리에 관한 설명은 다음 링크된 포스트에서 볼 수 있다.

2022.08.05 - [통계 프로그램 사용 방법/R] - [R] 작업 디렉토리 (Working Directory) 지정 - getwd(), setwd()

setwd("C:/Users/user/Documents/Tistory_blog")

 

데이터를 불러와 df에 객체로 저장하겠다.

데이터 불러오는 방법은 다음 링크에서 볼 수 있다.

2022.08.05 - [통계 프로그램 사용 방법/R] - [R] 데이터 불러오기 : EXCEL - read_excel(), read.xlsx()

2022.08.10 - [통계 프로그램 사용 방법/R] - [R] 데이터 저장하기 : CSV 파일 - write.csv(), write_csv()

2022.08.10 - [통계 프로그램 사용 방법/R] - [R] 데이터 불러오기 : SAS file (.sas7bdat) - read.sas7bdat(), read_sas()

install.packages("readr")
library("readr")
df<-read_csv("Data.csv")

 

코드 - 피셔 정확 검정

CrossTable() 함수는 gmodels 패키지에 있으므로, 설치를 먼저 하기로 한다.

install.packages("gmodels")
library("gmodels")
CrossTable(df$SEX, df$RH, prop.chisq=FALSE, fisher=TRUE,expected=TRUE, prop.r=FALSE, prop.c=FALSE, prop.t=FALSE)

CrossTable(df$SEX, df$RH, prop.chisq=FALSE, fisher=TRUE,expected=TRUE, prop.r=FALSE, prop.c=FALSE, prop.t=FALSE) : df에 있는 SEX변수와 RH변수로 분할표를 만들라.  카이 제곱 기여분은 표시하지 말라 (prop.chisq=FALSE), 피셔 정확 검정은 시행하고 셀 별로 기댓값을 산출하라 (fisher=TRUE,expected=TRUE), 행백분율, 열백분율, 백분율은 산출하지 말라 (prop.r=FALSE, prop.c=FALSE, prop.t=FALSE)]

 

결과 

   'Cell Contents
|-------------------------|
|                       N |
|              Expected N |
|-------------------------|

 
Total Observations in Table:  1000 

 
             | df$RH 
      df$SEX |         0 |         1 | Row Total | 
-------------|-----------|-----------|-----------|
           0 |         1 |       481 |       482 | 
             |     2.892 |   479.108 |           | 
-------------|-----------|-----------|-----------|
           1 |         5 |       513 |       518 | 
             |     3.108 |   514.892 |           | 
-------------|-----------|-----------|-----------|
Column Total |         6 |       994 |      1000 | 
-------------|-----------|-----------|-----------|

 
Statistics for All Table Factors


Pearson's Chi-squared test 
------------------------------------------------------------
Chi^2 =  2.403963     d.f. =  1     p =  0.1210283 

Pearson's Chi-squared test with Yates' continuity correction 
------------------------------------------------------------
Chi^2 =  1.30126     d.f. =  1     p =  0.2539832 

 
Fisher's Exact Test for Count Data
------------------------------------------------------------
Sample estimate odds ratio:  0.2135842 

Alternative hypothesis: true odds ratio is not equal to 1
p =  0.2191681 
95% confidence interval:  0.004505326 1.918452 

Alternative hypothesis: true odds ratio is less than 1
p =  0.1264398 
95% confidence interval:  0 1.492381 

Alternative hypothesis: true odds ratio is greater than 1
p =  0.9809505 
95% confidence interval:  0.009115443 Inf


 
Warning messages:
1: In chisq.test(t, correct = TRUE, ...) :
  Chi-squared approximation may be incorrect
2: In chisq.test(t, correct = FALSE, ...) :
  Chi-squared approximation may be incorrect 

1) Pearson's Chi-squared test ,Pearson's Chi-squared test with Yates' continuity correction 

 카이 제곱 검정을 시행하는 말은 없었으나, 기댓값을 산출하라는 코드(expected=TRUE)가 있었으므로 카이 제곱 검정은 자동으로 시행한다. 하지만 맨 밑에 경고에서 볼 수 있듯이 카이 제곱 검정 결과는 사용하지 않는 게 좋다.

 

2) Alternative hypothesis: true odds ratio is not equal to 1
p =  0.2191681

양측 검정의 결과 p-value는 0.2192다.

 

3) Alternative hypothesis: true odds ratio is less than 1
p =  0.1264398

하단측 p-value는 0.1264다

 

4) Alternative hypothesis: true odds ratio is greater than 1
p =  0.9809505 

상단측 p-value는 0.9810이다. 

 

보통은 양측 검정 결과를 받아들이며, p-value>0.05이므로 성별과 RH혈액형 간에는 유의미한 분포의 차이가 있다고 볼 근거가 없다. (양측, 단측 검정의 이론적인 배경과 설명은 다음 링크를 확인하길 바란다.2022.08.26 - [통계 이론] - [이론] 피셔 정확 검정 (Fisher's exact test))

 

코드 정리

#작업 디렉토리 지정
setwd("C:/Users/user/Documents/Tistory_blog")

#데이터 불러오기
install.packages("readr")
library("readr")
df<-read_csv("Data.csv")

#피셔 정확 검정 시행하기
install.packages("gmodels")
library("gmodels")
CrossTable(df$SEX, df$RH, prop.chisq=FALSE, fisher=TRUE,expected=TRUE, prop.r=FALSE, prop.c=FALSE, prop.t=FALSE)

 

[R] 피셔 정확 검정 정복 완료!

 

작성일: 2022.09.02.

최종 수정일: 2022.09.02.

이용 프로그램: R 4.1.3

RStudio v1.4.1717

RStudio 2021.09.1+372 "Ghost Orchid" Release 

운영체제: Windows 10, Mac OS 10.15.7

반응형

+ Recent posts