\( \DeclareMathOperator{\expit}{expit} \DeclareMathOperator{\logit}{logit} \DeclareMathOperator*{\argmin}{\arg\!\min} \newcommand{\indep}{\perp\!\!\!\perp} \newcommand{\coloneqq}{\mathrel{=}} \newcommand{\R}{\mathbb{R}} \newcommand{\E}{\mathbb{E}} \newcommand{\M}{\mathcal{M}} \newcommand{\P}{\mathbb{P}} \newcommand{\I}{\mathbb{I}} \newcommand{\1}{\mathbbm{1}} \)

12  사건 시간 결과에 대한 1단계 TMLE

아래 자료에 기반해 작성되었습니다.

Note학습 목표
  1. 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 데이터 로드

library(tmle3)
library(sl3)
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     0

vet_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_spectransform_data 함수를 호출하여 원본 데이터를 필요한 롱 포맷(long format)으로 변환할 것입니다. node_listW(공변량), 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_list

12.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_methodl2로 설정하면 로지스틱 릿지 회귀(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