This lesson is only available in Korean for now.
Lesson 6 of 20

상호정보량 — 상관계수가 못 보는 관계를 본다

프로토콜 Phase I-1 · ARACNE 의 심장

상호정보량 — 상관계수가 못 보는 관계를 본다
'A 를 알면 B 에 대한 궁금증이 얼마나 줄어드는가' — 이것이 상호정보량입니다.

두 유전자가 관계가 있다는 것을 어떻게 잽니까?

가장 흔한 답은 상관계수입니다. 하나가 오를 때 다른 하나도 오르면 +1, 반대로 움직이면 −1, 무관하면 0. 간단하고 계산도 빠릅니다.

그런데 상관계수에는 치명적인 사각지대가 있습니다. 직선이 아닌 관계를 못 봅니다. 예를 들어 B 가 A 에 대해 U 자 모양으로 움직이면 — A 가 작을 때도 B 가 크고 A 가 클 때도 B 가 큰 관계 — 상관계수는 0 에 가깝게 나옵니다. 관계가 분명히 있는데 없다고 답하는 거죠.

스무고개로 생각하기

상호정보량(mutual information, MI) 은 다르게 묻습니다.

"B 의 값을 맞히는 스무고개를 한다고 하자.
A 의 값을 미리 알려 주면 질문을 몇 번 덜 해도 되는가?"

덜 해도 되는 질문 수 = 상호정보량. 전혀 도움이 안 되면 0.
관계의 모양은 상관없습니다. 직선이든 U자든 계단이든, A 가 B 를 맞히는 데 도움이 되기만 하면 MI 가 큽니다.

ARACNE 가 상관계수 대신 MI 를 쓰는 이유가 이것입니다. 전사인자와 표적의 관계는 포화(더 넣어도 안 늘어남) 나 문턱(어느 선을 넘어야 켜짐) 같은 비선형이 흔하기 때문입니다.

MI 의 정의를 그대로 옮긴 코드입니다. 여덟 칸짜리 표 하나로 관계의 세기를 잽니다.
Python Runs in your browser

실전에서는 칸 나누기 대신 순위를 쓴다

위 코드는 정의에 충실하지만 문제가 있습니다. 칸을 몇 개로 나눌지에 따라 값이 흔들리고, 유전자 쌍이 수백만 개면 너무 느립니다.

그래서 ARACNE 계열 도구는 보통 순위 변환 + 가우시안 근사를 씁니다.

순위-가우시안 상호정보량
1) 유전자마다 값을 순위로 바꾼다        (1등, 2등, 3등 …)
2) 순위를 표준정규 눈금으로 옮긴다      (van der Waerden 변환)
3) 그 위에서 상관계수 rho 를 구한다      (= 스피어만 상관)
4) MI = -0.5 * ln(1 - rho^2)
단조로운(오르내리는 방향이 일정한) 관계면 이 근사가 아주 잘 맞습니다.

이 방법의 장점은 행렬 곱 한 번으로 수백만 쌍을 동시에 계산할 수 있다는 것입니다. 브라우저 안에서 1,807 × 525 개의 쌍을 몇 초 만에 끝낼 수 있는 이유가 이것입니다.

순위로 바꾼 뒤의 상관이 곧 스피어만 상관이고, 거기서 MI 가 바로 나옵니다.
Python Runs in your browser

🎮 상호정보량 실험실

관계의 모양을 바꿔 가며 상관계수와 MI 가 어떻게 달라지는지 보세요. 그다음 실제 TCGA 유전자 쌍으로도 확인할 수 있습니다.

상호정보량 실험실 — 상관계수가 놓치는 관계 찾기
Loading…
🤔 Check yourself
상호정보량이 상관계수보다 나은 점은?
🤔 Check yourself
두 변수가 완전히 무관할 때 MI 값은?
🤔 Check yourself
MI = -0.5 * ln(1 - rho**2) 라는 근사식을 쓰는 대가는?