library(tmle3)
library(sl3)12 사건 시간 결과에 대한 1단계 TMLE
아래 자료에 기반해 작성되었습니다.
- Cai W, van der Laan MJ. One-step targeted maximum likelihood estimation for time-to-event outcomes [published online ahead of print, 2019 Nov 15]. Biometrics. 2019;10.1111/biom.13172. doi:10.1111/biom.13172.
- Moore, K. and van der Laan, M.J. (2009) Application of time-to-event methods in the assessment of safety in clinical trials. Design and Analysis of Clinical Trials with Time-to-Event Endpoints. London: Taylor & Francis, pp. 455–482.
tmle3를 사용하여 반사실적 주변 생존 함수(counterfactual marginal survival functions)를 추정합니다.
12.1 소개
추정 절차의 첫 번째 단계는 실패(failure)의 조건부 생존 함수, 중도절단(censoring)의 조건부 생존 함수 및 성향 점수의 초기 추정입니다. 이 초기 추정에는 이전 섹션에서 설명한 대로 슈퍼 러너 (van der Laan, Polley, and Hubbard 2007)를 사용합니다.
표적 매개변수를 평가하는 데 필요한 데이터 생성 분포의 관련 부분에 대한 초기 추정치를 확보하면, 1단계(one-step) TMLE를 구축할 준비가 된 것입니다.
12.2 예제
tmle3를 사용하여 치료 특정 생존 곡선(treatment specific survival curve)을 추정하는 방법을 예제를 통해 살펴보겠습니다.
12.2.1 데이터 로드
vet_data <- read.csv(
paste0(
"https://raw.githubusercontent.com/tlverse/deming2019-workshop/",
"master/data/veteran.csv"
)
)
vet_data$trt <- vet_data$trt - 1
# 시연을 위해 시간 단위를 줄입니다.
vet_data$time <- ceiling(vet_data$time / 20)
k_grid <- seq_len(max(vet_data$time))
head(vet_data)
X trt celltype time status karno diagtime age prior
1 1 0 squamous 4 1 60 7 69 0
2 2 0 squamous 21 1 70 5 64 10
3 3 0 squamous 12 1 60 3 38 0
4 4 0 squamous 7 1 60 9 63 10
5 5 0 squamous 6 1 70 11 65 10
6 6 0 squamous 1 1 20 5 49 0vet_data의 변수들은 다음과 같습니다: * trt: 치료 유형 (0 = 표준, 1 = 테스트) * celltype: 종양의 조직학적 유형 * time: 사망 또는 중도절단까지의 시간 (일 단위) * status: 중도절단 여부 * karno: 연구 시작 당시의 전반적인 환자 상태를 설명하는 Karnofsky 수행 지수 (100 = 양호) * diagtime: 진단으로부터 무작위 배정까지의 개월 수 * age: 환자 나이 * prior: 이전 치료 경험 (0 = 아니오, 10 = 예)
12.2.2 우측 중도절단 생존 데이터 인수 지정
먼저, 생존 데이터 추정에 특화된 tmle_spec을 생성하기 위해 tmle_survival 함수를 사용합니다. 조건부 생존 함수를 추정하려면, 먼저 실패 사건의 조건부 위험(conditional hazard)을 추정한 다음 이를 조건부 생존 함수로 변환해야 합니다. 조건부 위험의 정의는 다음과 같습니다:
[_{N}(t|A, W)=P(N(t)=1|N(t-1)=0, A_c(t-1)=0, A, W)]
여기서 \(N(t)=I(\widetilde{T}\le t, \Delta = 1), A_c(t)=I(\widetilde{T}\le t, \Delta = 0)\)입니다. 우리는 survival_spec의 transform_data 함수를 호출하여 원본 데이터를 필요한 롱 포맷(long format)으로 변환할 것입니다. node_list에 W(공변량), A(치료/중재), T_tilde(사건 시간 벡터), Delta(중도절단 표시자 벡터) 및 행 ID를 지정해야 합니다.
var_types <- list(
T_tilde = Variable_Type$new("continuous"),
t = Variable_Type$new("continuous"),
Delta = Variable_Type$new("binomial")
)
survival_spec <- tmle_survival(
treatment_level = 1, control_level = 0,
target_times = intersect(1:10, k_grid),
variable_types = var_types
)
node_list <- list(
W = c("celltype", "karno", "diagtime", "age", "prior"),
A = "trt", T_tilde = "time", Delta = "status", id = "X"
)
long_data_tuple <- survival_spec$transform_data(vet_data, node_list)
df_long <- long_data_tuple$long_data
long_node_list <- long_data_tuple$long_node_list12.2.3 초기 추정치 확보
5장에서 설명한 대로 학습기와 tmle_task를 정의합니다.
lrnr_mean <- make_learner(Lrnr_mean)
lrnr_glm <- make_learner(Lrnr_glm)
lrnr_gam <- make_learner(Lrnr_gam)
sl_A <- Lrnr_sl$new(learners = list(lrnr_mean, lrnr_glm, lrnr_gam))
learner_list <- list(A = sl_A, N = sl_A, A_c = sl_A)tmle_task <- survival_spec$make_tmle_task(df_long, long_node_list)
initial_likelihood <- survival_spec$make_initial_likelihood(
tmle_task,
learner_list
)12.2.4 초기 조건부 생존 추정치의 TMLE 조정 수행
업데이터를 위해 tmle3_Update_survival 객체를 생성합니다. fit_method를 l2로 설정하면 로지스틱 릿지 회귀(logistic ridge regression)를 사용하여 1단계 TMLE를 실행하게 됩니다.
up <- tmle3_Update_survival$new(
maxit = 3e1,
cvtmle = TRUE,
convergence_type = "scaled_var",
delta_epsilon = 1e-2,
fit_method = "l2",
use_best = TRUE,
verbose = FALSE
)
targeted_likelihood <- Targeted_Likelihood$new(initial_likelihood,
updater = up
)
tmle_params <- survival_spec$make_params(tmle_task, targeted_likelihood)
tmle_fit_manual <- fit_tmle3(
tmle_task, targeted_likelihood, tmle_params,
targeted_likelihood$updater
)print(tmle_fit_manual)
A tmle3_Fit that took 30 step(s)
type param init_est tmle_est se lower upper
<char> <char> <num> <num> <num> <num> <num>
1: survival E[P(T > 1|A=1, W)] 0.786297 0.788327 0.04836 0.693535 0.88312
2: survival E[P(T > 2|A=1, W)] 0.632930 0.632883 0.05724 0.520699 0.74507
3: survival E[P(T > 3|A=1, W)] 0.519067 0.515114 0.05726 0.402878 0.62735
4: survival E[P(T > 4|A=1, W)] 0.432063 0.429012 0.05620 0.318858 0.53917
5: survival E[P(T > 5|A=1, W)] 0.363953 0.360762 0.05445 0.254045 0.46748
6: survival E[P(T > 6|A=1, W)] 0.309546 0.308864 0.05378 0.203460 0.41427
7: survival E[P(T > 7|A=1, W)] 0.265348 0.268487 0.05140 0.167735 0.36924
8: survival E[P(T > 8|A=1, W)] 0.228938 0.236337 0.05104 0.136294 0.33638
9: survival E[P(T > 9|A=1, W)] 0.198595 0.208493 0.05015 0.110204 0.30678
10: survival E[P(T > 10|A=1, W)] 0.173061 0.183451 0.04917 0.087075 0.27983
11: survival E[P(T > 11|A=1, W)] 0.151400 0.160196 0.04936 0.063452 0.25694
12: survival E[P(T > 12|A=1, W)] 0.132899 0.140361 0.04829 0.045714 0.23501
13: survival E[P(T > 13|A=1, W)] 0.117003 0.123345 0.04619 0.032815 0.21387
14: survival E[P(T > 14|A=1, W)] 0.103277 0.108677 0.04642 0.017689 0.19966
15: survival E[P(T > 15|A=1, W)] 0.091373 0.095978 0.04618 0.005472 0.18648
16: survival E[P(T > 16|A=1, W)] 0.081009 0.084942 0.04685 -0.006890 0.17677
17: survival E[P(T > 17|A=1, W)] 0.071956 0.075320 0.04491 -0.012697 0.16334
18: survival E[P(T > 18|A=1, W)] 0.064023 0.066906 0.04330 -0.017967 0.15178
19: survival E[P(T > 19|A=1, W)] 0.057054 0.059528 0.04021 -0.019279 0.13834
20: survival E[P(T > 20|A=1, W)] 0.050915 0.053043 0.03857 -0.022557 0.12864
21: survival E[P(T > 21|A=1, W)] 0.045497 0.047330 0.03913 -0.029360 0.12402
22: survival E[P(T > 22|A=1, W)] 0.040704 0.042286 0.03981 -0.035742 0.12031
23: survival E[P(T > 23|A=1, W)] 0.036456 0.037825 0.04060 -0.041749 0.11740
24: survival E[P(T > 24|A=1, W)] 0.032685 0.033873 0.03847 -0.041524 0.10927
25: survival E[P(T > 25|A=1, W)] 0.029331 0.030366 0.03917 -0.046405 0.10714
26: survival E[P(T > 26|A=1, W)] 0.026345 0.027248 0.03995 -0.051060 0.10556
27: survival E[P(T > 27|A=1, W)] 0.023682 0.024474 0.04081 -0.055515 0.10446
28: survival E[P(T > 28|A=1, W)] 0.021304 0.022001 0.04174 -0.059799 0.10380
29: survival E[P(T > 29|A=1, W)] 0.019178 0.019793 0.04272 -0.063934 0.10352
30: survival E[P(T > 30|A=1, W)] 0.017276 0.017821 0.03625 -0.053221 0.08886
31: survival E[P(T > 31|A=1, W)] 0.015572 0.016058 0.03704 -0.056536 0.08865
32: survival E[P(T > 32|A=1, W)] 0.014043 0.014478 0.03790 -0.059796 0.08875
33: survival E[P(T > 33|A=1, W)] 0.012671 0.013062 0.03881 -0.063006 0.08913
34: survival E[P(T > 34|A=1, W)] 0.011439 0.011792 0.03978 -0.066174 0.08976
35: survival E[P(T > 35|A=1, W)] 0.010331 0.010651 0.04079 -0.069305 0.09061
36: survival E[P(T > 36|A=1, W)] 0.009334 0.009626 0.04185 -0.072408 0.09166
37: survival E[P(T > 37|A=1, W)] 0.008437 0.008703 0.04296 -0.075491 0.09290
38: survival E[P(T > 38|A=1, W)] 0.007628 0.007873 0.04410 -0.078561 0.09431
39: survival E[P(T > 39|A=1, W)] 0.006900 0.007125 0.04528 -0.081626 0.09588
40: survival E[P(T > 40|A=1, W)] 0.006242 0.006451 0.04650 -0.084693 0.09759
41: survival E[P(T > 41|A=1, W)] 0.005649 0.005842 0.04776 -0.087768 0.09945
42: survival E[P(T > 42|A=1, W)] 0.005113 0.005293 0.04906 -0.090860 0.10145
43: survival E[P(T > 43|A=1, W)] 0.004630 0.004797 0.05039 -0.093973 0.10357
44: survival E[P(T > 44|A=1, W)] 0.004193 0.004349 0.05177 -0.097114 0.10581
45: survival E[P(T > 45|A=1, W)] 0.003797 0.003943 0.05318 -0.100289 0.10818
46: survival E[P(T > 46|A=1, W)] 0.003440 0.003577 0.05463 -0.103503 0.11066
47: survival E[P(T > 47|A=1, W)] 0.003117 0.003245 0.05613 -0.106761 0.11325
48: survival E[P(T > 48|A=1, W)] 0.002824 0.002944 0.05766 -0.110069 0.11596
49: survival E[P(T > 49|A=1, W)] 0.002559 0.002672 0.05924 -0.113431 0.11877
50: survival E[P(T > 50|A=1, W)] 0.002319 0.002425 0.01370 -0.024419 0.02927
type param init_est tmle_est se lower upper
psi_transformed lower_transformed upper_transformed
<num> <num> <num>
1: 0.788327 0.693535 0.88312
2: 0.632883 0.520699 0.74507
3: 0.515114 0.402878 0.62735
4: 0.429012 0.318858 0.53917
5: 0.360762 0.254045 0.46748
6: 0.308864 0.203460 0.41427
7: 0.268487 0.167735 0.36924
8: 0.236337 0.136294 0.33638
9: 0.208493 0.110204 0.30678
10: 0.183451 0.087075 0.27983
11: 0.160196 0.063452 0.25694
12: 0.140361 0.045714 0.23501
13: 0.123345 0.032815 0.21387
14: 0.108677 0.017689 0.19966
15: 0.095978 0.005472 0.18648
16: 0.084942 -0.006890 0.17677
17: 0.075320 -0.012697 0.16334
18: 0.066906 -0.017967 0.15178
19: 0.059528 -0.019279 0.13834
20: 0.053043 -0.022557 0.12864
21: 0.047330 -0.029360 0.12402
22: 0.042286 -0.035742 0.12031
23: 0.037825 -0.041749 0.11740
24: 0.033873 -0.041524 0.10927
25: 0.030366 -0.046405 0.10714
26: 0.027248 -0.051060 0.10556
27: 0.024474 -0.055515 0.10446
28: 0.022001 -0.059799 0.10380
29: 0.019793 -0.063934 0.10352
30: 0.017821 -0.053221 0.08886
31: 0.016058 -0.056536 0.08865
32: 0.014478 -0.059796 0.08875
33: 0.013062 -0.063006 0.08913
34: 0.011792 -0.066174 0.08976
35: 0.010651 -0.069305 0.09061
36: 0.009626 -0.072408 0.09166
37: 0.008703 -0.075491 0.09290
38: 0.007873 -0.078561 0.09431
39: 0.007125 -0.081626 0.09588
40: 0.006451 -0.084693 0.09759
41: 0.005842 -0.087768 0.09945
42: 0.005293 -0.090860 0.10145
43: 0.004797 -0.093973 0.10357
44: 0.004349 -0.097114 0.10581
45: 0.003943 -0.100289 0.10818
46: 0.003577 -0.103503 0.11066
47: 0.003245 -0.106761 0.11325
48: 0.002944 -0.110069 0.11596
49: 0.002672 -0.113431 0.11877
50: 0.002425 -0.024419 0.02927
psi_transformed lower_transformed upper_transformed