Fine-Gray 경쟁 위험 분석과 CIF 기반 절대위험 예측

Fine-Gray 모델과 서브분포 위험을 중심으로 경쟁 위험 데이터에서 CIF 기반 절대위험을 추정하고 검증하는 방법을 정리한다.

2026-08-14 · 최초 발행 2024-04-29

경쟁 사건이 있으면 위험의 대상부터 달라진다

생존분석에서 여러 원인 가운데 하나만 최초 사건으로 발생할 수 있다면, 한 원인의 발생은 다른 원인의 관찰 기회를 없앤다. 이런 구조를 경쟁 위험(Competing risks)이라 한다. 의료·보험·제조 분야에서는 절단검열 데이터에서 특정 시점까지의 절대위험, 즉 누적 발생 확률을 예측해야 하는 경우가 많다.

누적 발생 함수(CIF, cumulative incidence function)는 특정 원인이 시간 (t) 안에 발생할 확률이다. 경쟁 위험 환경에서 CIF는 의사결정과 리스크 커뮤니케이션에 바로 연결되는 절대위험 지표다.

Fine-Gray 모형은 서브분포 위험(Subdistribution hazard)을 대상으로 회귀계수를 추정한다. 서브분포 위험은 해당 시점에 관심 원인으로 사건이 일어날 즉시위험을 뜻하며, 다른 원인으로 이미 실패한 대상도 가중치를 적용해 위험집합에 남겨 둔다. 이 모형에서 공변량 효과는 서브분포 위험비(SHR, subdistribution hazard ratio)로 표현되며, CIF를 직접 모델링하는 것이 핵심이다.

예측을 위한 모형과 병인을 위한 모형

Fine-Gray는 CIF 자체를 목표로 하므로 시간 (t)의 절대위험을 예측하는 데 적합하다. 반면 원인특이 Cox 모형은 관심 원인의 원인특이 위험을 추정하며, CIF를 구하려면 생존함수와 결합하는 추가 단계가 필요하다.

구분 Fine-Gray (Subdistribution) 원인특이 Cox (Cause-specific)
해석 서브분포 위험비(SHR), CIF 직접 타겟 원인특이 위험비(HR), CIF는 파생 계산
위험집합 타 원인 실패자 가중 포함 타 원인 실패자 제외
목적 절대위험 예측, 의사결정 병인 분석, 메커니즘 해석
성능 고검열에서도 CIF 예측 안정성 우수 예측 파이프라인 복잡, 해석 투명성
운영 편의 predictRisk 등 실무 친화 API CIF 산출에 추가 적분/시뮬레이션 필요

예측과 리스크 커뮤니케이션이 목적이면 Fine-Gray가 자연스러운 선택이다. 원인별 위험인자와 병인 해석이 본체라면 원인특이 Cox가 더 직접적인 답을 준다. Fine-Gray의 위험집합은 표준 Cox와 다르게 구성되므로, SHR을 생물학적 효과로 단순 해석하지 않도록 주의해야 한다.

데이터에서 결과까지의 흐름

분석 입력은 (time, status, covariates)로 정리한다. status에는 0=검열, 1..K=원인 코드를 부여하고, 관심 원인(cause), 검열 코드, 평가 시점(times)을 먼저 정한다.

원인별 CIF를 cuminc로 탐색하면서 사건 분포와 검열 패턴을 확인한다. 이후 Fine-Gray 모형을 FGR 또는 crr로 적합하고, 변수 선택과 상호작용·비선형성을 검토한다. 검증 단계에서는 부트스트랩 또는 교차검증으로 시간의존 AUC, Brier, 칼리브레이션을 평가한다. 결과물은 시점별 절대위험 예측치, SHR, 신뢰구간, 성능지표와 모형 진단 결과다.

예측 지향인과·병인충족위반데이터 수집(time, status, X)전처리코딩·결측·이상치탐색 분석CIF, 사건 분포모형 선택Fine-Gray 적합(FGR/crr)원인특이 Cox 적합성능 평가AUC, Brier, 칼리브레이션가정 점검리포팅/배포절대위험 테이블시간가변/층화/재사양

원인 코드의 누락이나 중복은 분석 전에 매핑 규칙으로 검증해야 한다. 검열이 >80%로 극단적인 경우에는 신뢰구간이 넓어질 수 있으므로, 단순화한 모형이나 관측 확장을 고려한다. 비례 서브분포 위험 가정이 맞지 않으면 log(time) 상호작용 같은 시간가변 효과, 층화, 구간화를 검토한다.

재현성을 위해서는 데이터 고정 스냅샷, 전처리 로그, 모델 사양 버전, 추정·검증 결과와 시드까지 함께 남기는 흐름이 필요하다.

CIF를 해석 가능한 운영 지표로 쓰는 경우

암 치료 이후에는 암사망과 비암사망을 구분해 추적 1/3/5년 절대위험을 제시할 수 있다. 이식 후에는 합병증 원인별 발생률 예측을 추적 계획에 반영할 수 있다.

보험과 리스크 관리에서는 해지, 만기, 사고사고처럼 상호배타적인 계약 이벤트의 기간 내 발생 확률을 추정하고, 포트폴리오 수준 리스크 집계와 스트레스 테스트에 활용한다. 제조·신뢰성 분석에서는 전기·기계·환경 고장 모드별 누적 고장 확률을 예측해 보증정책과 부품 교체 주기 설계에 연결할 수 있다.

동일 변수군과 고검열 환경을 가정하면 절대위험 예측 오차(Brier)가 10~30% 감소할 수 있다. 시간의존 AUC와 리스크 순위화 안정성도 개선 대상이 된다. CIF를 직접 제공하면 임상·운영 커뮤니케이션이 쉬워지고, 경쟁 위험을 무시했을 때 발생하는 과대추정 리스크를 체계적으로 줄일 수 있다.

코딩 규칙과 가정 점검

time은 최초 사건 또는 검열 시점이며, status0=검열, 1=관심 원인, 2..K=경쟁 원인으로 둔다. 공변량에는 선형성뿐 아니라 비선형성과 상호작용을 검토하고, 범주형 변수는 더미화한다.

예측(CIF)이 목적이면 Fine-Gray를, 병인(HR) 분석이 목적이면 원인특이 Cox를 선택한다. 검증에는 부트스트랩 또는 외부검증 기반 시간의존 AUC, Brier, 칼리브레이션 곡선을 사용한다. 리포트에는 시점별 1·3·5년 CIF와 95% CI, SHR, 가정 점검 결과를 함께 기록한다.

비례성은 시간 상호작용 항의 유의성과 구간화 적합을 비교해 확인한다. 영향점과 다중공선성은 표준화, 정규화, VIF 점검으로 살피며, 검열과 사건의 독립성은 민감도 분석을 통해 검토한다. Fine-Gray 계수는 Cox보다 생물학적 해석성이 낮을 수 있고, 시간가변 효과를 도입하면 모형 복잡성도 증가한다.

R로 적합·예측·검증하기

환경은 R 4.3+, packages: riskRegression (>=1.0), cmprsk, data.table을 기준으로 한다. 아래 예제는 단일 관심 원인(cause=1)과 독립 검열을 전제로 한다.

# 패키지 설치
# install.packages(c("riskRegression","cmprsk","data.table"))

library(riskRegression)
library(cmprsk)
library(data.table)

set.seed(2025)
n <- 2000
x <- rbinom(n, 1, 0.5)

# 두 원인에 대한 잠재 사건시간 시뮬레이션 (지수분포, 공변량 효과 포함)
t1 <- rexp(n, rate = 0.10 * exp(0.5 * x))   # 관심 원인(1)
t2 <- rexp(n, rate = 0.08 * exp(-0.3 * x))  # 경쟁 원인(2)
cens <- rexp(n, rate = 0.05)                # 독립 검열

time <- pmin(t1, t2, cens)
status <- ifelse(t1 <= t2 & t1 <= cens, 1,
                 ifelse(t2 < t1 & t2 <= cens, 2, 0))

dat <- data.frame(time = time, status = status, x = x)

# 1) 비모수 CIF 탐색
ci <- cuminc(ftime = dat$time, fstatus = dat$status, group = dat$x, cencode = 0)
# plot(ci)  # 시각화 필요 시

# 2) Fine-Gray 적합 (관심 원인=1)
fg <- FGR(Hist(time, status) ~ x, data = dat, cause = 1)
summary(fg)

# 3) 시점별 절대위험 예측
times <- c(3, 5, 10)
newdata <- data.frame(x = c(0, 1))
pred <- predictRisk(fg, newdata = newdata, times = times)
pred  # 행: 관측치, 열: 시점별 CIF 예측

# 4) 성능 평가(부트스트랩 교차검증, 간단 설정)
set.seed(2025)
sc <- Score(list(FG = fg),
            Hist(time, status) ~ x,
            data = dat,
            times = times,
            metrics = c("AUC","Brier"),
            split.method = "BootCv",
            B = 50,
            cause = 1,
            conservative = TRUE)
summary(sc)

summary(fg)에서 x의 SHR이 > 1이면 x=1은 관심 원인의 서브분포 위험 증가와 연관된다. predictRisk는 시점별 절대위험(CIF)을 제공하므로 운영 리포트용 테이블로 옮길 수 있다. Score 결과는 시간의존 AUC와 Brier로 판별력과 예측오차를 평가하며, 칼리브레이션 곡선도 함께 확인한다.

해석 범위를 벗어나지 않기 위한 주의

검열 독립성이 성립하지 않으면 편의가 생길 수 있어 IPCW 가중과 민감도 분석이 필요하다. 고차원 데이터에서는 L1/L2 정규화(FGR/penalized crr)를 활용해 변수 선택과 과적합 방지를 고려한다. 관측 범위 밖의 시점으로 예측을 외삽할 때는 불확실성을 명시해야 한다.

Fine-Gray는 CIF를 직접 모델링해 절대위험 기반 의사결정을 지원한다. 의료·보험·제조처럼 예측과 리스크 커뮤니케이션이 핵심인 영역에서 특히 유용하며, 일관된 데이터 코딩과 가정 점검, 시간의존 성능지표 검증, 표준화된 리포팅이 분석 품질을 좌우한다.

경쟁 위험Fine-Gray 모델생존분석통계 모형