드디어 VIPER 의 심장입니다. aREA — analytic Rank-based Enrichment Analysis,
"해석적 순위 기반 농축 분석". 이름 그대로 순열 없이 수식으로 농축을 계산합니다.
지금까지 만든 재료를 늘어놓아 봅시다.
재료
어디서 왔나
모양
MoR
레귤론 (4강)
부하마다 −1 ~ +1
w (가중치)
likelihood 정규화 (5강)
부하마다 0 ~ 1
t2
부호 있는 순위 → z (9강)
유전자마다 −3 ~ +3
t1
절대값 순위 → z (9강)
유전자마다 0 이상
두 갈래의 증언
부하들의 증언은 두 종류입니다.
첫째 갈래 — 방향성 (sum1). "부하들이 MoR 이 시키는 방향으로 움직였나?" sum1 = Σ ( w · MoR · t2 )
켜는 부하가 올라가고 끄는 부하가 내려갔으면 이 합이 커집니다.
MoR 이 0 에 가까운 부하는 여기서 기여를 못 합니다.
둘째 갈래 — 비방향성 (sum2). "방향은 몰라도, 부하들이 흔들리기는 했나?" sum2 = Σ ( w · (1 − |MoR|) · t1 ) MoR 이 0 에 가까운 부하일수록 여기에 크게 기여합니다.
방향을 모르는 부하도 "뭔가 일어났다"는 증언은 할 수 있으니까요.
두 갈래가 서로 보완하는 것이 핵심입니다. (1 − |MoR|) 이라는
가중치를 보세요 — 첫째 갈래에서 힘을 못 쓰는 부하가 둘째 갈래에서 힘을 씁니다.
명부의 어느 부하도 놀지 않습니다.
MoR 이 0.1 인 G3 은 방향 기여가 거의 없지만 세기 기여는 큽니다.
PythonRuns in your browser
둘을 하나로 — 세 갈래 꼬리 (three-tail)
이제 두 합을 하나의 농축 점수로 합칩니다. VIPER 의 규칙은 이렇습니다.
ES = ( |sum1| + max(sum2, 0) ) × sign(sum1)
읽는 법은 이렇습니다.
부호는 sum1 이 정합니다. 상사가 활발한지 잠잠한지는 방향성 증언이
결정합니다. 방향을 모르는 증언이 부호를 뒤집게 두면 안 됩니다.
크기는 둘을 더합니다. 방향 증언의 세기에, 비방향 증언을 보태기만 합니다.
sum2 가 음수면 무시합니다.max(sum2, 0) 이 그 일을 합니다.
비방향 증언은 "뭔가 일어났다"는 말만 할 수 있지, "아무 일 없었다"고 우기며
남의 증언을 깎을 자격은 없기 때문입니다.
"세 갈래 꼬리"라는 이름은 여기서 나옵니다 — 위쪽 꼬리, 아래쪽 꼬리,
그리고 양쪽 꼬리 모두를 보는 세 번째 눈.
🎮 두 갈래가 합쳐지는 것을 지켜보세요
부하마다 MoR 과 시그니처를 조절할 수 있습니다. 아래에서 sum1 과
sum2 막대가 어떻게 변하고 최종 ES 가 어떻게 나오는지 보세요.
모든 MoR 을 0 근처로 몰아 보면 방향 증언이 사라지고 세기 증언만 남습니다 —
그런데도 ES 가 0 이 아닌 것을 확인해 보십시오.
MoR 과 시그니처를 조절하며 aREA 의 두 합이 합쳐지는 과정을 봅니다
Loading…
이 area() 함수는 13강 이후에서 그대로 다시 씁니다.
PythonRuns in your browser
🤔 Check yourself
aREA 에서 sum2(비방향성 합)에 (1 − |MoR|) 이라는 가중치가 붙는 까닭은?
Answer 두 갈래는 보완 관계입니다. |MoR| 이 1 에 가까우면 sum1 에서 다 말했으니 sum2 기여가 0 에 가깝고, |MoR| 이 0 에 가까우면 반대가 됩니다. 명부의 어느 부하도 놀지 않게 하는 설계입니다.
🤔 Check yourself
ES = (|sum1| + max(sum2, 0)) × sign(sum1) 에서 부호를 sum1 이 정하는 이유는?
Answer 상사가 활발한지 잠잠한지는 방향의 문제입니다. 방향 정보가 없는 sum2 가 부호를 뒤집게 두면 결론이 뒤집혀 버립니다.
🤔 Check yourself
어떤 레귤론의 부하들이 MoR 이 전부 0 에 가깝습니다. 그런데도 aREA 의 ES 가 0 이 아닌 값이 나올 수 있는 까닭은?
Answer MoR 이 0 이면 sum1 은 0 이지만 (1−|MoR|)=1 이라 sum2 는 최대가 됩니다. “방향은 모르겠지만 이 무리가 통째로 요동쳤다”는 것도 훌륭한 신호입니다.