[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)
코드를 보여드리기에 앞서 워킹 디렉토리부터 지정하겠다.
워킹 디렉토리에 관한 설명은 다음 링크된 포스트에서 볼 수 있다.
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
'범주형 자료 분석 > R' 카테고리의 다른 글
[R] 피셔 정확 검정 - fisher.test() (1) | 2022.09.02 |
---|---|
[R] 카이 제곱 검정 (일반 및 연속성 수정) - CrossTable() (0) | 2022.09.01 |
[R] 카이 제곱 검정 (일반 및 연속성 수정) - chisq.test() (0) | 2022.08.31 |