생물정보분석 #3 확률분포, 카이제곱검정

생물정보분석 #3 확률분포, 카이제곱검정 #

#2026-01-13


#1 통계적 유의성

통계적 유의성

  • 실험 결과로 나온 수치가 우연인지, 주장을 뒷받침할만큼 확률(빈도)이 높은 것인지 그 의미를 검증할수만 있으면 된다.
  • 어떤 실험 결과가 통계적으로 유의하다는 말은
    • 그 결과가 우연히 일어난 것이 아니라는 것
  • 통계 분석을 통해
    • 어떤 암에서 특정 유전자가 빈번하게 발현되는것을 발견했다고 할때 이것이 우연히 관측된 결과인지 중복된 관찰을 통해 큰 의미가 있는 것으로 결론지을수 있는 것인지 정량적으로 밝힐 수 있다.

p-value

  • 관측이 진리가 아닌 우연일 확률
  • 0-가설로 다음을 설정: 동전은 앞면이 나올 확률이 1/2이다.
    • 그리고 실험: 10번 던지기를 1000번 해보니 60번은 앞면이 8번이상 나왔다.
    • 실험 결과: 1앞면이 나올 확률이 1/2이라도 10번 던지면 6%의 확률로 8번이상 앞면이 나온다.
    • p=0.06이다.
  • p값이 0.05보다 작으면 0-가설을 기각하는데 0.06이니까 0-가설을 기각 불가다. 즉 0.06정도면 확률이 높으니 8번이상 앞면이 나온 관측은 진리가 아닌 우연이다.

귀무가설

  • 귀무가설은 처음부터 기각을 염두에 둔 가설.
  • 앞의 예에서는
    • 동전 앞면과 뒷면이 나올 확률이 1/2이라고 가정하고 8번이 나올 확률을 계산했다.
    • 귀무가설을 어떻게 정하는지에 따라 p-값이 바뀐다 그래서 p-값을 보면 항상 귀무가설이 뭔지 확인해야 한다.

이항분포

  • 10번 던지기 1000번 할 필요 없이(즉 실험할 필요 없이),
    • 확률분포를 알고있는 경우에는 CDF를 이용해서 p-값을 구할 수 있다.
    • 확률분포를 알고있다란?
      • 확률분포 유형이랑 그 유형이 필요로 하는 값을 알고있다. 즉 binom이라는거랑 n은 10이고 p는 0.5라는걸 알고있다.
#import numpy as np

#np.random.seed(1000)
#a = np.random.binomial(10, 0.5, 1000) # 실험 할 필요 없다
#sum(1 for x in a if x>=8)
#60

from scipy.stats import binom

n,p = 10, 0.5
10-binom.cdf(7,n,p)
np.float64(9.0546875)

시뮬레이션

  • 확률분포를 알기위해서는
    • 현상을 분석해서 확률모델로 만들어야함.
    • 평균을 가진다고 가정해도되면 정규분포가 되고
    • 유전체 빈도처럼 나타나는 횟수에 관련되어있으면 포아송 확률분포 모델을 쓴다.
  • 명확한 모델이 나오지 않으면 시뮬레이션을 쓴다.
    • 연구 방법론으로 50개 유전자를 찾았을때 30개가 특정 질병에 관련돼있으면
    • 얼마나 의미있는 결과인지 보기 위해서는
      • 전체 유전자에서 임의로 30개를 뽑는게 아니고
      • 전체 유전자에서 임의로 50개를 뽑고 특정 질병과 관련된 유전자가 30개 이상인 경우인지 보기 «를 1000번 정도 하고 몇번인지 세보면 된다.
      • 여기서 귀무가설은 “관측은 우연이 아니라 진리다” (관측=이 연구 방법론으로 찾은 50개 중 30개가 특정 질병에 관련됨)
      • p-값이 크면 기각이다. 관측은 우연이다.
  • 시뮬레이션 방법의 단점은
    • p-값이 매우 작기 때문에 많은 실험을 반복해야한다.
      • 1000번만 실험하면 0.001 이하의 p-값은 모두 0으로 표시된다. (그래서 p<0.001이라는 표현이 있다 = 0을 저렇게 쓴다는건가?)
    • 그리고 연산량이 많다.
      • 50개 정도를 돌리는건 괜찮지만 암 유전체에서 발견되는 100만개 유전변이를 각각 시뮬레이션하는것은 불가능하다.

#

#2 확률 변수와 분포

확률 변수 X

  • 값은 모르는데 나올 확률은 x로 정해져있는 변수 X

이항 분포

  • p의 확률로 성공하는 일을 n번 시행해서 성공할 확률 x에 대한 분포.
  • X~B(10, 0.5)
    • 앞면이 나올 횟수 X가 얼마인진 모르겠지만 n=10, p=0.5인 B(이항분포)를 따른다.
  • 어떤 유전 변이가 2% 확률로 나타나는데 어떤 질병을 가진사람 1000명을 봤을때 그중 40명이 이 유전변이를 가졌다. 이 유전변이가 질병과 관련 없는데 우연히 일어났을 확률 x의 분포는?
    • 0-가설: 유전변이 v는 질병과 상관이없다
    • p-값: P(X>=40)
    • X~B(1000,0.2)
    • 계산해서 p-값이 충분히 작다면 0-가설을 기각하고 유전변이 v가 질병과 상관있다는걸 알수있다.
  • 빈도를 확률로 나타낸다.

푸아송 분포

  • 빈도를 확률로 나타내는 또다른 방법.
  • 유전체 시퀀싱할때 모든 위치가 평균 10번 시퀀싱되도록 하는데
    • 어떤 부분이 얼마나 시퀀싱 될지 깊이(depth)가 확률 변수 X라고 하면
    • 이 변수는 평균을 10으로 하는 푸아송 분포를 따른다.
  • 푸아송 분포는 이항분포로 바꿀수도있는데
    • 인간 유전체는 30억쌍이고 깊이 10이면 총 300억개 시퀀싱 데이터가 있고
    • 데이터가 특정 1개 위치에 대한 데이터일 확률은 1/30억으로써
    • B(300억, 1/30억)으로 표현되는데
    • n이 너무 크고 p가 너무 작다. 이럴때 푸아송으로 근사된다고 볼수있다.

#

#3 카이제곱 검정

카이제곱값

  • 빈도가 그룹 간 얼마나 다른가?
    • 각 X값마다 -> 관측값-기댓값 제곱 / 기댓값 -> 의 합이 카이제곱(x제곱)

카이제곱 분포

  • 카이제곱값이 나타날 확률은 카이제곱 분포를 따른다.
  • k개의 서로 독립적인 표준 정규 확률 변수를 각각 제곱해서 계산한다. 이때 k는 자유도.

카이제곱 계산

  • 카이제곱값을 계산하려면 기대 빈도를 구해야한다.
  • 알츠하이머에 걸린 사람 500명(질병군)과 아닌 사람 1500명(대조군)에 대해서 각 유전변이가 나타나는 빈도를 구했음
    • -> 유전변이 s1이 질병 100명, 대조군 100명에서 나타났을때 이 빈도는 얼마나 유의할까?

cf) 생각

  • 만약 위 케이스가 이항분포 섹션이었다면?
    • 알츠하이머에 걸린 사람 500명(질병군)과 아닌 사람 1500명(대조군)에 대해서 각 유전변이가 나타나는 빈도를 구했음
    • -> 이 유전변이가 알츠하이머와 상관이 있는지를 구해보자. 여야 할것이고
    • -> 분석 케이스가 상관있다 없다 니까
    • -> 상관없을때 나타나는 확률 x가 주어졌어야 했을것임
    • 카이제곱에서는
      • -> 이 빈도가 유의미한지 아닌지이고
      • -> 분석 케이스가 유의미하다 아니다 니까
      • -> 유의미하지않을때 나타나는 확률 x가 필요함 근데 유의미하지않으면 동등한거니까 이미 1/2로 나와있는 셈.

#

다시 카이제곱 계산

  • 유전변이 s1이 질병 100명, 대조군 100명에서 나타났을때 이 빈도는 얼마나 유의할까?
    • 일단 기대빈도 구하기
      • 2000명 중 200명에 유전변이가 나타난거니까 기대 빈도는 150명, 50명 / 관찰 빈도는 100명, 100명.
    • contingency table을 만든다
    • 그리고 ‘관측값-기댓값 제곱 / 기댓값’을 구해서 합해준다.
    • 카이제곱값은 74.074가 나온다.

카이제곱 검정

  • 계산된 카이제곱값은 74.074는 얼마나 유의한 값인가?
  • 카이제곱 검정을 하려면 자유도 k가 몇인 카이제곱분포를 따를지 판단해야한다.
    • n*m 표의 관측값을 위한 자유도는 (n-1)*(m-1)로 계산한다.
  • 그리고 0-가설은 ‘유전변이가 질병과 상관없다’로 놓고 통계 분석을 하면
    • p value 계산결과는 7.524E-18로, 유전변이가 질병과 상관없다고 가정한 세상에서는 저 결과가 저 빈도로 나올 확률이 거의 없다.
    • 즉 유전변이가 질병과 상관 있다.

#

자유도

  • 환자 500명에서 변이 빈도가 100명이면 변이가 없는 빈도는 400이다.
    • 100과 400은 2개의 숫자이지만 하나만 자유롭게 바뀔수있고 나머지하나는 하나가 결정되면 결정되어버리는 종속변수다. -> 2-1=1
    • 정상인 1500명에서도 동일하다 -> 2-1=1
    • 그럼 1+1은 2인가?
      • 아님. 총 빈도가 200이기 때문에 정상인 빈도와 환자 빈도 둘중 하나가 또 종속이고
      • 그래서 자유도는 1이다.

카이제곱 독립성 검증이 하는일

  • 질병의 유무와 유전변이의 유무가 독립적인가?를 검증한다.

#

#출처

책 빅데이터&인공지능 with 생물정보학