아래와 같은 범주형 데이터가 있습니다.
남자 10명과 여자 10명을 대상으로 무서운 영화 선호 여부를 조사한 것입니다. 우리는 위 데이터를 아래와 같은 형태의 표로 만들고 카이제곱검정을 하고 싶은 상황입니다.
남자 | 여자 | |
무서운영화 선호 | OO명 | OO명 |
무서운 영화 비선호 | OO명 | OO명 |
1. 데이터 불러오기
먼저 아래 데이터를 다운받습니다.
R에서 아래 메뉴를 클릭합니다.
Browse를 누르고 데이터를 불러옵니다.
Import를 누르지 말고, 우측 하단에 Code Preview 내용을 복사해서 스크립트 창에 붙여넣습니다.
아래와 같이 변수 이름을 간단하게 만들어줍니다.
library(readxl)
dt <- read_excel("C:/Users/A/Desktop/카이제곱검정용_데이터.xlsx")
readxl 함수로 불러온 데이터는 tibble 입니다. as.data.frame 함수를 이용하여 데이터 프레임으로 바꿔줍니다.
library(readxl)
dt <- read_excel("C:/Users/A/Desktop/카이제곱검정용_데이터.xlsx")
dt=as.data.frame(dt)
2. 분할표 만들기
table 함수를 함수를 이용하면 분할표를 만들 수 있습니다.
> table(dt)
love_scary_movie
sex O X
F 8 12
M 14 6
table 함수의 결과는 카이제곱검정 함수에 입력값으로 사용될 수 없습니다. 따라서 위 결과를 데이터프레임 형태로 바꿔주어야 합니다. as.data.frame.matrix 함수를 이용하여 데이터프레임 형태로 바꿔줍니다.
library(readxl)
dt <- read_excel("C:/Users/A/Desktop/카이제곱검정용_데이터.xlsx")
dt=as.data.frame(dt)
tb=as.data.frame.matrix(table(dt)) //분할표를 데이터프레임으로
3. 카이제곱검정
기대빈도 값이 5보다 작은 셀이 20% 이상인지 확인합니다. 기대빈도를 먼저 구해야합니다. 기대빈도는 아래와 같이 구합니다.
> chisq.test(tb)$expected
O X
F 11 9
M 11 9
모든 셀이 5 이상이므로 카이제곱검정을 할 수 있습니다. 카이제곱검정은 아래와 같이 합니다.
> chisq.test(tb)
Pearson's Chi-squared test with Yates' continuity correction
data: tb
X-squared = 2.5253, df = 1, p-value = 0.112
4. 만약 피셔의 정확검정을 해야한다면?
기대빈도를 구했는데 값이 5 이하인 셀이 20% 이상이면 피셔의 정확검정을 해야합니다. 아래와 같이 합니다.
> fisher.test(tb)
Fisher's Exact Test for Count Data
data: tb
p-value = 0.111
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
0.06261356 1.25427962
sample estimates:
odds ratio
0.2954024
5. 분할표에 합계도 넣고 싶다면?
rowSums 와 colSums 함수를 이용하여 합계를 구하고 기존 데이터프레임 열과 행에 적절히 추가합니다.
library(readxl)
dt <- read_excel("C:/Users/A/Desktop/카이제곱검정용_데이터.xlsx")
dt=as.data.frame(dt)
tb=as.data.frame.matrix(table(dt))
tb=cbind(tb,sum=rowSums(tb))
tb=rbind(tb,sum=colSums(tb))
결과는 아래와 같습니다.
> tb
O X sum
F 8 12 20
M 14 6 20
sum 22 18 40
'R 주제 > 통게분석(임시)' 카테고리의 다른 글
[R강의] 138. 엑셀파일 수백개를 자동으로 불러와서 for문과 rbind 이용하여 결합하기 (0) | 2023.01.19 |
---|---|
[R강의] 145. 함수 입력 변수를 이름으로 사용하는 법 (eval) (0) | 2022.12.22 |
[R강의] 999. 평균절대편차, 중앙값절대편차 구하는 법 (0) | 2022.04.30 |
[R강의] 140. For 문을 While 문으로 바꾸는 방법 (0) | 2022.04.28 |
[R강의] 134. 여러 점들 사이의 코사인 거리 한번에 구하는 법 (dist함수) (2) | 2022.02.19 |
댓글