#title 카이제곱 검정 [[TableOfContents]] ==== 개요 ==== * 범주(category)별로 빈도(frequency)만이 주어진 범주형 데이터의 분석은 일반적으로 카이제곱 분포를 이용한 검정법을 적용 * 목적 * 적합성: 표본의 관측도수와 모집단의 기대도수를 비교하여 기대도수와 관측도수의 차이가 있는지를 검정([확률분포 적합성] 참고) * 독립성: 두 속성간에 관계가 있는지 검정 * 동질성: 두 개 이상의 다항분포가 동일한지 검정 (독립성 검정과 같은 방식이지만, 분석목적과 표현이 다름) * 다항분포 * 시행의 결과가 2가지만 나올 수 있는 베르누이의 시행을 n번 독립적으로 반복했을 때 성공횟수는 이항분포를 따른다. * 시행의 결과의 3가지 이상일 경우는 다항분포(multinomial distribution)을 따르게 된다. * χ² = Σ (관측값 - 기대값)² / 기대값 * 자유도 = (rows-1)*(cols-1) * 아래의 예제들은 "엑셀2007에 의한 경영통계학, 노형진,정한열, 한올" 예제를 사용했다. ==== 단순 적합도 검정 ==== 단순 적합도 검정이란, 모집단의 기대도수가 특정한 형태를 따르지 않는 경우의 적합도 검정. 예제 8종류의 소주에 대한 소비자의 선호조 조사를 위해서 상표를 가리고 128명을 상대로 시음을 시킨다음 가장 좋아하는 소주를 선택하도록 하였다. 소주 맛에 대한 선호도의 차이가 있다고 할 수 있는가? attachment:카이제곱검정/chi01.jpg {{{ tmp <- textConnection( "소주종류 관측도수 1 12 2 18 3 11 4 21 5 23 6 16 7 7 8 20") x <- read.table(tmp, header=TRUE) close.connection(tmp) head(x) }}} 소주의 선호도에 차이가 없다는 것은 선택의 비율이 같음을 말한다. 그러므로 각 소주의 기대 관측도수는 16이다. {{{ > sum(x$관측도수) / nrow(x) [1] 16 }}} attachment:카이제곱검정/chi02.png 카이제곱 검정을 해보자. {{{ 기대도수 <- replicate(nrow(x), (sum(x$관측도수) / nrow(x))) x <- cbind(x,e) chisq.test(x=x$관측도수, y=x$기대도수) }}} 결과 {{{ > chisq.test(x=x$관측도수, y=x$기대도수) Chi-squared test for given probabilities data: x$관측도수 X-squared = 13.5, df = 7, p-value = 0.06082 }}} 결과해석 * 귀무가설: 차이가 없다. (소주 선호도의 차이는 없다) * 대립가설: (소주 선호도의 차이가 있다) * p-value가 0.06082로 유의수준 0.05에서 귀무가설 지지 ==== 독립성 검정 ==== [http://freesearch.pe.kr/archives/2555 여기]의 데이터를 이용해 보자. {{{ tmp <- textConnection( "교육수준 흡연실태 사원수 대졸 과흡연 51 고졸 과흡연 22 중졸 과흡연 43 대졸 흡연 92 고졸 흡연 21 중졸 흡연 28 대졸 비흡연 68 고졸 비흡연 9 중졸 비흡연 22") x <- read.table(tmp, header=TRUE) close.connection(tmp) head(x) t <- xtabs(사원수~교육수준+흡연실태, data=x) t }}} 결과 {{{ > t 흡연실태 교육수준 과흡연 비흡연 흡연 고졸 22 9 21 대졸 51 68 92 중졸 43 22 28 }}} 기대값은 다음의 집계를 이용하여 비(ratio)를 계산하면 된다. {{{ > apply(t, 1, sum) 과흡연 비흡연 흡연 116 99 141 > apply(t, 2, sum) 고졸 대졸 중졸 52 211 93 }}} 만약, 교육수준과 흡연이 상관없을 가정해보자. 무작위로 사원들을 30명 뽑아 교육수준을 살펴보면 전체(고졸:대졸:중졸 = 52:211:93)와 유사한 형태를 띌 것이다. 이런 의미에서 기대값과 관측값에 유의미한 차이가 없으면 독립성이 있다는 것이다. 하지만, 기대값과 관측값에 유의미한 차이가 있다면 변수간에 서로 영향을 주는 것이다. 즉, 독립이 아니다. 기대값을 계산해보자. 전체:흡연 = 356:141다. 그러므로 흡연자중 중졸인 사람들은 356:141 = 93:x 즉, x = 141 * 93 / 356 = 36.8347이다. 이렇게 일일이 계산하는게 짜증나니까 통계패캐지를 이용하는 거다. R에서 summary(xtabs())하면 독립성 su검정을 그냥 끝난다. {{{ > summary(t) Call: xtabs(formula = 사원수 ~ 교육수준 + 흡연실태, data = x) Number of cases in table: 356 Number of factors: 2 Test for independence of all factors: Chisq = 18.51, df = 4, p-value = 0.0009808 }}} * 귀무가설: 교육수준은 흡연에 영향을 끼치지 않는다. (독립이다, 관측값과 기대값의 차이가 없다) * 대립가설: 교육수준은 흡연에 영향을 끼친다. (독립이 아니다, 관측값과 기대값의 차이가 있다) * p-value = 0.0009808, 귀무가설 기각 책에 보니 '기대도수 5이하인 cell이 전체의 20%가 넘으면 fisher의 exact test'를 쓰라고 되어있다. fisher의 exact test( fisher.test)는 초기하분포를 이용하여 p-value를 계산한다고 한다. ==== 적합성 검정 ==== 다음의 A는 모집단의 기대도수이고, B는 표본의 관측도수다. 표본이 모집단과 같은 분포 형태를 가지는지 검정해보자. {{{ tmp <- textConnection( "A B 829 772 217 211 110 111 79 59 61 73 45 41 37 42 23 32 21 21 17 18 ") x <- read.table(tmp, header=TRUE) close.connection(tmp) plot(x$A) lines(1:nrow(x), x$B) v <- x$B e <- x$A/sum(x$A) chisq.test(v, p=e) }}} 결과 {{{ > chisq.test(v, p=e) Chi-squared test for given probabilities data: v X-squared = 14.2971, df = 9, p-value = 0.1121 }}} * 귀무가설: A와 B는 차이가 있다. --> p-value = 0.1121로 유의수준 0.05에서 귀무가설 지지 * 대립가설: A와 B는 차이가 없다. 어느 부분에 차이가 있나? {{{ 분모 <- c(x$A[1], x$B[1]) #첫 번째 행이 분모인 경우 # 분모 <- c(sum(x$A), sum(x$B)) #전체 sum이 분모인경우 for(i in 2:nrow(x)){ 분자 <- c(x$A[i], x$B[i]) #pval <- poisson.test(분자, 분모)$p.value * (nrow(x)-1) # nrow(x)-1 은 bonferroni conrrection pval <- prop.test(분자, 분모)$p.value * (nrow(x)-1) # nrow(x)-1 은 bonferroni conrrection print(paste0(i, "=", pval)) } }}} ==== 동질성 검정 ==== 안락사에 대한 여론조사 결과다. {{{ tmp <- textConnection( "종교 찬성여부 사람수 기독교 찬성 175 기독교 반대 125 천주교 찬성 100 천주교 반대 100 불교 찬성 160 불교 반대 140 무교 찬성 250 무교 반대 150") x <- read.table(tmp, header=TRUE) close.connection(tmp) summary(xtabs(사람수~종교+찬성여부, data=x)) }}} 결과 {{{ > summary(xtabs(사람수~종교+찬성여부, data=x)) Call: xtabs(formula = 사람수 ~ 종교 + 찬성여부, data = x) Number of cases in table: 1200 Number of factors: 2 Test for independence of all factors: Chisq = 10.8, df = 3, p-value = 0.01286 }}} * 귀무가설: 종교와 관계없이 안락사에 대한 의견은 동일하다. * 대립가설: 종교와 관계없이 안락사에 대한 의견은 동일하지 않다. * p-value = 0.01286로 유의수준 0.05에서 귀무가설 기각 ==== McNemar Test ==== 대응표본(paired sample)의 자료에 관한 비율을 비교하는 검정으로, 연관된 두 binary 변수의 차이를 비교할 때 사용된다. paired t-test와 같이 할 수 있다. 같은 사람을 대상으로 광고 전/후 차이를 비교할 때와 같은 경우에 사용한다. {{{ x = xtabs(~before + after, data=xdata) mcnemar.test(x) }}} ==== 참고자료 ==== * [http://www.databaser.net/moniwiki/pds/Statistics/%EC%B9%B4%EC%9D%B4%EC%A0%9C%EA%B3%B1_%EB%8F%85%EB%A6%BD%EC%84%B1%EA%B2%80%EC%A0%95_%EA%B2%B0%EA%B3%BC%EB%B3%B4%EB%8A%94%EB%B0%A9%EB%B2%95.xlsx x^^2^^ 독립성 검정결과 보는 방법] * http://freesearch.pe.kr/archives/2555