S42 초고속 GWAS의 장벽 — 50만 명 빅데이터의 계산 폭발
S42(PLINK2와 선형 혼합 모델)에서 우리는 유전적 친족 행렬(GRM)과 고유값 분해를 이용해 집단 구조화가 일으키는 거짓 양성을 제어하는 선형 혼합 모델(LMM)을 다루었습니다. 수천 명 규모의 코호트에서는 GEMMA나 GCTA 같은 전통적 LMM 도구가 잘 작동합니다.
하지만 UK Biobank, FinnGen 등 수십만 명 코호트 빅데이터 시대가 열리면서 기존 LMM은 정면으로 계산의 벽에 부딪혔습니다. 표본 수가 명으로 늘어나면, 크기의 GRM 행렬 메모리 용량만 에 달합니다. 2TB 메모리가 아니면 행렬을 올릴 수 없으며, 고유값 분해 연산 복잡도 은 계산 시간을 수 개월 단위로 늘려버립니다.
또한 환자군 대 대조군 비율이 1:100 이하로 불균형한 희귀 질환 분석에서는 기존 Wald 검정의 점근 정규성 가정이 흔들리기 시작해, 거짓 양성 P-값이 크게 부풀려질 수 있습니다. 이 편에서는 이러한 빅데이터 한계를 극복하기 위해 등장한 REGENIE의 2단계 Ridge 블록 학습과, SAIGE가 독자적으로 채택한 안장점 근사(SPA, Saddlepoint Approximation) 원리를 각각 살펴봅시다. 두 도구는 같은 문제(대규모·불균형 데이터)를 겨냥하지만 보정 방식은 서로 다른 별개의 알고리즘입니다.
REGENIE와 SAIGE의 핵심 알고리즘 유도
1. REGENIE: 2단계 Ridge 회귀와 블록 분할(Block Binning)
REGENIE는 GRM 행렬 전체를 올리지 않고, 전게놈 다유전자 효과를 블록 단위 분할 Ridge 회귀로 모형화합니다.
1단계 (Step 1): 전게놈 Ridge 예측자 산출
전게놈 품질 관리를 통과한 개의 SNP를 연속된 1,000개 단위의 블록 로 분할합니다. 블록 내에서 여러 정규화 파라미터 에 대해 Ridge 회귀 모델을 학습시켜 국소 예측자 를 구합니다.
여기서 은 블록 ·정규화 파라미터 조합으로 만든 N차원 예측값(fitted predictor)이며, 괄호 안 부분이 Ridge 회귀 계수입니다. 축적된 블록 예측값들에 Level 2 Ridge 회귀를 적용하여 최종 다유전자 예측값 를 구성합니다. 한 번에 메모리에 올려야 하는 양은 전체 SNP 가 아니라 블록 크기(기본 1,000개) 단위 로 줄어듭니다.
2단계 (Step 2): LOCO 적용 단일 SNP 검정
각 SNP 에 대해 해당 염색체를 뺀 LOCO(Leave-One-Chromosome-Out) 예측자 를 공변량으로 투입하여 단일 회귀를 수행합니다.
2. SAIGE: 안장점 근사(Saddlepoint Approximation, SPA) 유도
희귀 질환이나 극단적 대조군 비율(예: Case 500명 vs Control 499,500명) 데이터에서 통계량 의 정규분포 가정이 깨지는 문제를 SAIGE는 **안장점 근사(SPA)**로 해결합니다.
아래 CGF는 원리를 보여주기 위해 공변량과 혼합모형 보정을 뺀 단순화한 형태입니다. 실제 SAIGE는 혼합모형으로 보정된 genotype residual과 variance-ratio 절차까지 포함해 CGF를 구성합니다. CGF 와 그 1차, 2차 도함수는 다음과 같습니다.
관측된 통계량 값 s에 대해 안장점 방정식 의 해 를 구하면, Lugannani-Rice 공식을 통해 정확한 꼬리 확률 를 근사합니다.
작은 손 계산 예제: 극단적 불균형 데이터에서 정규 근사가 틀리는 이유
정규 근사가 얼마나 크게 틀릴 수 있는지, 직접 전수 계산이 가능한 아주 작은 예제로 확인해봅시다. 희귀 변이 보유자 5명()만 골라낸 상황을 가정합니다. 귀무가설 하에서 각자의 발병 확률은 로 동일하고 서로 독립입니다. 스코어 통계량은 이며, 관측값은 이 5명 중 3명이 실제 환자인 경우 입니다.
발병자 수 는 이항분포 를 따르므로, 관측값 이상이 나올 확률은 전수 계산으로 정확히 구할 수 있습니다.
반면 같은 상황에 정규 근사를 적용하면, 이므로
정확한 확률(약 )과 정규 근사(약 ) 사이에는 약 13만 배의 차이가 있습니다. 정규 근사를 그대로 GWAS p-value로 채택하면, 실제로는 우연히 나올 수 있는 수준의 신호를 터무니없이 강한 유의성으로 잘못 보고하게 됩니다.
안장점 근사(SPA)는 이 왜곡을 줄이기 위한 방법입니다. 다만 앞의 CGF 방정식 는 일반적으로 닫힌 형태 해가 없어, 실제로는 수치적으로 근을 찾아야 합니다(SAIGE도 내부적으로 같은 방식을 씁니다). 이 예제에서 근은 이고, 이를 Lugannani-Rice 식에 대입하면 SPA 근사값은 약 입니다. 전수 계산값()보다는 여전히 3배가량 작지만, 정규 근사(약 )와는 비교가 안 될 만큼 훨씬 가깝습니다. 표본이 5명뿐인 극단적 상황이라 격자(이산) 분포 특유의 오차가 남아있는 것이며, 표본이 커질수록 SPA는 전수 계산에 더 가까워집니다. 아래 코드를 직접 실행해 세 값(전수 계산·정규 근사·SPA)을 비교해봅시다.
REGENIE & R SPA 실습
REGENIE 2단계 실행 파이프라인과 R에서의 안장점 근사(SPA) 구현 코드입니다.
1단계: REGENIE CLI 파이프라인 (Step 1 & Step 2)
#!/usr/bin/env bash# REGENIE 2단계 초고속 GWAS 파이프라인set -e
# [Step 1] 전게놈 Ridge 회귀로 다유전자 예측자 산출 (--bsize 1000)regenie \ --step 1 --bed ukb_qc_array \ --phenoFile phenotypes.txt --covarFile covariates.txt \ --bsize 1000 --bt --lowmem --out regenie_step1_out
# [Step 2] Imputed 변이 대상 단일 SNP 연산 + REGENIE 자체의 근사 Firth 보정# (--firth --approx: SAIGE의 SPA와는 별개인 REGENIE 고유의 불균형 보정 옵션)regenie \ --step 2 --pgen ukb_imputed_chr1 \ --phenoFile phenotypes.txt --covarFile covariates.txt \ --pred regenie_step1_out_pred.list \ --bsize 400 --bt --firth --approx --out regenie_step2_chr1_out2단계: R 기반 안장점 근사(SPA) 보정 구현
# R 환경에서 안장점 근사(SPA) 함수 구현 — 본문의 5명 손 계산 예제 재현
cgf_k <- function(t, mu, x) sum(log(1 - mu + mu * exp(t * x))) - t * sum(x * mu)
cgf_k1 <- function(t, mu, x) sum((x * mu * exp(t * x)) / (1 - mu + mu * exp(t * x))) - sum(x * mu)
cgf_k2 <- function(t, mu, x) sum((x^2 * mu * (1 - mu) * exp(t * x)) / (1 - mu + mu * exp(t * x))^2)
# K1(t)-s_obs는 t에 대해 단조증가이므로, 무제약 뉴턴-랩슨은 초기값에 따라
# 쉽게 발산합니다(이 예제에서도 t=0 시작 시 NaN으로 발산 확인). 실무에서는
# 구간을 좁혀가는 안전한 이분법(bisection)을 씁니다.
solve_zeta <- function(s_obs, mu, x, lower = -50, upper = 50) {
f <- function(t) cgf_k1(t, mu, x) - s_obs
uniroot(f, c(lower, upper), tol = 1e-9)$root
}
# 본문 예제: 5명(x=1)이 모두 mu=0.05, 관측 s = 3 - 5*0.05 = 2.75
mu <- rep(0.05, 5); x <- rep(1, 5); s_obs <- 2.75
# 1) 전수 계산 (참값)
exact_p <- sum(dbinom(3:5, size = 5, prob = 0.05))
# 2) 정규 근사 (Wald)
var_s <- sum(x^2 * mu * (1 - mu))
normal_p <- 1 - pnorm(s_obs / sqrt(var_s))
# 3) 안장점 근사 (SPA, Lugannani-Rice)
zeta <- solve_zeta(s_obs, mu, x)
w <- sign(zeta) * sqrt(2 * (zeta * s_obs - cgf_k(zeta, mu, x)))
v <- zeta * sqrt(cgf_k2(zeta, mu, x))
spa_p <- 1 - pnorm(w) + dnorm(w) * (1 / w - 1 / v)
cat(sprintf("전수 계산 p-value: %.5e\n", exact_p))
cat(sprintf("정규 근사 p-value: %.5e\n", normal_p))
cat(sprintf("안장점 근사(SPA) p-value: %.5e\n", spa_p))CS 매핑
- 분할 정복(Divide and Conquer): 수십만 개의 SNP를 메모리에 올리는 대신, 1,000개 블록 단위로 나누어 1단계 Ridge 회귀를 수행하고 결합하는 알고리즘 패러다임입니다.
- 안장점 근사(Saddlepoint Approximation): 복잡한 통계량 분포의 꼬리 적분 확률을 복소평면 상의 안장점 통과 경로로 변환해, 정규 근사보다 훨씬 작은 오차로 고속 계산해내는 정밀 수치 기법입니다(표본이 매우 작으면 격자분포 특유의 잔여 오차가 남습니다).
- 수치 최적화 및 PCG: SAIGE가 공분산 행렬 연산 시 역행렬 구하기를 피하고, 반복적 선형 방정식 수치 해법으로 메모리 사용량을 으로 줄이는 기법입니다.
자주 만나는 결함
- Step 1에 Imputed SNP 투입: REGENIE Step 1은 통상 수만~십만 개 수준의 QC 통과 Array SNP로 다유전자 예측자를 학습합니다(정확한 상한은 표본 수·메모리 설정에 따라 달라집니다). 1,000만 개 넘는 Imputed SNP 전체를 그대로 투입하면 블록 Ridge 연산 시간과 메모리가 감당하기 어려운 수준으로 늘어납니다.
- Step 2 LOCO 누락: Step 2 단일 변이 검정 시 해당 염색체를 뺀 LOCO 다유전자 예측자를 쓰지 않으면 자기 자신 신호를 미리 제거해버리는 오류가 발생합니다.
- Firth 보정 임계값 미설정: Case 수가 적은 변이에 대해 Firth/SPA 보정을 끄고 단순 로지스틱 회귀를 돌리면 P-value가 크게 부풀려질 수 있습니다.
더 깊게 파고 싶다면
본문은 BPD 연구진이 직접 재구성한 서술입니다. 최신 대규모 GWAS 알고리즘 심화를 위해 다음 원문들을 탐구해봅시다.
- REGENIE 원 논문: Mbatchou et al. (2021), Computationally efficient whole-genome regression for quantitative and binary traits, Nature Genetics, 53(7):1097-1103. (PubMed 34017140)
- SAIGE 원 논문: Zhou et al. (2018), Efficiently controlling for case-control imbalance and sample relatedness in large-scale genetic association studies, Nature Genetics, 50(9):1335-1341.
- Pan-UK Biobank 파이프라인 문서: Broad Institute, Pan-UK Biobank Technical Methodology & QC pipeline (
pan.ukbb.broadinstitute.org). - Lugannani & Rice 원 논문: Lugannani & Rice (1980), Saddle Point Approximations for Shares of Sums of Random Variables, Advances in Applied Probability, 12(2):475-490.
이로써 LMM의 고유값 분해(S42)부터 50만 명 대규모 바이오뱅크 분석을 가속화하는 REGENIE와 SAIGE의 블록 Ridge 및 안장점 근사(S43)까지, GWAS 파이프라인의 심장부를 모두 들여다보았습니다.
다음 편 S44에서는 GWAS가 찾아낸 수백 개의 연관 변이 중, 어떤 변이가 진짜 질병을 일으키는 인과 변이(Causal Variant)인지 골라내는 Fine-mapping (SuSiE 및 CAVIAR) 분석으로 넘어갑니다.