Causal Inference

Simulate Data

  • Assume a severity variable increases the treatment selection by an odds ratio of 1.5
  • The baseline probability of getting treatment is 0.2
  • The severity variable also increase the outcome risk by an odds ratio of 2
  • The treatment reduces the outcome risk by by an odds ratio of 0.5
  • The baseline probaiblity of outcome (death) is 0.2
Variable level Overall 0 1 p test SMD Missing
n n 2000 1507 493
severity mean (SD) 0.00 (1.01) -0.10 (0.99) 0.31 (1.00) <0.001 0.414 0.0
median [IQR] 0.01 [-0.70, 0.70] -0.10 [-0.77, 0.57] 0.31 [-0.36, 1.02] <0.001 nonnorm 0.414 0.0
median [range] 0.01 [-3.77, 3.60] -0.10 [-3.77, 3.26] 0.31 [-2.63, 3.60] <0.001 nonnorm 0.414 0.0
covar1 mean (SD) 0.03 (0.99) 0.02 (1.00) 0.04 (0.96) 0.793 0.014 0.0
median [IQR] 0.02 [-0.66, 0.66] 0.01 [-0.65, 0.65] 0.06 [-0.67, 0.67] 0.780 nonnorm 0.014 0.0
median [range] 0.02 [-4.25, 3.48] 0.01 [-4.25, 3.48] 0.06 [-3.01, 2.63] 0.780 nonnorm 0.014 0.0
covar2 mean (SD) 0.02 (1.01) 0.03 (1.00) -0.02 (1.05) 0.413 0.042 0.0
median [IQR] 0.04 [-0.66, 0.69] 0.05 [-0.64, 0.68] 0.01 [-0.72, 0.72] 0.544 nonnorm 0.042 0.0
median [range] 0.04 [-3.32, 3.31] 0.05 [-3.22, 3.31] 0.01 [-3.32, 3.18] 0.544 nonnorm 0.042 0.0
covar3 mean (SD) 0.02 (1.01) 0.05 (1.01) -0.04 (0.99) 0.096 0.087 0.0
median [IQR] 0.01 [-0.69, 0.71] 0.05 [-0.69, 0.74] -0.07 [-0.73, 0.63] 0.078 nonnorm 0.087 0.0
median [range] 0.01 [-3.17, 3.25] 0.05 [-3.17, 3.25] -0.07 [-3.16, 3.04] 0.078 nonnorm 0.087 0.0
covar_trt mean (SD) 0.02 (0.98) -0.20 (0.90) 0.68 (0.91) <0.001 0.974 0.0
median [IQR] 0.01 [-0.66, 0.64] -0.21 [-0.81, 0.40] 0.64 [0.08, 1.28] <0.001 nonnorm 0.974 0.0
median [range] 0.01 [-3.07, 3.62] -0.21 [-3.07, 3.09] 0.64 [-1.99, 3.62] <0.001 nonnorm 0.974 0.0

Propensity Score Method

Treatment Model

  trt
Predictors Odds Ratios CI p
(Intercept) 0.24 0.21 – 0.27 <0.001
severity 1.62 1.45 – 1.83 <0.001
covar1 0.99 0.88 – 1.11 0.882
covar2 0.96 0.86 – 1.07 0.446
covar3 0.90 0.81 – 1.01 0.080
covar trt 3.04 2.65 – 3.49 <0.001
Observations 2000
R2 Tjur 0.201

Distribution of Propensity Score

Multivarible Outcome Model

  outcome
Predictors Odds Ratios CI p
(Intercept) 0.30 0.26 – 0.34 <0.001
severity 1.95 1.73 – 2.20 <0.001
trt 0.54 0.40 – 0.72 <0.001
covar1 2.27 2.01 – 2.58 <0.001
covar2 1.34 1.20 – 1.50 <0.001
covar3 1.04 0.93 – 1.16 0.486
covar trt 1.02 0.90 – 1.16 0.740
Observations 2000
R2 Tjur 0.175

Propensity Score Covariate-Adjusted Multivariable Model

name ci p
severity 1.91 (1.57, 2.32) 0.0000000
trt 0.53 (0.40, 0.72) 0.0000378
covar1 2.27 (2.00, 2.58) 0.0000000
covar2 1.34 (1.20, 1.50) 0.0000003
covar3 1.04 (0.93, 1.17) 0.4612860
covar_trt 0.98 (0.68, 1.41) 0.9053998
a outcome ~ severity + trt + covar1 + covar2 + covar3 + covar_trt + pred

Optimal Match 1:1

Balance Table
Control Treatment adj.diff adj.diff.null.sd std.diff z p
severity 0.2002 0.3109 0.1107 0.0626 0.1127 1.7678 0.0771
covar1 0.0916 0.0366 -0.0550 0.0629 -0.0557 -0.8739 0.3822
covar2 -0.0417 -0.0163 0.0254 0.0654 0.0247 0.3880 0.6980
covar3 -0.0239 -0.0411 -0.0173 0.0655 -0.0168 -0.2636 0.7921
covar_trt 0.5229 0.6816 0.1586 0.0535 0.1895 2.9629 0.0030
Balance Table after 1:1 Matching
Mean (0) Mean (1) Difference Standardized Difference P-value
severity 0.2002 0.3109 0.1107 0.0626 0.0771
covar1 0.0916 0.0366 -0.0550 0.0629 0.3822
covar2 -0.0417 -0.0163 0.0254 0.0654 0.6980
covar3 -0.0239 -0.0411 -0.0173 0.0655 0.7921
covar_trt 0.5229 0.6816 0.1586 0.0535 0.0030
name ci p
severity 1.95 (1.63, 2.33) 0.0000000
trt 0.53 (0.38, 0.74) 0.0001492
covar1 2.48 (2.06, 2.99) 0.0000000
covar2 1.42 (1.21, 1.68) 0.0000205
covar3 1.11 (0.95, 1.29) 0.1901092
covar_trt 1.04 (0.85, 1.27) 0.7254583
a outcome ~ severity + trt + covar1 + covar2 + covar3 + covar_trt + s(matched_id_11, bs = “re”)

Optimal Match 1:n

Balance Table
Control Treatment adj.diff adj.diff.null.sd std.diff z p
severity -0.0998 0.3109 0.4107 0.0521 0.4150 7.8754 0.0000
covar1 0.0232 0.0366 0.0134 0.0513 0.0136 0.2620 0.7933
covar2 0.0267 -0.0163 -0.0430 0.0525 -0.0425 -0.8187 0.4130
covar3 0.0459 -0.0411 -0.0871 0.0522 -0.0865 -1.6666 0.0956
covar_trt -0.2021 0.6816 0.8836 0.0509 0.9782 17.3765 0.0000
Balance Table after 1:n Matching
Mean (0) Mean (1) Difference Standardized Difference P-value
severity -0.0998 0.3109 0.4107 0.0521 0.0000
covar1 0.0232 0.0366 0.0134 0.0513 0.7933
covar2 0.0267 -0.0163 -0.0430 0.0525 0.4130
covar3 0.0459 -0.0411 -0.0871 0.0522 0.0956
covar_trt -0.2021 0.6816 0.8836 0.0509 0.0000
name ci p
severity 1.95 (1.72, 2.20) 0.0000000
trt 0.54 (0.40, 0.72) 0.0000354
covar1 2.27 (2.00, 2.57) 0.0000000
covar2 1.34 (1.20, 1.50) 0.0000003
covar3 1.04 (0.93, 1.16) 0.4874454
covar_trt 1.02 (0.90, 1.16) 0.7411606
a outcome ~ severity + trt + covar1 + covar2 + covar3 + covar_trt + s(matched_id_1n, bs = “re”)

R sessionInfo

R version 4.2.0 (2022-04-22) Platform: x86_64-pc-linux-gnu (64-bit) Running under: Ubuntu 20.04.3 LTS

Matrix products: default BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.9.0 LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.9.0

locale: [1] LC_CTYPE=C.UTF-8 LC_NUMERIC=C LC_TIME=C.UTF-8
[4] LC_COLLATE=C.UTF-8 LC_MONETARY=C.UTF-8 LC_MESSAGES=C.UTF-8
[7] LC_PAPER=C.UTF-8 LC_NAME=C LC_ADDRESS=C
[10] LC_TELEPHONE=C LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C

attached base packages: [1] stats graphics grDevices utils datasets methods base

other attached packages: [1] grf_2.2.0 RItools_0.3-1 optmatch_0.10.4
[4] sjPlot_2.8.11 Wu_0.0.0.9000 flexdashboard_0.6.0 [7] lme4_1.1-30 Matrix_1.4-0 mgcv_1.8-38
[10] nlme_3.1-152 png_0.1-7 scales_1.2.0
[13] nnet_7.3-16 labelled_2.9.1 kableExtra_1.3.4
[16] plotly_4.10.0 gridExtra_2.3 ggplot2_3.3.6
[19] DT_0.24 tableone_0.13.2 magrittr_2.0.3
[22] lubridate_1.8.0 dplyr_1.0.9 plyr_1.8.7
[25] data.table_1.14.2 rmdformats_1.0.4 knitr_1.39

loaded via a namespace (and not attached): [1] TH.data_1.1-1 minqa_1.2.4 colorspace_2.0-3 ellipsis_0.3.2
[5] class_7.3-19 sjlabelled_1.2.0 estimability_1.4.1 parameters_0.18.2 [9] rstudioapi_0.13 proxy_0.4-27 farver_2.1.1 fansi_1.0.3
[13] mvtnorm_1.1-3 xml2_1.3.3 codetools_0.2-18 splines_4.2.0
[17] cachem_1.0.6 sjmisc_2.8.9 jsonlite_1.8.0 nloptr_2.0.3
[21] ggeffects_1.1.3 broom_1.0.0 effectsize_0.7.0.5 compiler_4.2.0
[25] httr_1.4.4 sjstats_0.18.1 emmeans_1.8.0 backports_1.4.1
[29] assertthat_0.2.1 fastmap_1.1.0 lazyeval_0.2.2 survey_4.1-1
[33] cli_3.3.0 htmltools_0.5.3 tools_4.2.0 coda_0.19-4
[37] gtable_0.3.0 glue_1.6.2 Rcpp_1.0.9 jquerylib_0.1.4
[41] vctrs_0.4.1 svglite_2.1.0 crosstalk_1.2.0 insight_0.18.2
[45] xfun_0.32 stringr_1.4.0 rvest_1.0.2 lifecycle_1.0.1
[49] klippy_0.0.0.9500 MASS_7.3-54 zoo_1.8-10 rlemon_0.2.0
[53] hms_1.1.1 sandwich_3.0-2 SparseM_1.81 yaml_2.3.5
[57] sass_0.4.2 stringi_1.7.8 highr_0.9 bayestestR_0.12.1 [61] e1071_1.7-11 boot_1.3-28 rlang_1.0.4 pkgconfig_2.0.3
[65] systemfonts_1.0.4 evaluate_0.16 lattice_0.20-45 purrr_0.3.4
[69] htmlwidgets_1.5.4 labeling_0.4.2 tidyselect_1.1.2 bookdown_0.28
[73] R6_2.5.1 generics_0.1.3 multcomp_1.4-20 DBI_1.1.3
[77] pillar_1.8.1 haven_2.5.0 withr_2.5.0 abind_1.4-5
[81] survival_3.2-13 datawizard_0.5.0 tibble_3.1.8 performance_0.9.2 [85] modelr_0.1.8 utf8_1.2.2 rmarkdown_2.14 grid_4.2.0
[89] forcats_0.5.1 svd_0.5.2 digest_0.6.29 webshot_0.5.3
[93] xtable_1.8-4 tidyr_1.2.0 munsell_0.5.0 viridisLite_0.4.0 [97] bslib_0.4.0 mitools_2.4