9강 / 20강

정규분위수 — 순위를 다시 숫자로

1등과 2등의 차이를, 500등과 501등의 차이보다 크게

정규분위수 — 순위를 다시 숫자로
순위를 종 모양 위에 올려놓으면 양 끝이 멀어집니다.

순위로 바꾼 것까지는 좋았습니다. 그런데 순위에는 이상한 구석이 있어요. 20,000개 중 1등과 2등의 차이가 10,000등과 10,001등의 차이와 똑같이 "한 칸"이라는 것입니다.

그런데 우리 직관은 다르죠. 맨 끝에 있는 유전자들은 특별합니다. 가운데 있는 유전자들은 다 고만고만하고요. 양 끝을 벌리고 가운데를 붙여야 합니다.

그래서 VIPER 는 한 걸음 더 갑니다. 순위를 0 과 1 사이의 비율로 바꾼 뒤, 그 비율에 해당하는 정규분포의 값을 찾습니다. 이것을 정규분위수 변환 (quantile normalization to normal, 줄여서 qnorm)이라고 부릅니다.

순위 r · 전체 N  →  p = r / (N+1)  →  z = Φ⁻¹(p)
Φ⁻¹ 는 정규분포 누적함수의 역함수입니다. inv_cdf 가 그것입니다.
Python 브라우저에서 실행

🎮 순위가 종 모양 위에 얹히는 것을 보세요

슬라이더로 순위를 옮겨 보세요. 왼쪽의 줄 위에서 한 칸씩 움직일 때, 오른쪽의 종 모양 위에서는 얼마나 움직이는지 보십시오. 가운데에서는 거의 안 움직이고, 끝에서는 훌쩍 뜁니다.

순위를 옮기며 정규분위수가 얼마나 변하는지 봅니다
불러오는 중…
이 함수는 10강의 aREA 에서 그대로 다시 씁니다.
Python 브라우저에서 실행

두 개의 z 를 만듭니다

7강에서 순위를 두 가지로 매긴다고 했습니다. 그 둘을 각각 z 로 바꾸면 VIPER 가 쓰는 두 값이 나옵니다.

이름어떻게 만드나무엇을 말하나
t2 (방향성)부호 있는 순위 → z이 유전자가 어느 쪽으로 얼마나 갔나
t1 (비방향성)절대값 순위 → z이 유전자가 방향과 무관하게 얼마나 흔들렸나

t2 는 −3 에서 +3 사이를 오갑니다. t1 은 가운데 유전자가 작고 양 끝의 유전자가 큰, 늘 0 이상인 값입니다. 다음 강의에서 이 둘을 합칩니다.

🤔 확인 문제
순위를 정규분위수(z)로 바꾸는 목적으로 가장 알맞은 것은?
🤔 확인 문제
정규분위수 변환에서 p = r / (N+1) 처럼 N 이 아니라 N+1 로 나누는 까닭은?
🤔 확인 문제
정규분위수 변환을 거치면 얻게 되는 계산상의 이점은?