10강 / 20강

aREA — 세 갈래 꼬리로 증언을 모으다

방향성 신호와 비방향성 신호를 함께 읽는 법

aREA — 세 갈래 꼬리로 증언을 모으다
부하들의 증언을 방향과 세기 두 갈래로 모아 하나로 합칩니다.

드디어 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 은 방향 기여가 거의 없지만 세기 기여는 큽니다.
Python 브라우저에서 실행

둘을 하나로 — 세 갈래 꼬리 (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 의 두 합이 합쳐지는 과정을 봅니다
불러오는 중…
이 area() 함수는 13강 이후에서 그대로 다시 씁니다.
Python 브라우저에서 실행
🤔 확인 문제
aREA 에서 sum2(비방향성 합)에 (1 − |MoR|) 이라는 가중치가 붙는 까닭은?
🤔 확인 문제
ES = (|sum1| + max(sum2, 0)) × sign(sum1) 에서 부호를 sum1 이 정하는 이유는?
🤔 확인 문제
어떤 레귤론의 부하들이 MoR 이 전부 0 에 가깝습니다. 그런데도 aREA 의 ES 가 0 이 아닌 값이 나올 수 있는 까닭은?