competing risk 생존분석, fine-and-gray method와 multi-state model

competing risk가 존재할 때 생존 분석할 수 있는 fine-and-gray method와 multi-state model을 소개합니다

R
statistics
Author
Published

August 22, 2024

관심이 있는 어떤 event가 outcome에 미치는 영향에 대한 생존분석을 진행할 때 다른 사건에 의해 follow up이 중단되는 상황이 발생할 수 있습니다. 이렇게 관측을 끝내게 만드는 의도치 않은 event를 ’competing risk’라 부릅니다. competing risk로 인한 데이터의 손실과, 결과의 왜곡을 줄이기 위한 2가지 방법으로 fine and gray method와 multi state model을 소개합니다.

1. fine and gray method

Competing risk 모델은 하나의 사건(event)이 발생하는 것을 다른 경쟁 위험들(competing risks)이 방해하는 상황을 가정합니다. 예를 들어, 환자가 A라는 질병으로 인해 사망할 수도 있지만, 다른 이유로도 사망할 수도 있습니다. 이 경우, 질병 A으로 인한 사망이 관찰하고자 하는 사건이고, 다른 이유로 인한 사망은 경쟁 위험이 됩니다.

Fine-Gray method는 환자의 다른 질병으로 인한 사망(다른 risk로 endpoint에 도달한 경우)한 케이스를, ‘만약 다른 질병에 걸리지 않았다면?’ 이라는 가정을 기반으로 가공해 새로운 데이터를 만들어냅니다. 가정을 통해 만들어진 데이터인 만큼 해당 데이터가 존재할만한 확률을 계산해 이를 가중치로서 사용합니다. 데이터와 함께 과정을 살펴보도록 하겠습니다.

1.1 데이터 전처리

실습에서는 mgus2 데이터를 사용하겠습니다. mgus 데이터는 다발성 골수종 환자에 대한 데이터로, pstat이 1인 경우 다발성 골수종에 걸린 것으로 표시됩니다.

data <- mgus2
head(data)
  id age sex dxyr  hgb creat mspike ptime pstat futime death
1  1  88   F 1981 13.1   1.3    0.5    30     0     30     1
2  2  78   F 1968 11.5   1.2    2.0    25     0     25     1
3  3  94   M 1980 10.5   1.5    2.6    46     0     46     1
4  4  68   M 1977 15.2   1.2    1.2    92     0     92     1
5  5  90   F 1973 10.7   0.8    1.0     8     0      8     1
6  6  90   M 1990 12.9   1.0    0.5     4     0      4     1

이후 dataevent를 다발성 골수종에 걸렸을 경우(pcm) 1, 다발성 골수종에 걸리지 않았지만 사망한 경우(death) 2, 다발성 골수종에 걸리지도 않았고 생존한 경우(censor) 0으로 코딩합니다. competing risk가 고려하고자 하는 데이터는 다벌성 골수종이 아닌 다른 이유로 사망한 2번 케이스 일것입니다.

data$etime <- with(data, ifelse(pstat==0, futime, ptime))
data$event <- with(data, ifelse(pstat==0, 2*death, 1))
data$event <- factor(data$event, 0:2, labels=c("censor", "pcm", "death"))

1.2 competing risk 제거

finegray 함수를 사용하면 해당 데이터가 death로 끝났을 경우, 환자가 사망하지 않았다고 가정한 새로운 데이터들을 여러 시간대 별로 제작합니다. 각 시간대별로 환자가 생존했을 확률을 Kaplan-meier estimate로 계산함으로서 이를 weight로 사용합니다.

pdata <- finegray(Surv(etime, event) ~ ., data=data)
head(pdata)
  id age sex dxyr  hgb creat mspike ptime pstat futime death fgstart fgstop
1  1  88   F 1981 13.1   1.3    0.5    30     0     30     1       0     35
2  1  88   F 1981 13.1   1.3    0.5    30     0     30     1      35     44
3  1  88   F 1981 13.1   1.3    0.5    30     0     30     1      44     47
4  1  88   F 1981 13.1   1.3    0.5    30     0     30     1      48     52
5  1  88   F 1981 13.1   1.3    0.5    30     0     30     1      53     56
6  1  88   F 1981 13.1   1.3    0.5    30     0     30     1      56     57
  fgstatus      fgwt
1        0 1.0000000
2        0 0.9990449
3        0 0.9980368
4        0 0.9959629
5        0 0.9905896
6        0 0.9873022

pdata에서 볼 수 있다 싶이 id 1번 환자는 실제로 30일 follow up 이후 사망했지만, pdata에서는 환자가 30일 이후 생존했을 경우를 가정하고, fgwt로 인위적인 데이터의 weight를 보여주고 있습니다. 실제로 시간이 길어질 수록 환자가 생존할 가능성은 떨어지기에 weight 역시 감소하는 것을 볼 수 있습니다. pdata의 event로 사용되는 fgstatus는 다발성 골수종의 발생에만 집중하여 다발성 골수종 발생 경우 1,(datapcm과 동일) 미발생시 0(censor와 동일)으로 표시하고 있습니다.

이제 competing risk로 인한 데이터를 제거했기 때문에 기존의 cox 분석으로 결과를 얻을 수 있습니다.

fgfit <- coxph(Surv(fgstart, fgstop, fgstatus) ~ age+sex,
               weight=fgwt, data=pdata, model = T)
summary(fgfit)
Call:
coxph(formula = Surv(fgstart, fgstop, fgstatus) ~ age + sex, 
    data = pdata, weights = fgwt, model = T)

  n= 41775, number of events= 115 

          coef exp(coef)  se(coef) robust se     z Pr(>|z|)   
age  -0.017302  0.982847  0.007022  0.005528 -3.13  0.00175 **
sexM -0.259757  0.771239  0.187049  0.181707 -1.43  0.15285   
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

     exp(coef) exp(-coef) lower .95 upper .95
age     0.9828      1.017    0.9723    0.9936
sexM    0.7712      1.297    0.5402    1.1012

Concordance= 0.548  (se = 0.026 )
Likelihood ratio test= 7.28  on 2 df,   p=0.03
Wald test            = 11.19  on 2 df,   p=0.004
Score (logrank) test = 7.58  on 2 df,   p=0.02,   Robust = 9.28  p=0.01

  (Note: the likelihood ratio and score tests assume independence of
     observations within a cluster, the Wald and robust score tests do not).

2. multi-state model

Multi-State Model(MSM)은 시간에 따라 환자가 여러 상태 사이를 전이하는 과정을 가정합니다. 예를 들어, 환자가 “건강한 상태”에서 “질병 상태”로, 그리고 “사망 상태”로 변화하는 것을 수치화해 생존 분석을 진행합니다.

환자의 상태를 계층화된 factor로 지정해준 후, Aalen-Johansen Estimator을 이용해 각 시간 지점에서 특정 상태에 있을 확률을 계산합니다(https://www.openriskmanual.org/wiki/Aalen-Johansen_Estimator). 데이터를 기반으로 각 고유한 시간에 전이하는 환자의 비율을 나타내는 전이행렬을 초기 확률 벡터와 곱함으로서 특정 시간에 각 상태에 있는 확률을 계산할 수 있습니다.

2.1 데이터 전처리

이번 실습에서도 mgus2 데이터를 사용합니다. 다만 해당 MSM 모델에서는 data의 event 역시 censor, pcm, death를 위 fine and gray method와 동일하게 설정했습니다. 이 경우 역시, pcm을 거치지 않고 바로 death로 가는 상황이 competing risk라 할 수 있습니다.

data <- mgus2
data$etime <- with(data, ifelse(pstat==0, futime, ptime))
data$event <- with(data, ifelse(pstat==0, 2*death, 1))
data$event <- factor(data$event, 0:2, labels=c("censor", "pcm", "death"))

2.2 MSM 모델 제작

이후 data를 기존에 0과 1로 outcome이 이진 분류된 데이터로 cox 모델을 돌리듯 모델을 제작해주면 각 상태(pcm, death by pcm)로의 진행에 대한 회귀분석이 진행됩니다. MSM를 통해 ’다발성 골수종으로의 진행’에 대한 생존 분석과, ’그 이외 영향으로 인한 사망’에 대한 생존 분석을 한 번에 진행할 수 있습니다.

MSMfit <- coxph(Surv(etime, event) ~ sex+ age, data = data, id = id, model = T)
summary(MSMfit)
Call:
coxph(formula = Surv(etime, event) ~ sex + age, data = data, 
    model = T, id = id)

  n= 1384, number of events= 975 

              coef exp(coef)  se(coef) robust se      z Pr(>|z|)    
sexM_1:2 -0.025138  0.975176  0.188456  0.189391 -0.133   0.8944    
age_1:2   0.013039  1.013124  0.008259  0.006678  1.953   0.0509 .  
sexM_1:3  0.393226  1.481753  0.069698  0.066156  5.944 2.78e-09 ***
age_1:3   0.064824  1.066971  0.003620  0.003691 17.562  < 2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

         exp(coef) exp(-coef) lower .95 upper .95
sexM_1:2    0.9752     1.0255    0.6728     1.413
age_1:2     1.0131     0.9870    1.0000     1.026
sexM_1:3    1.4818     0.6749    1.3016     1.687
age_1:3     1.0670     0.9372    1.0593     1.075

Concordance= 0.66  (se = 0.01 )
Likelihood ratio test= 389.5  on 4 df,   p=<2e-16
Wald test            = 326.7  on 4 df,   p=<2e-16
Score (logrank) test = 335.4  on 4 df,   p=<2e-16,   Robust = 285.9  p=<2e-16

  (Note: the likelihood ratio and score tests assume independence of
     observations within a cluster, the Wald and robust score tests do not).

3. fine and gray method와 MSM의 비교

3.1 fine and gray의 장단점, 적용

Fine and Gray의 가장 큰 장점은 단순성입니다. competing risks를 다룰 때 문제를 단순화하여, multi state한 상황을 binomial한 문제로 축소시켜 데이터 해석이 쉬워집니다. 이런 장점은 lifetime risk를 추정하는 것을 용이하게 해주며, 특정 사건이 발생할 종합적인 위험을 평가하는데 강점을 가집니다(ex, 여성의 경우 PCM에 대한 평생 리스크가 나이와 혈청 m-스파이크를 조정한 후에도 1.2배 더 높다).

다만 모델이 새로운 데이터를 인위적으로 만들고, 비례위험 가정을 통해 weight를 부여하기에 그만큼 잘못된 결과가 나올 위험성이 있습니다. 더불어 간단한 competing risk 상황에만 적용 가능하며, risk들간의 관계(ex. pcm으로 인한 death가 일어날 수 있는 케이스)를 반영할 수 없다는 한계가 있습니다.

3.2 MSM의 장단점, 적용

MSM은 다양한 competing risk 상황을 구현할 수 있다는 장점이 있습니다. pstate, death 등의 변수로 event를 더 세부화할시 Fine and Gray에서는 구현하지 못하는 pcm으로 인한 death 등의 관계를 적용시킬 수 있습니다. 위에서 살펴본 것 같이 competing risk를 제거하는 것이 아닌, competing risk에 의한 효과도 확인할 수 있다는 점에서 더욱 더 세심한 분석이 가능합니다.

다만 더 자세한 모델을 구현하기 위해 state간 전이시간 등 model의 제작을 위해 더 많은 정보를 필요로 한다는 것이 단점입니다. 따라서 MSM은 환자에 질병 진행 과정에 대한 세세한 데이터가 존재할 때 각 상태의 전이의 확인이 필요할 때 적용할 수 있습니다.

따라서 ’관찰하려는 event의 발생에만 관심이 있고, 그 이외 영향은 모두 제거하고 싶다’는 목적으로 competing risk를 처리하고자 할 때는 fine and gray 방법을,’관측 중 발생한 모든 event에 대한 세세한 정보를 얻고 싶다’는 목적일 때는 MSM을 쓰면 되겠습니다.

Reuse

Citation

BibTeX citation:
@online{myung2024,
  author = {Myung, Hyojong},
  title = {Competing Risk {생존분석,} Fine-and-Gray {method와}
    Multi-State Model},
  date = {2024-08-22},
  url = {https://blog.zarathu.com/posts/2024-08-22-competingrisk/},
  langid = {en}
}
For attribution, please cite this work as:
Myung, Hyojong. 2024. “Competing Risk 생존분석, Fine-and-Gray Method와 Multi-State Model.” August 22, 2024. https://blog.zarathu.com/posts/2024-08-22-competingrisk/.