반응형

[R] 카이 제곱 검정 (일반 및 연속성 수정) - chisq.test()

 

 카이 제곱 검정은 범주형 변수 간에 분포의 유의미한 차이가 있는지 확인하는 방법이다. 이해할 수 있는 언어로 표현하면 다음과 같다. 분할표를 작성하였을 때 다음과 같다고 하자. (출처 및 분할표 작성법:

2022.08.31 - [기술 통계/R] - [R] 도수분포표 (Frequency table), 분할표 (Contingency table) 만들기 - table(), prop.table(), xtabs(), margin.table()

2022.08.31 - [기술 통계/R] - [R] 도수분포표 (Frequency table), 분할표 (Contingency table) 만들기 - CrossTable())

  비음주자 음주자
여성 236 246
남성 174 344

 

이를 보면 비음주자 중에는 여성이 많고, 음주자 중에는 남성이 많다. 그렇다면 "성별과 음주 여부는 무관하다(=독립이다)."라는 말이 틀리다고 할 수 있을까? 즉, "특정 성별은 음주자일 확률이 더 높다."라고 할 수 있을까? 이에 대한 검정이 바로 카이 제곱 검정이다.

 

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

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")

 

코드

chisq.test(df$SEX, df$ALCOHOL, correct=FALSE)

chisq.test(df$SEX, df$ALCOHOL, correct=FALSE) : df 데이터의 SEX 변수와 ALCOHOL 변수 사이의 카이 제곱 검정을 시행하라. 이때 연속성 수정은 하지 않는다. 

 

결과

	Pearson's Chi-squared test

data:  df$SEX and df$ALCOHOL
X-squared = 24.389, df = 1, p-value = 7.871e-07

결과에서 중점적으로 봐야할 곳은 "p-value=7.871e-07"로 이는 "p-value가 $7.871\times10^{-7}= 0.0000007871$이다"라는 뜻이다. p-value가 0.05보다 낮으므로 성별과 음주의 분포에는 유의미한 차이가 있다고 결론내릴 수 있다.

 

 

왜 "correct=FALSE"?

R의 chisq.test() 함수는 연속성 수정을 하는 것을 디폴트 값으로 갖는다. 따라서 "correct=FALSE"라고 쓰지 않으면 "correct=TRUE"로 받아들이게 된다. 실제로 코드를 돌려보면 다음과 같다.

 

코드

chisq.test(df$SEX, df$ALCOHOL)

 

결과

	Pearson's Chi-squared test with Yates' continuity correction

data:  df$SEX and df$ALCOHOL
X-squared = 23.758, df = 1, p-value = 1.092e-06

 

보는 바와 같이 "with Yates' continuity correction"이라고 적혀있다. 즉 연속성 수정을 기본적으로 시행하게 된다.  해석 방법은 위의 일반적인 카이 제곱 검정과 같다.

연속성 수정에 관한 자세한 내용은 다음 글을 참고하길 바란다.

2022.08.30 - [통계 이론] - [이론] 연속성을 수정한 카이 제곱 검정 (Chi-squared test with Yates's correction for continuity)

 

기대 빈도는 걱정하지 않아도 돼?

걱정하지 않아도 된다. 만약 카이 제곱 검정을 시행하기에 적절하지 않은 데이터인 경우 다음과 같은 경고 메시지를 띄워주게 된다. 예를 들어 셀의 빈도가 5 미만인 경우가 생기는 다음 코드를 돌려 보자.

chisq.test(df$SEX, df$RH, correct=FALSE)

그러면 우선 결과는 분석해주긴 하지만 적절하지 않을 수 있다며 경고를 띄워준다.

	Pearson's Chi-squared test

data:  df$SEX and df$RH
X-squared = 2.404, df = 1, p-value = 0.121

경고메시지(들): 
chisq.test(df$SEX, df$RH, correct = FALSE)에서:
  Chi-squared approximation may be incorrect

 

또 다른 방법

df$SEX, df$ALCOHOL을 따로 따로 넣지 않고 xtab()이나 table()으로 만든 분할표를 넣을 수도 있다.

freq_sex_alc<-xtabs(~SEX+ALCOHOL, data=df)
table_sex_alc<-table(df$SEX, df$ALCOHOL)

chisq.test(freq_sex_alc, correct=FALSE)
chisq.test(table_sex_alc, correct=FALSE)
	Pearson's Chi-squared test

data:  freq_sex_alc
X-squared = 24.389, df = 1, p-value = 7.871e-07


	Pearson's Chi-squared test

data:  freq_sex_alc
X-squared = 24.389, df = 1, p-value = 7.871e-07

코드 정리

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

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

#카이 제곱 시행하기
chisq.test(df$SEX, df$ALCOHOL, correct=FALSE)

 

 

[R] 카이 제곱 검정 정복 완료!

 

작성일: 2022.08.31.

최종 수정일: 2022.09.06.

이용 프로그램: 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