We illustrate the general workflow of the CMAverse package by a quick example. The general workflow is:

  1. Plot the DAG of causal relationships using cmdag.

  2. Estimate causal effects and make inferences using cmest.

  3. Conduct sensitivity analysis for unmeasured confounding and measurement error using cmsens.

Firstly, let’s load the package.

Next, we simulate some data and plot the DAG. The simulated dataset contains a binary exposure, a binary mediator, a continuous mediator, a continuous outcome and two baseline confounders.

set.seed(1)
n <- 100
C1 <- rnorm(n, mean = 1, sd = 1)
C2 <- rbinom(n, 1, 0.6)
pa <- exp(0.2 - 0.5*C1 + 0.1*C2)/(1 + exp(0.2 - 0.5*C1 + 0.1*C2))
A <- rbinom(n, 1, pa)
pm <- exp(1 + 0.5*A - 1.5*C1 + 0.5*C2)/ (1 + exp(1 + 0.5*A - 1.5*C1 + 0.5*C2))
M1 <- rbinom(n, 1, pm)
M2 <- rnorm(n, 2 + 0.8*A - M1 + 0.5*C1 + 2*C2, 1)
Y <- rnorm(n, mean = 0.5 + 0.4*A + 0.5*M1 + 0.6*M2 + 0.3*A*M1 + 0.2*A*M2 - 0.3*C1 + 2*C2, sd = 1)
data <- data.frame(A, M1, M2, Y, C1, C2)

The DAG can be plotted using cmdag.

cmdag(outcome = "Y", exposure = "A", mediator = c("M1", "M2"), 
      basec = c("C1", "C2"), postc = NULL, node = FALSE, text_col = "black")

Then, we estimate causal effects using cmest. We use the regression-based approach for illustration. The reference values for the exposure are set to be 0 and 1. The reference values for the two mediators are set to be 1.

est <- cmest(data = data, model = "rb", outcome = "Y", exposure = "A",
                mediator = c("M1", "M2"), basec = c("C1", "C2"), EMint = TRUE,
                mreg = list("logistic", "linear"), yreg = "linear",
                astar = 0, a = 1, mval = list(1, 1),
                estimation = "imputation", inference = "bootstrap", nboot = 20)

Summarize and plot the results:

summary(est)
## Causal Mediation Analysis
## 
## # Outcome regression:
## 
## Call:
## glm(formula = Y ~ A + M1 + M2 + A * M1 + A * M2 + C1 + C2, family = gaussian(), 
##     data = getCall(x$reg.output$yreg)$data, weights = getCall(x$reg.output$yreg)$weights)
## 
## Deviance Residuals: 
##      Min        1Q    Median        3Q       Max  
## -2.47763  -0.59177   0.03214   0.66470   1.92837  
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -0.429317   0.446678  -0.961   0.3390    
## A            1.305199   0.751816   1.736   0.0859 .  
## M1           0.762169   0.310811   2.452   0.0161 *  
## M2           0.691868   0.132038   5.240 1.01e-06 ***
## C1          -0.197350   0.136885  -1.442   0.1528    
## C2           2.389790   0.355404   6.724 1.46e-09 ***
## A:M1         0.127853   0.466496   0.274   0.7846    
## A:M2        -0.001608   0.151163  -0.011   0.9915    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for gaussian family taken to be 1.100923)
## 
##     Null deviance: 571.51  on 99  degrees of freedom
## Residual deviance: 101.28  on 92  degrees of freedom
## AIC: 303.06
## 
## Number of Fisher Scoring iterations: 2
## 
## 
## # Mediator regressions: 
## 
## Call:
## glm(formula = M1 ~ A + C1 + C2, family = binomial(), data = getCall(x$reg.output$mreg[[1L]])$data, 
##     weights = getCall(x$reg.output$mreg[[1L]])$weights)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -1.9623  -0.9462  -0.4322   0.9679   2.2586  
## 
## Coefficients:
##              Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  0.003446   0.547959   0.006 0.994982    
## A            0.828694   0.456732   1.814 0.069616 .  
## C1          -0.984454   0.292880  -3.361 0.000776 ***
## C2           0.892199   0.511832   1.743 0.081308 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 138.47  on 99  degrees of freedom
## Residual deviance: 115.67  on 96  degrees of freedom
## AIC: 123.67
## 
## Number of Fisher Scoring iterations: 3
## 
## 
## 
## Call:
## glm(formula = M2 ~ A + C1 + C2, family = gaussian(), data = getCall(x$reg.output$mreg[[2L]])$data, 
##     weights = getCall(x$reg.output$mreg[[2L]])$weights)
## 
## Deviance Residuals: 
##      Min        1Q    Median        3Q       Max  
## -2.60482  -0.60844   0.02378   0.58801   2.59561  
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   1.6403     0.2564   6.397 5.75e-09 ***
## A             0.2901     0.2170   1.337    0.184    
## C1            0.6208     0.1189   5.219 1.04e-06 ***
## C2            2.0833     0.2366   8.806 5.44e-14 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for gaussian family taken to be 1.110528)
## 
##     Null deviance: 225.08  on 99  degrees of freedom
## Residual deviance: 106.61  on 96  degrees of freedom
## AIC: 300.19
## 
## Number of Fisher Scoring iterations: 2
## 
## 
## # Effect decomposition on the mean difference scale via the regression-based approach
##  
## Direct counterfactual imputation estimation with 
##  bootstrap standard errors, percentile confidence intervals and p-values 
##  
##               Estimate Std.error   95% CIL 95% CIU  P.val    
## cde           1.431445  0.406563  0.791552   2.177 <2e-16 ***
## pnde          1.345009  0.210568  1.034657   1.751 <2e-16 ***
## tnde          1.363720  0.222721  1.001818   1.727 <2e-16 ***
## pnie          0.315062  0.175113  0.012484   0.526    0.1 .  
## tnie          0.333773  0.150220  0.011253   0.510 <2e-16 ***
## te            1.678782  0.282291  1.201192   2.157 <2e-16 ***
## intref       -0.086436  0.340713 -0.716350   0.427    0.7    
## intmed        0.018712  0.094136 -0.148749   0.177    1.0    
## cde(prop)     0.852669  0.204465  0.517111   1.231 <2e-16 ***
## intref(prop) -0.051487  0.223188 -0.496311   0.279    0.7    
## intmed(prop)  0.011146  0.054510 -0.083948   0.103    1.0    
## pnie(prop)    0.187673  0.099768  0.009682   0.317    0.1 .  
## pm            0.198819  0.084045  0.008982   0.292 <2e-16 ***
## int          -0.040341  0.234302 -0.528828   0.273    0.7    
## pe            0.147331  0.204465 -0.230814   0.483    0.6    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (cde: controlled direct effect; pnde: pure natural direct effect; tnde: total natural direct effect; pnie: pure natural indirect effect; tnie: total natural indirect effect; te: total effect; intref: reference interaction; intmed: mediated interaction; cde(prop): proportion cde; intref(prop): proportion intref; intmed(prop): proportion intmed; pnie(prop): proportion pnie; pm: overall proportion mediated; int: overall proportion attributable to interaction; pe: overall proportion eliminated)
## 
## Relevant variable values: 
## $a
## [1] 1
## 
## $astar
## [1] 0
## 
## $mval
## $mval[[1]]
## [1] 1
## 
## $mval[[2]]
## [1] 1
ggcmest(est) +
  ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 30, vjust = 0.8))

Lastly, we conduct sensitivity analysis for the results. Sensitivity analysis for unmeasured confounding:

cmsens(object = est, sens = "uc")
## Sensitivity Analysis For Unmeasured Confounding 
## 
## Evalues on the risk or rate ratio scale: 
##         estRR   lowerRR  upperRR Evalue.estRR Evalue.lowerRR Evalue.upperRR
## cde  1.719704 1.2724617 2.324143     2.832214       1.861272             NA
## pnde 1.664318 1.4239257 1.945293     2.715810       2.200868             NA
## tnde 1.676154 1.4211994 1.976847     2.740738       2.194897             NA
## pnie 1.126739 0.9896507 1.282818     1.504631       1.000000             NA
## tnie 1.134753 1.0152410 1.268333     1.525791       1.139632             NA
## te   1.888589 1.5321886 2.327891     3.184035       2.435191             NA

Assume that \(C_1\) was measured with error. Sensitivity analysis for measurement error using regression calibration with a set of assumed error standard deviations 0.1, 0.2 and 0.3:

me1 <- cmsens(object = est, sens = "me", MEmethod = "rc", 
              MEvariable = "C1", MEvartype = "con", MEerror = c(0.1, 0.2, 0.3))

Summarize and plot the results:

summary(me1)
## Sensitivity Analysis For Measurement Error 
##  
## The variable measured with error: C1
## Type of the variable measured with error: continuous
## 
## # Measurement error 1: 
## [1] 0.1
## 
## ## Error-corrected regressions for measurement error 1: 
## 
## ### Outcome regression:
## Call:
## rcreg(reg = getCall(x$sens[[1L]]$reg.output$yreg)$reg, formula = Y ~ 
##     A + M1 + M2 + A * M1 + A * M2 + C1 + C2, data = getCall(x$sens[[1L]]$reg.output$yreg)$data, 
##     MEvariable = "C1", MEerror = 0.1, variance = TRUE, nboot = 400, 
##     weights = getCall(x$sens[[1L]]$reg.output$yreg)$weights)
## 
## Naive coefficient estimates: 
##  (Intercept)            A           M1           M2           C1           C2 
## -0.429317055  1.305199111  0.762169424  0.691868043 -0.197349688  2.389790272 
##         A:M1         A:M2 
##  0.127853354 -0.001607689 
## 
## Naive var-cov estimates: 
##             (Intercept)            A           M1           M2           C1
## (Intercept)  0.19952129 -0.186177297 -0.071800151 -0.042143887 -0.012473494
## A           -0.18617730  0.565227608  0.061763824  0.035566831  0.008550886
## M1          -0.07180015  0.061763824  0.096603550  0.011127995  0.008367323
## M2          -0.04214389  0.035566831  0.011127995  0.017433949 -0.005541985
## C1          -0.01247349  0.008550886  0.008367323 -0.005541985  0.018737581
## C2           0.03202116 -0.002076496 -0.025485517 -0.031937394  0.011413789
## A:M1         0.05250394 -0.194186113 -0.081844376  0.001218548 -0.006350845
## A:M2         0.03868322 -0.102112096 -0.008061219 -0.010381316 -0.000334026
##                       C2         A:M1         A:M2
## (Intercept)  0.032021156  0.052503937  0.038683218
## A           -0.002076496 -0.194186113 -0.102112096
## M1          -0.025485517 -0.081844376 -0.008061219
## M2          -0.031937394  0.001218548 -0.010381316
## C1           0.011413789 -0.006350845 -0.000334026
## C2           0.126311866 -0.027375016  0.006147880
## A:M1        -0.027375016  0.217618968  0.019236723
## A:M2         0.006147880  0.019236723  0.022850334
## 
## Variable measured with error:
## C1
## Measurement error:
## 0.1
## Error-corrected results:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -0.427276   0.491050  -0.870   0.3865    
## A            1.304514   0.698672   1.867   0.0651 .  
## M1           0.761089   0.367873   2.069   0.0414 *  
## M2           0.692841   0.138823   4.991 2.83e-06 ***
## C1          -0.200697   0.125629  -1.598   0.1136    
## C2           2.387891   0.403462   5.919 5.52e-08 ***
## A:M1         0.127853   0.419520   0.305   0.7612    
## A:M2        -0.001608   0.146484  -0.011   0.9913    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## ### Mediator regressions: 
## Call:
## rcreg(reg = getCall(x$sens[[1L]]$reg.output$mreg[[1L]])$reg, 
##     formula = M1 ~ A + C1 + C2, data = getCall(x$sens[[1L]]$reg.output$mreg[[1L]])$data, 
##     MEvariable = "C1", MEerror = 0.1, variance = TRUE, nboot = 400, 
##     weights = getCall(x$sens[[1L]]$reg.output$mreg[[1L]])$weights)
## 
## Naive coefficient estimates: 
##  (Intercept)            A           C1           C2 
##  0.003446339  0.828694328 -0.984453987  0.892199087 
## 
## Naive var-cov estimates: 
##             (Intercept)           A          C1          C2
## (Intercept)  0.30025921 -0.07438249 -0.08381839 -0.17194314
## A           -0.07438249  0.20860406 -0.00266003 -0.01458923
## C1          -0.08381839 -0.00266003  0.08577848 -0.01275232
## C2          -0.17194314 -0.01458923 -0.01275232  0.26197192
## 
## Variable measured with error:
## C1
## Measurement error:
## 0.1
## Error-corrected results:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept)  0.01887    0.59405   0.032   0.9747  
## A            0.82577    0.47531   1.737   0.0855 .
## C1          -0.99703    0.38187  -2.611   0.0105 *
## C2           0.89185    0.53795   1.658   0.1006  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Call:
## rcreg(reg = getCall(x$sens[[1L]]$reg.output$mreg[[2L]])$reg, 
##     formula = M2 ~ A + C1 + C2, data = getCall(x$sens[[1L]]$reg.output$mreg[[2L]])$data, 
##     MEvariable = "C1", MEerror = 0.1, variance = TRUE, nboot = 400, 
##     weights = getCall(x$sens[[1L]]$reg.output$mreg[[2L]])$weights)
## 
## Naive coefficient estimates: 
## (Intercept)           A          C1          C2 
##   1.6402566   0.2901364   0.6208107   2.0833115 
## 
## Naive var-cov estimates: 
##             (Intercept)            A            C1            C2
## (Intercept)  0.06573913 -0.018924346 -0.0173562931 -0.0381103530
## A           -0.01892435  0.047073002  0.0032931500 -0.0062472874
## C1          -0.01735629  0.003293150  0.0141472682  0.0003964488
## C2          -0.03811035 -0.006247287  0.0003964488  0.0559647177
## 
## Variable measured with error:
## C1
## Measurement error:
## 0.2
## Error-corrected results:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   1.5998     0.2463   6.494 3.68e-09 ***
## A             0.2978     0.2096   1.421    0.159    
## C1            0.6538     0.1424   4.591 1.34e-05 ***
## C2            2.0842     0.1979  10.531  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## ## Error-corrected causal effects on the mean difference scale for measurement error 1: 
##              Estimate Std.error  95% CIL 95% CIU  P.val    
## cde           1.43076   0.48404  0.50383   2.171 <2e-16 ***
## pnde          1.34817   0.20632  1.05104   1.791 <2e-16 ***
## tnde          1.37327   0.17717  1.08960   1.675 <2e-16 ***
## pnie          0.35452   0.18379 -0.01758   0.564    0.1 .  
## tnie          0.37962   0.19266 -0.10602   0.565    0.2    
## te            1.72779   0.24969  1.17260   1.972 <2e-16 ***
## intref       -0.08259   0.43750 -0.63768   0.762    0.9    
## intmed        0.02510   0.12151 -0.20516   0.206    0.8    
## cde(prop)     0.82809   0.24952  0.32071   1.183 <2e-16 ***
## intref(prop) -0.04780   0.25965 -0.33667   0.481    0.9    
## intmed(prop)  0.01453   0.07225 -0.12151   0.133    0.8    
## pnie(prop)    0.20518   0.09714 -0.02255   0.294    0.1 .  
## pm            0.21971   0.10895 -0.08306   0.297    0.2    
## int          -0.03327   0.27433 -0.35268   0.581    0.9    
## pe            0.17191   0.24952 -0.18337   0.679    0.5    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## ----------------------------------------------------------------
## 
## # Measurement error 2: 
## [1] 0.2
## 
## ## Error-corrected regressions for measurement error 2: 
## 
## ### Outcome regression:
## Call:
## rcreg(reg = getCall(x$sens[[2L]]$reg.output$yreg)$reg, formula = Y ~ 
##     A + M1 + M2 + A * M1 + A * M2 + C1 + C2, data = getCall(x$sens[[2L]]$reg.output$yreg)$data, 
##     MEvariable = "C1", MEerror = 0.2, variance = TRUE, nboot = 400, 
##     weights = getCall(x$sens[[2L]]$reg.output$yreg)$weights)
## 
## Naive coefficient estimates: 
##  (Intercept)            A           M1           M2           C1           C2 
## -0.429317055  1.305199111  0.762169424  0.691868043 -0.197349688  2.389790272 
##         A:M1         A:M2 
##  0.127853354 -0.001607689 
## 
## Naive var-cov estimates: 
##             (Intercept)            A           M1           M2           C1
## (Intercept)  0.19952129 -0.186177297 -0.071800151 -0.042143887 -0.012473494
## A           -0.18617730  0.565227608  0.061763824  0.035566831  0.008550886
## M1          -0.07180015  0.061763824  0.096603550  0.011127995  0.008367323
## M2          -0.04214389  0.035566831  0.011127995  0.017433949 -0.005541985
## C1          -0.01247349  0.008550886  0.008367323 -0.005541985  0.018737581
## C2           0.03202116 -0.002076496 -0.025485517 -0.031937394  0.011413789
## A:M1         0.05250394 -0.194186113 -0.081844376  0.001218548 -0.006350845
## A:M2         0.03868322 -0.102112096 -0.008061219 -0.010381316 -0.000334026
##                       C2         A:M1         A:M2
## (Intercept)  0.032021156  0.052503937  0.038683218
## A           -0.002076496 -0.194186113 -0.102112096
## M1          -0.025485517 -0.081844376 -0.008061219
## M2          -0.031937394  0.001218548 -0.010381316
## C1           0.011413789 -0.006350845 -0.000334026
## C2           0.126311866 -0.027375016  0.006147880
## A:M1        -0.027375016  0.217618968  0.019236723
## A:M2         0.006147880  0.019236723  0.022850334
## 
## Variable measured with error:
## C1
## Measurement error:
## 0.2
## Error-corrected results:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -0.420717   0.445340  -0.945   0.3473    
## A            1.302311   0.686413   1.897   0.0609 .  
## M1           0.757615   0.336763   2.250   0.0269 *  
## M2           0.695971   0.141661   4.913 3.89e-06 ***
## C1          -0.211459   0.131371  -1.610   0.1109    
## C2           2.381786   0.407953   5.838 7.85e-08 ***
## A:M1         0.127853   0.416065   0.307   0.7593    
## A:M2        -0.001608   0.147519  -0.011   0.9913    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## ### Mediator regressions: 
## Call:
## rcreg(reg = getCall(x$sens[[2L]]$reg.output$mreg[[1L]])$reg, 
##     formula = M1 ~ A + C1 + C2, data = getCall(x$sens[[2L]]$reg.output$mreg[[1L]])$data, 
##     MEvariable = "C1", MEerror = 0.2, variance = TRUE, nboot = 400, 
##     weights = getCall(x$sens[[2L]]$reg.output$mreg[[1L]])$weights)
## 
## Naive coefficient estimates: 
##  (Intercept)            A           C1           C2 
##  0.003446339  0.828694328 -0.984453987  0.892199087 
## 
## Naive var-cov estimates: 
##             (Intercept)           A          C1          C2
## (Intercept)  0.30025921 -0.07438249 -0.08381839 -0.17194314
## A           -0.07438249  0.20860406 -0.00266003 -0.01458923
## C1          -0.08381839 -0.00266003  0.08577848 -0.01275232
## C2          -0.17194314 -0.01458923 -0.01275232  0.26197192
## 
## Variable measured with error:
## C1
## Measurement error:
## 0.1
## Error-corrected results:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept)  0.01887    0.59405   0.032   0.9747  
## A            0.82577    0.47531   1.737   0.0855 .
## C1          -0.99703    0.38187  -2.611   0.0105 *
## C2           0.89185    0.53795   1.658   0.1006  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Call:
## rcreg(reg = getCall(x$sens[[2L]]$reg.output$mreg[[2L]])$reg, 
##     formula = M2 ~ A + C1 + C2, data = getCall(x$sens[[2L]]$reg.output$mreg[[2L]])$data, 
##     MEvariable = "C1", MEerror = 0.2, variance = TRUE, nboot = 400, 
##     weights = getCall(x$sens[[2L]]$reg.output$mreg[[2L]])$weights)
## 
## Naive coefficient estimates: 
## (Intercept)           A          C1          C2 
##   1.6402566   0.2901364   0.6208107   2.0833115 
## 
## Naive var-cov estimates: 
##             (Intercept)            A            C1            C2
## (Intercept)  0.06573913 -0.018924346 -0.0173562931 -0.0381103530
## A           -0.01892435  0.047073002  0.0032931500 -0.0062472874
## C1          -0.01735629  0.003293150  0.0141472682  0.0003964488
## C2          -0.03811035 -0.006247287  0.0003964488  0.0559647177
## 
## Variable measured with error:
## C1
## Measurement error:
## 0.2
## Error-corrected results:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   1.5998     0.2463   6.494 3.68e-09 ***
## A             0.2978     0.2096   1.421    0.159    
## C1            0.6538     0.1424   4.591 1.34e-05 ***
## C2            2.0842     0.1979  10.531  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## ## Error-corrected causal effects on the mean difference scale for measurement error 2: 
##              Estimate Std.error  95% CIL 95% CIU  P.val    
## cde           1.42856   0.44643  0.87142   2.265 <2e-16 ***
## pnde          1.34820   0.29883  1.02428   2.007 <2e-16 ***
## tnde          1.38608   0.23999  1.10216   1.852 <2e-16 ***
## pnie          0.43455   0.22837 -0.04455   0.762    0.2    
## tnie          0.47243   0.22519 -0.02189   0.785    0.1 .  
## te            1.82063   0.28524  1.29467   2.287 <2e-16 ***
## intref       -0.08036   0.28911 -0.64895   0.353    0.8    
## intmed        0.03788   0.11409 -0.25826   0.135    0.9    
## cde(prop)     0.78465   0.20642  0.53497   1.197 <2e-16 ***
## intref(prop) -0.04414   0.17446 -0.36559   0.241    0.8    
## intmed(prop)  0.02080   0.06157 -0.11798   0.085    0.9    
## pnie(prop)    0.23868   0.11705 -0.03051   0.404    0.2    
## pm            0.25949   0.12229 -0.01219   0.434    0.1 .  
## int          -0.02333   0.17994 -0.31283   0.241    0.6    
## pe            0.21535   0.20642 -0.19714   0.465    0.5    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## ----------------------------------------------------------------
## 
## # Measurement error 3: 
## [1] 0.3
## 
## ## Error-corrected regressions for measurement error 3: 
## 
## ### Outcome regression:
## Call:
## rcreg(reg = getCall(x$sens[[3L]]$reg.output$yreg)$reg, formula = Y ~ 
##     A + M1 + M2 + A * M1 + A * M2 + C1 + C2, data = getCall(x$sens[[3L]]$reg.output$yreg)$data, 
##     MEvariable = "C1", MEerror = 0.3, variance = TRUE, nboot = 400, 
##     weights = getCall(x$sens[[3L]]$reg.output$yreg)$weights)
## 
## Naive coefficient estimates: 
##  (Intercept)            A           M1           M2           C1           C2 
## -0.429317055  1.305199111  0.762169424  0.691868043 -0.197349688  2.389790272 
##         A:M1         A:M2 
##  0.127853354 -0.001607689 
## 
## Naive var-cov estimates: 
##             (Intercept)            A           M1           M2           C1
## (Intercept)  0.19952129 -0.186177297 -0.071800151 -0.042143887 -0.012473494
## A           -0.18617730  0.565227608  0.061763824  0.035566831  0.008550886
## M1          -0.07180015  0.061763824  0.096603550  0.011127995  0.008367323
## M2          -0.04214389  0.035566831  0.011127995  0.017433949 -0.005541985
## C1          -0.01247349  0.008550886  0.008367323 -0.005541985  0.018737581
## C2           0.03202116 -0.002076496 -0.025485517 -0.031937394  0.011413789
## A:M1         0.05250394 -0.194186113 -0.081844376  0.001218548 -0.006350845
## A:M2         0.03868322 -0.102112096 -0.008061219 -0.010381316 -0.000334026
##                       C2         A:M1         A:M2
## (Intercept)  0.032021156  0.052503937  0.038683218
## A           -0.002076496 -0.194186113 -0.102112096
## M1          -0.025485517 -0.081844376 -0.008061219
## M2          -0.031937394  0.001218548 -0.010381316
## C1           0.011413789 -0.006350845 -0.000334026
## C2           0.126311866 -0.027375016  0.006147880
## A:M1        -0.027375016  0.217618968  0.019236723
## A:M2         0.006147880  0.019236723  0.022850334
## 
## Variable measured with error:
## C1
## Measurement error:
## 0.3
## Error-corrected results:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -0.408067   0.460020  -0.887   0.3774    
## A            1.298063   0.763918   1.699   0.0927 .  
## M1           0.750917   0.360103   2.085   0.0398 *  
## M2           0.702005   0.144481   4.859 4.83e-06 ***
## C1          -0.232211   0.154111  -1.507   0.1353    
## C2           2.370014   0.389731   6.081 2.69e-08 ***
## A:M1         0.127853   0.422092   0.303   0.7626    
## A:M2        -0.001608   0.156159  -0.010   0.9918    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## ### Mediator regressions: 
## Call:
## rcreg(reg = getCall(x$sens[[3L]]$reg.output$mreg[[1L]])$reg, 
##     formula = M1 ~ A + C1 + C2, data = getCall(x$sens[[3L]]$reg.output$mreg[[1L]])$data, 
##     MEvariable = "C1", MEerror = 0.3, variance = TRUE, nboot = 400, 
##     weights = getCall(x$sens[[3L]]$reg.output$mreg[[1L]])$weights)
## 
## Naive coefficient estimates: 
##  (Intercept)            A           C1           C2 
##  0.003446339  0.828694328 -0.984453987  0.892199087 
## 
## Naive var-cov estimates: 
##             (Intercept)           A          C1          C2
## (Intercept)  0.30025921 -0.07438249 -0.08381839 -0.17194314
## A           -0.07438249  0.20860406 -0.00266003 -0.01458923
## C1          -0.08381839 -0.00266003  0.08577848 -0.01275232
## C2          -0.17194314 -0.01458923 -0.01275232  0.26197192
## 
## Variable measured with error:
## C1
## Measurement error:
## 0.1
## Error-corrected results:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept)  0.01887    0.59405   0.032   0.9747  
## A            0.82577    0.47531   1.737   0.0855 .
## C1          -0.99703    0.38187  -2.611   0.0105 *
## C2           0.89185    0.53795   1.658   0.1006  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Call:
## rcreg(reg = getCall(x$sens[[3L]]$reg.output$mreg[[2L]])$reg, 
##     formula = M2 ~ A + C1 + C2, data = getCall(x$sens[[3L]]$reg.output$mreg[[2L]])$data, 
##     MEvariable = "C1", MEerror = 0.3, variance = TRUE, nboot = 400, 
##     weights = getCall(x$sens[[3L]]$reg.output$mreg[[2L]])$weights)
## 
## Naive coefficient estimates: 
## (Intercept)           A          C1          C2 
##   1.6402566   0.2901364   0.6208107   2.0833115 
## 
## Naive var-cov estimates: 
##             (Intercept)            A            C1            C2
## (Intercept)  0.06573913 -0.018924346 -0.0173562931 -0.0381103530
## A           -0.01892435  0.047073002  0.0032931500 -0.0062472874
## C1          -0.01735629  0.003293150  0.0141472682  0.0003964488
## C2          -0.03811035 -0.006247287  0.0003964488  0.0559647177
## 
## Variable measured with error:
## C1
## Measurement error:
## 0.2
## Error-corrected results:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   1.5998     0.2463   6.494 3.68e-09 ***
## A             0.2978     0.2096   1.421    0.159    
## C1            0.6538     0.1424   4.591 1.34e-05 ***
## C2            2.0842     0.1979  10.531  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## ## Error-corrected causal effects on the mean difference scale for measurement error 3: 
##               Estimate Std.error   95% CIL 95% CIU  P.val    
## cde           1.424309  0.496395  0.649747   2.215 <2e-16 ***
## pnde          1.351906  0.194064  1.026094   1.698 <2e-16 ***
## tnde          1.359081  0.186556  1.043619   1.733 <2e-16 ***
## pnie          0.261721  0.178343  0.003803   0.622    0.1 .  
## tnie          0.268896  0.180014  0.010873   0.597    0.1 .  
## te            1.620802  0.271680  1.356412   2.205 <2e-16 ***
## intref       -0.072403  0.399889 -0.517447   0.696    0.9    
## intmed        0.007175  0.070969 -0.129360   0.105    1.0    
## cde(prop)     0.878768  0.218673  0.438724   1.091 <2e-16 ***
## intref(prop) -0.044671  0.241895 -0.259947   0.487    0.9    
## intmed(prop)  0.004427  0.038630 -0.068683   0.058    1.0    
## pnie(prop)    0.161476  0.088226 -0.001076   0.306    0.1 .  
## pm            0.165903  0.091571  0.003433   0.305    0.1 .  
## int          -0.040244  0.250874 -0.310818   0.468    0.9    
## pe            0.121232  0.218673 -0.091012   0.561    0.5    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## ----------------------------------------------------------------
## 
## (cde: controlled direct effect; pnde: pure natural direct effect; tnde: total natural direct effect; pnie: pure natural indirect effect; tnie: total natural indirect effect; te: total effect; intref: reference interaction; intmed: mediated interaction; cde(prop): proportion cde; intref(prop): proportion intref; intmed(prop): proportion intmed; pnie(prop): proportion pnie; pm: overall proportion mediated; int: overall proportion attributable to interaction; pe: overall proportion eliminated)
## 
## Relevant variable values: 
## $a
## [1] 1
## 
## $astar
## [1] 0
## 
## $mval
## $mval[[1]]
## [1] 1
## 
## $mval[[2]]
## [1] 1
ggcmsens(me1) +
  ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 30, vjust = 0.8))

Then, assume that the exposure was measured with error. Sensitivity analysis for measurement error using SIMEX with two assumed misclassification matrices:

me2 <- cmsens(object = est, sens = "me", MEmethod = "simex", MEvariable = "A", 
              MEvartype = "cat", B = 5,
              MEerror = list(matrix(c(0.95, 0.05, 0.05, 0.95), nrow = 2), 
                             matrix(c(0.9, 0.1, 0.1, 0.9), nrow = 2)))

Summarize and plot the results:

summary(me2)
## Sensitivity Analysis For Measurement Error 
##  
## The variable measured with error: A
## Type of the variable measured with error: categorical
## 
## # Measurement error 1: 
##      [,1] [,2]
## [1,] 0.95 0.05
## [2,] 0.05 0.95
## 
## ## Error-corrected regressions for measurement error 1: 
## 
## ### Outcome regression:
## Call:
## simexreg(reg = getCall(x$sens[[1L]]$reg.output$yreg)$reg, formula = Y ~ 
##     A + M1 + M2 + A * M1 + A * M2 + C1 + C2, data = getCall(x$sens[[1L]]$reg.output$yreg)$data, 
##     MEvariable = "A", MEvartype = "categorical", MEerror = c(0.95, 
##     0.05, 0.05, 0.95), variance = TRUE, lambda = c(0.5, 1, 1.5, 
##     2), B = 5, weights = getCall(x$sens[[1L]]$reg.output$yreg)$weights)
## 
## Naive coefficient estimates: 
##  (Intercept)            A           M1           M2           C1           C2 
## -0.429317055  1.305199111  0.762169424  0.691868043 -0.197349688  2.389790272 
##         A:M1         A:M2 
##  0.127853354 -0.001607689 
## 
## Naive var-cov estimates: 
##             (Intercept)            A           M1           M2           C1
## (Intercept)  0.19952129 -0.186177297 -0.071800151 -0.042143887 -0.012473494
## A           -0.18617730  0.565227608  0.061763824  0.035566831  0.008550886
## M1          -0.07180015  0.061763824  0.096603550  0.011127995  0.008367323
## M2          -0.04214389  0.035566831  0.011127995  0.017433949 -0.005541985
## C1          -0.01247349  0.008550886  0.008367323 -0.005541985  0.018737581
## C2           0.03202116 -0.002076496 -0.025485517 -0.031937394  0.011413789
## A:M1         0.05250394 -0.194186113 -0.081844376  0.001218548 -0.006350845
## A:M2         0.03868322 -0.102112096 -0.008061219 -0.010381316 -0.000334026
##                       C2         A:M1         A:M2
## (Intercept)  0.032021156  0.052503937  0.038683218
## A           -0.002076496 -0.194186113 -0.102112096
## M1          -0.025485517 -0.081844376 -0.008061219
## M2          -0.031937394  0.001218548 -0.010381316
## C1           0.011413789 -0.006350845 -0.000334026
## C2           0.126311866 -0.027375016  0.006147880
## A:M1        -0.027375016  0.217618968  0.019236723
## A:M2         0.006147880  0.019236723  0.022850334
## 
## Variable measured with error:
## A
## Measurement error:
##      0    1
## 0 0.95 0.05
## 1 0.05 0.95
## 
## Error-corrected results:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -0.3948     0.3482  -1.134   0.2599    
## A             1.8740         NA      NA       NA    
## M1            0.4391     0.3052   1.439   0.1536    
## M2            0.7125     0.1249   5.705 1.40e-07 ***
## C1           -0.2333     0.1151  -2.026   0.0456 *  
## C2            2.3301     0.3604   6.465 4.77e-09 ***
## A:M1          0.5823     0.5425   1.073   0.2859    
## A:M2         -0.1226         NA      NA       NA    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## ### Mediator regressions: 
## Call:
## simexreg(reg = getCall(x$sens[[1L]]$reg.output$mreg[[1L]])$reg, 
##     formula = M1 ~ A + C1 + C2, data = getCall(x$sens[[1L]]$reg.output$mreg[[1L]])$data, 
##     MEvariable = "A", MEvartype = "categorical", MEerror = c(0.95, 
##     0.05, 0.05, 0.95), variance = TRUE, lambda = c(0.5, 1, 1.5, 
##     2), B = 5, weights = getCall(x$sens[[1L]]$reg.output$mreg[[1L]])$weights)
## 
## Naive coefficient estimates: 
##  (Intercept)            A           C1           C2 
##  0.003446339  0.828694328 -0.984453987  0.892199087 
## 
## Naive var-cov estimates: 
##             (Intercept)           A          C1          C2
## (Intercept)  0.30025921 -0.07438249 -0.08381839 -0.17194314
## A           -0.07438249  0.20860406 -0.00266003 -0.01458923
## C1          -0.08381839 -0.00266003  0.08577848 -0.01275232
## C2          -0.17194314 -0.01458923 -0.01275232  0.26197192
## 
## Variable measured with error:
## A
## Measurement error:
##      0    1
## 0 0.95 0.05
## 1 0.05 0.95
## 
## Error-corrected results:
##             Estimate Std. Error t value Pr(>|t|)   
## (Intercept)   0.1671     0.5520   0.303   0.7628   
## A1            0.6279     0.5216   1.204   0.2317   
## C1           -0.9362     0.2899  -3.230   0.0017 **
## C2            0.7649     0.5134   1.490   0.1396   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Call:
## simexreg(reg = getCall(x$sens[[1L]]$reg.output$mreg[[2L]])$reg, 
##     formula = M2 ~ A + C1 + C2, data = getCall(x$sens[[1L]]$reg.output$mreg[[2L]])$data, 
##     MEvariable = "A", MEvartype = "categorical", MEerror = c(0.95, 
##     0.05, 0.05, 0.95), variance = TRUE, lambda = c(0.5, 1, 1.5, 
##     2), B = 5, weights = getCall(x$sens[[1L]]$reg.output$mreg[[2L]])$weights)
## 
## Naive coefficient estimates: 
## (Intercept)           A          C1          C2 
##   1.6402566   0.2901364   0.6208107   2.0833115 
## 
## Naive var-cov estimates: 
##             (Intercept)            A            C1            C2
## (Intercept)  0.06573913 -0.018924346 -0.0173562931 -0.0381103530
## A           -0.01892435  0.047073002  0.0032931500 -0.0062472874
## C1          -0.01735629  0.003293150  0.0141472682  0.0003964488
## C2          -0.03811035 -0.006247287  0.0003964488  0.0559647177
## 
## Variable measured with error:
## A
## Measurement error:
##     0   1
## 0 0.9 0.1
## 1 0.1 0.9
## 
## Error-corrected results:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   1.5985     0.2803   5.702 1.30e-07 ***
## A             0.3403     0.3206   1.062    0.291    
## C1            0.6341     0.1211   5.235 9.71e-07 ***
## C2            2.0890     0.2390   8.741 7.49e-14 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## ## Error-corrected causal effects on the mean difference scale for measurement error 1: 
##               Estimate Std.error   95% CIL 95% CIU  P.val    
## cde           2.333749  0.849479  0.392715   3.134 <2e-16 ***
## pnde          1.663306  0.231381  1.264425   2.003 <2e-16 ***
## tnde          1.675689  0.215797  1.364257   2.187 <2e-16 ***
## pnie          0.195664  0.229201 -0.069716   0.751    0.2    
## tnie          0.208046  0.198643  0.081955   0.788 <2e-16 ***
## te            1.871352  0.264569  1.473680   2.360 <2e-16 ***
## intref       -0.670443  0.732911 -1.404194   1.088    0.8    
## intmed        0.012383  0.197096 -0.314801   0.398    0.9    
## cde(prop)     1.247092  0.401435  0.198257   1.535 <2e-16 ***
## intref(prop) -0.358267  0.366638 -0.672400   0.549    0.8    
## intmed(prop)  0.006617  0.092040 -0.135806   0.189    0.9    
## pnie(prop)    0.104557  0.101725 -0.035695   0.322    0.2    
## pm            0.111174  0.088811  0.048394   0.365 <2e-16 ***
## int          -0.351650  0.381562 -0.557131   0.686    0.8    
## pe           -0.247092  0.401435 -0.535386   0.802    0.8    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## ----------------------------------------------------------------
## 
## # Measurement error 2: 
##      [,1] [,2]
## [1,]  0.9  0.1
## [2,]  0.1  0.9
## 
## ## Error-corrected regressions for measurement error 2: 
## 
## ### Outcome regression:
## Call:
## simexreg(reg = getCall(x$sens[[2L]]$reg.output$yreg)$reg, formula = Y ~ 
##     A + M1 + M2 + A * M1 + A * M2 + C1 + C2, data = getCall(x$sens[[2L]]$reg.output$yreg)$data, 
##     MEvariable = "A", MEvartype = "categorical", MEerror = c(0.9, 
##     0.1, 0.1, 0.9), variance = TRUE, lambda = c(0.5, 1, 1.5, 
##     2), B = 5, weights = getCall(x$sens[[2L]]$reg.output$yreg)$weights)
## 
## Naive coefficient estimates: 
##  (Intercept)            A           M1           M2           C1           C2 
## -0.429317055  1.305199111  0.762169424  0.691868043 -0.197349688  2.389790272 
##         A:M1         A:M2 
##  0.127853354 -0.001607689 
## 
## Naive var-cov estimates: 
##             (Intercept)            A           M1           M2           C1
## (Intercept)  0.19952129 -0.186177297 -0.071800151 -0.042143887 -0.012473494
## A           -0.18617730  0.565227608  0.061763824  0.035566831  0.008550886
## M1          -0.07180015  0.061763824  0.096603550  0.011127995  0.008367323
## M2          -0.04214389  0.035566831  0.011127995  0.017433949 -0.005541985
## C1          -0.01247349  0.008550886  0.008367323 -0.005541985  0.018737581
## C2           0.03202116 -0.002076496 -0.025485517 -0.031937394  0.011413789
## A:M1         0.05250394 -0.194186113 -0.081844376  0.001218548 -0.006350845
## A:M2         0.03868322 -0.102112096 -0.008061219 -0.010381316 -0.000334026
##                       C2         A:M1         A:M2
## (Intercept)  0.032021156  0.052503937  0.038683218
## A           -0.002076496 -0.194186113 -0.102112096
## M1          -0.025485517 -0.081844376 -0.008061219
## M2          -0.031937394  0.001218548 -0.010381316
## C1           0.011413789 -0.006350845 -0.000334026
## C2           0.126311866 -0.027375016  0.006147880
## A:M1        -0.027375016  0.217618968  0.019236723
## A:M2         0.006147880  0.019236723  0.022850334
## 
## Variable measured with error:
## A
## Measurement error:
##     0   1
## 0 0.9 0.1
## 1 0.1 0.9
## 
## Error-corrected results:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -0.19219    0.33891  -0.567   0.5720    
## A            1.77271    0.77710   2.281   0.0248 *  
## M1           0.55598    0.41379   1.344   0.1824    
## M2           0.51478    0.11915   4.320 3.93e-05 ***
## C1          -0.08903    0.11618  -0.766   0.4455    
## C2           2.62126    0.31421   8.342 6.96e-13 ***
## A:M1        -0.19204    0.65071  -0.295   0.7686    
## A:M2         0.09880    0.17026   0.580   0.5631    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## ### Mediator regressions: 
## Call:
## simexreg(reg = getCall(x$sens[[2L]]$reg.output$mreg[[1L]])$reg, 
##     formula = M1 ~ A + C1 + C2, data = getCall(x$sens[[2L]]$reg.output$mreg[[1L]])$data, 
##     MEvariable = "A", MEvartype = "categorical", MEerror = c(0.9, 
##     0.1, 0.1, 0.9), variance = TRUE, lambda = c(0.5, 1, 1.5, 
##     2), B = 5, weights = getCall(x$sens[[2L]]$reg.output$mreg[[1L]])$weights)
## 
## Naive coefficient estimates: 
##  (Intercept)            A           C1           C2 
##  0.003446339  0.828694328 -0.984453987  0.892199087 
## 
## Naive var-cov estimates: 
##             (Intercept)           A          C1          C2
## (Intercept)  0.30025921 -0.07438249 -0.08381839 -0.17194314
## A           -0.07438249  0.20860406 -0.00266003 -0.01458923
## C1          -0.08381839 -0.00266003  0.08577848 -0.01275232
## C2          -0.17194314 -0.01458923 -0.01275232  0.26197192
## 
## Variable measured with error:
## A
## Measurement error:
##      0    1
## 0 0.95 0.05
## 1 0.05 0.95
## 
## Error-corrected results:
##             Estimate Std. Error t value Pr(>|t|)   
## (Intercept)   0.1671     0.5520   0.303   0.7628   
## A1            0.6279     0.5216   1.204   0.2317   
## C1           -0.9362     0.2899  -3.230   0.0017 **
## C2            0.7649     0.5134   1.490   0.1396   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Call:
## simexreg(reg = getCall(x$sens[[2L]]$reg.output$mreg[[2L]])$reg, 
##     formula = M2 ~ A + C1 + C2, data = getCall(x$sens[[2L]]$reg.output$mreg[[2L]])$data, 
##     MEvariable = "A", MEvartype = "categorical", MEerror = c(0.9, 
##     0.1, 0.1, 0.9), variance = TRUE, lambda = c(0.5, 1, 1.5, 
##     2), B = 5, weights = getCall(x$sens[[2L]]$reg.output$mreg[[2L]])$weights)
## 
## Naive coefficient estimates: 
## (Intercept)           A          C1          C2 
##   1.6402566   0.2901364   0.6208107   2.0833115 
## 
## Naive var-cov estimates: 
##             (Intercept)            A            C1            C2
## (Intercept)  0.06573913 -0.018924346 -0.0173562931 -0.0381103530
## A           -0.01892435  0.047073002  0.0032931500 -0.0062472874
## C1          -0.01735629  0.003293150  0.0141472682  0.0003964488
## C2          -0.03811035 -0.006247287  0.0003964488  0.0559647177
## 
## Variable measured with error:
## A
## Measurement error:
##     0   1
## 0 0.9 0.1
## 1 0.1 0.9
## 
## Error-corrected results:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   1.5985     0.2803   5.702 1.30e-07 ***
## A             0.3403     0.3206   1.062    0.291    
## C1            0.6341     0.1211   5.235 9.71e-07 ***
## C2            2.0890     0.2390   8.741 7.49e-14 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## ## Error-corrected causal effects on the mean difference scale for measurement error 2: 
##              Estimate Std.error  95% CIL 95% CIU  P.val    
## cde           1.67947   1.08720  0.32807   3.399 <2e-16 ***
## pnde          2.07886   0.49879  1.11599   2.970 <2e-16 ***
## tnde          2.05103   0.31573  1.19583   2.285 <2e-16 ***
## pnie          0.35310   0.25901  0.01610   0.934    0.1 .  
## tnie          0.32527   0.30363 -0.45864   0.565    0.2    
## te            2.40413   0.32522  1.55424   2.596 <2e-16 ***
## intref        0.39939   0.77596 -1.24944   1.353    0.7    
## intmed       -0.02783   0.34260 -0.89762   0.274    0.9    
## cde(prop)     0.69858   0.42020  0.18019   1.376 <2e-16 ***
## intref(prop)  0.16613   0.37337 -0.52542   0.653    0.7    
## intmed(prop) -0.01158   0.14877 -0.37550   0.135    0.9    
## pnie(prop)    0.14687   0.10723  0.01021   0.384    0.1 .  
## pm            0.13530   0.14201 -0.18833   0.303    0.2    
## int           0.15455   0.47312 -0.71832   0.719    0.9    
## pe            0.30142   0.42020 -0.37555   0.820    0.7    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## ----------------------------------------------------------------
## 
## (cde: controlled direct effect; pnde: pure natural direct effect; tnde: total natural direct effect; pnie: pure natural indirect effect; tnie: total natural indirect effect; te: total effect; intref: reference interaction; intmed: mediated interaction; cde(prop): proportion cde; intref(prop): proportion intref; intmed(prop): proportion intmed; pnie(prop): proportion pnie; pm: overall proportion mediated; int: overall proportion attributable to interaction; pe: overall proportion eliminated)
## 
## Relevant variable values: 
## $a
## [1] 1
## 
## $astar
## [1] 0
## 
## $mval
## $mval[[1]]
## [1] 1
## 
## $mval[[2]]
## [1] 1
ggcmsens(me2) +
  ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 30, vjust = 0.8))