This is a wrapper function to provide adjusted effect estimates and relevant statistics in anchored case (i.e. there is a common comparator arm in the internal and external trial).
Usage
maic_anchored(
weights_object,
ipd,
pseudo_ipd,
trt_ipd,
trt_agd,
trt_common,
trt_var_ipd = "ARM",
trt_var_agd = "ARM",
endpoint_type = "tte",
endpoint_name = "Time to Event Endpoint",
eff_measure = c("HR", "OR", "RR", "RD"),
boot_ci_type = c("norm", "basic", "stud", "perc", "bca"),
time_scale = "months",
km_conf_type = "log-log",
binary_robust_cov_type = "HC3"
)
Arguments
- weights_object
an object returned by
estimate_weight
- ipd
a data frame that meet format requirements in 'Details', individual patient data (IPD) of internal trial
- pseudo_ipd
a data frame, pseudo IPD from digitized KM curve of external trial (for time-to-event endpoint) or from contingency table (for binary endpoint)
- trt_ipd
a string, name of the interested investigation arm in internal trial
ipd
(internal IPD)- trt_agd
a string, name of the interested investigation arm in external trial
pseudo_ipd
(pseudo IPD)- trt_common
a string, name of the common comparator in internal and external trial
- trt_var_ipd
a string, column name in
ipd
that contains the treatment assignment- trt_var_agd
a string, column name in
ipd
that contains the treatment assignment- endpoint_type
a string, one out of the following "binary", "tte" (time to event)
- endpoint_name
a string, name of time to event endpoint, to be show in the last line of title
- eff_measure
a string, "RD" (risk difference), "OR" (odds ratio), "RR" (relative risk) for a binary endpoint; "HR" for a time-to-event endpoint. By default is
NULL
, "OR" is used for binary case, otherwise "HR" is used.- boot_ci_type
a string, one of
c("norm","basic", "stud", "perc", "bca")
to select the type of bootstrap confidence interval. See boot::boot.ci for more details.- time_scale
a string, time unit of median survival time, taking a value of 'years', 'months', 'weeks' or 'days'. NOTE: it is assumed that values in TIME column of
ipd
andpseudo_ipd
is in the unit of days- km_conf_type
a string, pass to
conf.type
ofsurvfit
- binary_robust_cov_type
a string to pass to argument
type
of sandwich::vcovHC, see possible options in the documentation of that function. Default is"HC3"
Details
It is required that input ipd
and pseudo_ipd
to have the following
columns. This function is not sensitive to upper or lower case of letters in column names.
USUBJID - character, unique subject ID
ARM - character or factor, treatment indicator, column name does not have to be 'ARM'. User specify in
trt_var_ipd
andtrt_var_agd
For time-to-event analysis, the follow columns are required:
EVENT - numeric,
1
for censored/death,0
otherwiseTIME - numeric column, observation time of the
EVENT
; unit in days
For binary outcomes:
RESPONSE - numeric,
1
for event occurred,0
otherwise
Examples
# Anchored example using maic_anchored for time-to-event data
data(weighted_twt)
data(adtte_twt)
data(pseudo_ipd_twt)
result_tte <- maic_anchored(
weights_object = weighted_twt,
ipd = adtte_twt,
pseudo_ipd = pseudo_ipd_twt,
trt_var_ipd = "ARM",
trt_var_agd = "ARM",
trt_ipd = "A",
trt_agd = "B",
trt_common = "C",
endpoint_name = "Overall Survival",
endpoint_type = "tte",
eff_measure = "HR",
time_scale = "month",
km_conf_type = "log-log",
)
result_tte$inferential$report_median_surv
#> treatment type records n.max n.start events rmean
#> 1 ARM=C IPD, before matching 500 500.0000 500.0000 500.0000 2.564797
#> 2 ARM=A IPD, before matching 500 500.0000 500.0000 190.0000 8.709690
#> 3 ARM=C IPD, after matching 500 173.4208 173.4208 173.4208 2.690665
#> 4 ARM=A IPD, after matching 500 173.4208 173.4208 55.5418 10.575301
#> 5 ARM=C AgD, external 500 500.0000 500.0000 500.0000 2.455272
#> 6 ARM=B AgD, external 300 300.0000 300.0000 178.0000 4.303551
#> se(rmean) median 0.95LCL 0.95UCL
#> 1 0.11366994 1.836467 1.644765 2.045808
#> 2 0.35514766 7.587627 6.278691 10.288538
#> 3 0.20750373 1.818345 1.457222 2.352181
#> 4 0.57325902 12.166430 10.244293 NA
#> 5 0.09848888 1.851987 1.670540 2.009650
#> 6 0.33672602 2.746131 2.261125 3.320857
result_tte$inferential$report_overall_robustCI
#> Matching treatment N n.events(%) median[95% CI]
#> 2 IPD/Overall Survival ARM=A 500 190( 38.0) 7.6[6.3;10.3]
#> 1 ARM=C 500 500(100.0) 1.8[1.6; 2.0]
#> 21 weighted IPD/Overall Survival ARM=A 173.4 55.5( 32.0) 12.2[10.2; NA]
#> 11 ARM=C 173.4 173.4(100.0) 1.8[ 1.5;2.4]
#> 22 Agd/Overall Survival ARM=B 300 178( 59.3) 2.7[2.3;3.3]
#> 12 ARM=C 500 500(100.0) 1.9[1.7;2.0]
#> 7 ** adj.A vs B -- -- -- --
#> HR[95% CI] p-Value
#> 2 0.22[0.19;0.26] <0.001
#> 1
#> 21 0.16[0.11;0.24] <0.001
#> 11
#> 22 0.57[0.48;0.68] <0.001
#> 12
#> 7 0.29 [0.19; 0.44] <0.001
result_tte$inferential$report_overall_bootCI
#> Matching treatment N n.events(%) median[95% CI]
#> 2 IPD/Overall Survival ARM=A 500 190( 38.0) 7.6[6.3;10.3]
#> 1 ARM=C 500 500(100.0) 1.8[1.6; 2.0]
#> 21 weighted IPD/Overall Survival ARM=A 173.4 55.5( 32.0) 12.2[10.2; NA]
#> 11 ARM=C 173.4 173.4(100.0) 1.8[ 1.5;2.4]
#> 22 AgD/Overall Survival ARM=B 300 178( 59.3) 2.7[2.3;3.3]
#> 12 ARM=C 500 500(100.0) 1.9[1.7;2.0]
#> 7 ** adj.A vs B -- -- -- --
#> HR[95% CI] p-Value
#> 2 0.22[0.19;0.26] <0.001
#> 1
#> 21 0.16[0.11;0.24] <0.001
#> 11
#> 22 0.57[0.48;0.68] <0.001
#> 12
#> 7 0.29 [0.20; 0.43] <NA>
# Anchored example using maic_anchored for binary outcome
data(weighted_twt)
data(adrs_twt)
# Reported summary data
pseudo_adrs <- get_pseudo_ipd_binary(
binary_agd = data.frame(
ARM = c("B", "C", "B", "C"),
RESPONSE = c("YES", "YES", "NO", "NO"),
COUNT = c(280, 120, 200, 200)
),
format = "stacked"
)
# inferential result
result_binary <- maic_anchored(
weights_object = weighted_twt,
ipd = adrs_twt,
pseudo_ipd = pseudo_adrs,
trt_var_ipd = "ARM",
trt_var_agd = "ARM",
trt_ipd = "A",
trt_agd = "B",
trt_common = "C",
endpoint_name = "Binary Event",
endpoint_type = "binary",
eff_measure = "OR"
)
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Warning: non-integer #successes in a binomial glm!
#> Waiting for profiling to be done...
#> Waiting for profiling to be done...
#> Waiting for profiling to be done...
#> Waiting for profiling to be done...
result_binary$inferential$report_overall_robustCI
#> Matching treatment N n.events(%) OR[95% CI]
#> A IPD/Binary Event A 500 390(78.0) 1.70[1.28;2.26]
#> C C 500 338(67.6)
#> A1 weighted IPD/Binary Event A 500 128.8(25.8) 1.14[0.67;1.95]
#> C1 C 500 124.2(24.8)
#> B AgD/Binary Event B 480 280(58.3) 2.33[1.75;3.12]
#> C2 C 320 120(37.5)
#> 7 ** adj.A vs B -- -- -- 0.49 [0.27; 0.90]
#> p-Value
#> A <0.001
#> C
#> A1 0.624
#> C1
#> B <0.001
#> C2
#> 7 0.022
result_binary$inferential$report_overall_bootCI
#> Matching treatment N n.events(%) OR[95% CI]
#> A IPD/Binary Event A 500 390(78.0) 1.70[1.28;2.26]
#> C C 500 338(67.6)
#> A1 weighted IPD/Binary Event A 500 128.8(25.8) 1.14[0.33;0.98]
#> C1 C 500 124.2(24.8)
#> B AgD/Binary Event B 480 280(58.3) 2.33[1.75;3.12]
#> C2 C 320 120(37.5)
#> 7 ** adj.A vs B -- -- -- 0.49 [0.14; 0.42]
#> p-Value
#> A <0.001
#> C
#> A1 NA
#> C1
#> B <0.001
#> C2
#> 7 <NA>