본문 바로가기
유전체/GWAS

[R,GWAS] 카이검정 (chisq.test), 피셔검정(fisher.test) 쉽게 하기

by 인포메틱스 2021. 3. 9.
반응형

GWAS분석 툴인 Plink를 사용하면 흔하게 볼 수 있는 Header는 CHISQ입니다.

 

카이 검정이라고 하는 이 CHISQ는 R에서도 쉽게 확인할 수가 있습니다.

 

카이 검정이나 피셔 검정의 목적은 내가 분석할 데이터들이 실측값 예측값을 이용하여 실측값들이 모집단(예측값)에 맞다.에 대한 오류가 있을 확률을 구하는 것입니다.

 

<적합도 검정>

영가설 : 예측값들이 실측값과 비슷하다. 큰차이가 나지 않을 것이다.

 

대립가설 : 예측값들이 실측값과 다르다. 큰차이가 날 것이다.

 

<동질성 검정>

두 집단이 동일한지 확인 (GWAS에서 plink에서 이용)

영가설 : 두 집단이 비슷할 것이다.

대립가설 : 두 집단이 다를 것이다.

 

<독립성 검정>

두 개 이상의 변수가 독립성을 띄는지 아닌지 확인

영가설 : 두 집단이 독립적일 것이다.

대립가설 : 두 집단이 독립적이지 않을 것이다.

 

 

막상 input의 경우 비슷하게 들어갑니다. 자신이 어떤 검정을 하는지 확인하시고 돌려보시기 바랍니다.

 

적합도 검정을 예로 들어 보겠습니다.

 

실측값 예측값을 임의로 추가 시켜보도록 하겠습니다.

 

set.seed(1234)
type1=c('man','female')
Ob<-sample(c(1,2),20,replace = T)
EX<-sample(c(1,2),20,replace = T)

Ob<-type1[Ob]
EX<-type1[EX]
# table1<-table(Ob,EX)
table2<-table(Ob,EX)
table2

# 다음과 같이 나와야합니다. (set.seed설정을 했기때문에 똑같이 나와야합니다.)
        EX
Ob       female man
  female      9   5
  man         4   2
  
그리고 바로 chisq.test를 이용하면 됩니다. 
chisq.test(table2)
chisq.test(table2,correct=T) # correct=T가 연속성 수정, default

 

그러나 샘플수가 작으면 결과 값에 에러가 나올 때가 있습니다. 이때는 그냥 default로 chisq.test를 진행해주시면 알아서 연속성 수정을 해서 나옵니다. (아닌경우는 correct=F를 해주셔야 합니다..)

 

 연속성 수정은 샘플의 수가 적을때 발생될 수 있는 1종 오류의 값을 보정해주는 것이라고 생각하면 됩니다. (통계 전공이 아니라 자세히는 모르겠네요.)

 

다음 예제는 GWAS plink에서 association하는 방법에 대해서 다루어 볼것입니다.!

 

쉽습니다. 어떠한 변이에서 case, control에 다음과 같이 분포가 되어있습니다.

 

  AA AB BB
Case 1 182 3,613
Control 0 4 159

 

위와 같을 경우 각 allele의 개수를 확인해주기 위해서 다음과 같이 정리해 줍니다.

 

  A B
Case (1*2)+(182) 184 (3613*2)+(182) 7408
Control (0*2)+(4) 4 (159*2)+(4) 184

 

위에서 정리된 식을 바로 chisq.test에다 추가해주시면 됩니다.

 

test_m<-rbind.data.frame(c(4,322),c(184 ,7408))
chisq.test(test_m,correct = F)

 

위의 예제는 나중에 일부 변이에 대해서 plink를 돌려보시면서  확인해보시면 될 것 같습니다.

 

plink로 확인해 볼 때 다음과 같이 하면됩니다.

 

plink --bfile input_bfile --filter-cases --out case --make-bed
plink --bfile input_bfile --filter-controls --out control --make-bed
plink --bfile case --freqx --out case_freq
plink --bfile control --freqx --out control_freq

 

위 같이 plink를 돌리게 되면 각 case, control별로 AA,AB,BB에 대한 freq가 나옵니다. 그리고 각 Allele에 대한 정확한 freq를 계산하시고, chisq.test(mat,correct=F)를 하시면 됩니다.!

 

fisher.test의 경우 샘플의 개수가 적을때 주로 사용합니다. (chisq.test가 warning이 뜨면 fisher사용하시면 될것같습니다., 그런데 굳이 fisher를 안써도 된다고 생각합니다. 결과값은 어차피 나올놈만 나오거든요. fisher를 진행하면 odd ratio도 확인할 수가 있습니다.)

 

오늘 포스팅의 경우 갑자기 생각나는 내용을 급작스럽게 정리해서 올린것입니다.!

 

요약!

1. table을 이용하여 Contingency table을 만들수 있다는 것

2. chisq.test의 경우 개수가 많을 경우 correct=F 추가해주기 (default가 True임)

3. 적고 warning이 생길경우 fisher.test사용!

728x90
반응형

댓글