9강 / 20강

섞어서 문턱을 세운다 — 우연이면 얼마나 나오나

귀무분포와 유의수준

섞어서 문턱을 세운다 — 우연이면 얼마나 나오나
짝을 일부러 흐트러뜨려 관계를 없앤 뒤 MI 를 재 봅니다. 거기서 나온 값이 '우연의 크기'입니다.

8강에서 279개의 MI 값을 얻었습니다. 이제 어디서 자를까를 정해야 합니다.

"0.3 이상"처럼 눈대중으로 정할 수는 없습니다. 6강에서 봤듯이 MI 값은 칸 수와 샘플 수에 따라 통째로 오르내리니까요. 기준을 자료 스스로에게 물어야 합니다.

관계가 정말 없을 때 MI 는 얼마나 나오는가?
거기서 안 나오는 값이면 관계가 있는 것이다.

관계가 없는 자료를 만드는 법

간단합니다. 두 유전자 중 한쪽의 샘플 순서만 섞어 버리면 됩니다. 값의 분포는 그대로인데 짝만 흐트러지므로, 관계는 사라지고 나머지 조건은 똑같습니다.

섞을 때마다 값이 조금씩 다릅니다. 그 흔들림의 전체 모습이 바로 귀무분포입니다.
Python 브라우저에서 실행
귀무분포는 유전자마다 다르지 않습니다 — 순위 변환을 했기 때문에 모두 같은 균등분포거든요. 그래서 한 번만 뽑으면 됩니다.
Python 브라우저에서 실행

🎮 문턱을 옮겨 보기

히스토그램이 귀무분포입니다. α 를 바꾸면 문턱(주황 선)이 움직이고, 그에 따라 몇 개의 간선이 살아남는지와 그중 진짜가 몇 개인지가 함께 바뀝니다.

귀무분포 실험실 — 문턱을 옮기면 정밀도와 재현율이 어떻게 갈릴까
불러오는 중…
α 를 조이면 가짜가 줄지만 진짜도 놓치기 시작합니다. α = 0.001 이 이 자료에서는 좋은 자리입니다.
Python 브라우저에서 실행

섞기를 몇 번 해야 하나

α = 0.001 짜리 문턱을 2000번 섞기로 정하는 것은 사실 아슬아슬합니다. 0.999 분위수를 잡으려면 위쪽 2개의 값에 기대는 셈이거든요. 어림잡아 섞기 횟수 ≫ 1/α 여야 합니다.

실제 ARACNe-AP 는 두 가지로 해결합니다.

  • 많이 섞는다 — 백만 번 이상 (자바로 멀티스레드니까 가능합니다)
  • 꼬리를 함수로 맞춘다 — 상위 10%에 지수함수를 맞춰 놓고 α = 10⁻⁶ 같은 곳까지 외삽합니다
MI 의 귀무 꼬리가 지수분포에 가깝다는 사실을 이용합니다. ARACNe-AP 가 실제로 쓰는 요령입니다.
Python 브라우저에서 실행
🤔 확인 문제
귀무분포를 만들 때 한쪽 벡터의 순서만 섞는 이유는?
🤔 확인 문제
α = 0.001 인 문턱을 쓰면서 후보 쌍 279개를 검사했습니다. 우연히 넘는 쌍은 평균 몇 개일까요?
🤔 확인 문제
α 를 극단적으로 조였는데도 가짜 간선 15개가 남았습니다. 이 15개의 정체는?