-
Notifications
You must be signed in to change notification settings - Fork 8
Description
Hello,
I'm trying to conduct an intent-to-treat analysis and am having difficulty fitting the treatment propensity score using only t == 0 (baseline) and then using that estimated baseline treatment propensity across all time points with time-varying censoring.
It looks like when I stratify and only calculate it on t == 0, the treatment propensity score for all remaining time points (1 to 170) may be set to 1 by default? Any recs or hints on how to apply the t = 0 propensity score to all future time points? Censoring on the other hand I do want to be estimated at each time point (or in a pooled manner). Also just fyi at t == 0, 8.7% of the sample is treated.
This is using scrambled data from Romain and attempting to replicate Marcus, J. L., Neugebauer, R. S., Leyden, W. A., Chao, C. R., Xu, L., Quesenberry Jr, C. P., ... & Silverberg, M. J. (2016). Use of abacavir and risk of cardiovascular disease among HIV-infected individuals. JAIDS Journal of Acquired Immune Deficiency Syndromes, 71(4), 413-419.
Here is my rough code:
vars = list(
id = "ID",
time = "intnum",
treatment = "exposure",
censoring = "censor",
outcome = "outcome",
covars_time_varying =
c("cd4", "I.cd4", "vl", "I.vl", "egfr.low", "I.egfr.low", "diabetes", "htn.meds",
"llt.meds")
# covars_baseline will be defined after factors_to_indicators conversion.
)
odata =
importData(dt,
ID = vars$id,
t = vars$time,
covars = c(vars$covars_baseline, vars$covars_time_varying),
CENS = vars$censoring,
TRT = vars$treatment,
OUTCOME = vars$outcome)
# Try simpler propensity score specification to get a better distribution.
(gform_TRT = paste(vars$treatment, "~", paste(c("eversmoke", "everdrug", "sex_m", "art.naive"), collapse = " + ")))
# For ITT parameter only estimate treatment propensity at baseline.
# (uses rlang::list2 and !! so that we can substitute the treatment variable into the list name)
(stratify_TRT = list2(!!vars$treatment := paste0(vars$time, " == 0L")))
(gform_CENS = paste(vars$censoring, "~", paste(c(vars$covariates), collapse = " + ")))
odata = fitPropensity(odata,
gform_TRT = gform_TRT,
gform_CENS = gform_CENS,
stratify_TRT = stratify_TRT)
# Excessive right skewing: 1st quartile to max are all 1.0
# Min is 6.7%.
# Perhaps because we need to examine only t = 0?
summary(odata$g_preds$g0.A)
qplot(odata$g_preds$g0.A)Thank you and happy to provide any more context if it would be helpful. Sorry if this is an easy fix.