Skip to contents

This function generates a Monte Carlo method sampling distribution of the total, direct and indirect effects of the independent variable \(X\) on the dependent variable \(Y\) through mediator variables \(\mathbf{m}\) over a specific time interval \(\Delta t\) or a range of time intervals using the first-order stochastic differential equation model drift matrix \(\boldsymbol{\Phi}\).

Usage

MCMed(
  phi,
  vcov_phi_vec,
  delta_t,
  from,
  to,
  med,
  R,
  test_phi = TRUE,
  ncores = NULL,
  seed = NULL,
  tol = 0.01
)

Arguments

phi

Numeric matrix. The drift matrix (\(\boldsymbol{\Phi}\)). phi should have row and column names pertaining to the variables in the system.

vcov_phi_vec

Numeric matrix. The sampling variance-covariance matrix of \(\mathrm{vec} \left( \boldsymbol{\Phi} \right)\).

delta_t

Numeric. Time interval (\(\Delta t\)).

from

Character string. Name of the independent variable \(X\) in phi.

to

Character string. Name of the dependent variable \(Y\) in phi.

med

Character vector. Name/s of the mediator variable/s in phi.

R

Positive integer. Number of replications.

test_phi

Logical. If test_phi = TRUE, the function tests the stability of the generated drift matrix \(\boldsymbol{\Phi}\). If the test returns FALSE, the function generates a new drift matrix \(\boldsymbol{\Phi}\) and runs the test recursively until the test returns TRUE.

ncores

Positive integer. Number of cores to use. If ncores = NULL, use a single core. Consider using multiple cores when number of replications R is a large value.

seed

Random seed.

tol

Numeric. Smallest possible time interval to allow.

Value

Returns an object of class ctmedmc which is a list with the following elements:

call

Function call.

args

Function arguments.

fun

Function used ("MCMed").

output

A list with length of length(delta_t).

Each element in the output list has the following elements:

est

A vector of total, direct, and indirect effects.

thetahatstar

A matrix of Monte Carlo total, direct, and indirect effects.

Details

See Total(), Direct(), and Indirect() for more details.

Monte Carlo Method

Let \(\boldsymbol{\theta}\) be \(\mathrm{vec} \left( \boldsymbol{\Phi} \right)\), that is, the elements of the \(\boldsymbol{\Phi}\) matrix in vector form sorted column-wise. Let \(\hat{\boldsymbol{\theta}}\) be \(\mathrm{vec} \left( \hat{\boldsymbol{\Phi}} \right)\). Based on the asymptotic properties of maximum likelihood estimators, we can assume that estimators are normally distributed around the population parameters. $$ \hat{\boldsymbol{\theta}} \sim \mathcal{N} \left( \boldsymbol{\theta}, \mathbb{V} \left( \hat{\boldsymbol{\theta}} \right) \right) $$ Using this distributional assumption, a sampling distribution of \(\hat{\boldsymbol{\theta}}\) which we refer to as \(\hat{\boldsymbol{\theta}}^{\ast}\) can be generated by replacing the population parameters with sample estimates, that is, $$ \hat{\boldsymbol{\theta}}^{\ast} \sim \mathcal{N} \left( \hat{\boldsymbol{\theta}}, \hat{\mathbb{V}} \left( \hat{\boldsymbol{\theta}} \right) \right) . $$ Let \(\mathbf{g} \left( \hat{\boldsymbol{\theta}} \right)\) be a parameter that is a function of the estimated parameters. A sampling distribution of \(\mathbf{g} \left( \hat{\boldsymbol{\theta}} \right)\) , which we refer to as \(\mathbf{g} \left( \hat{\boldsymbol{\theta}}^{\ast} \right)\) , can be generated by using the simulated estimates to calculate \(\mathbf{g}\). The standard deviations of the simulated estimates are the standard errors. Percentiles corresponding to \(100 \left( 1 - \alpha \right) \%\) are the confidence intervals.

References

Bollen, K. A. (1987). Total, direct, and indirect effects in structural equation models. Sociological Methodology, 17, 37. doi:10.2307/271028

Deboeck, P. R., & Preacher, K. J. (2015). No need to be discrete: A method for continuous time mediation analysis. Structural Equation Modeling: A Multidisciplinary Journal, 23 (1), 61–75. doi:10.1080/10705511.2014.973960

Ryan, O., & Hamaker, E. L. (2021). Time to intervene: A continuous-time approach to network analysis and centrality. Psychometrika, 87 (1), 214–252. doi:10.1007/s11336-021-09767-0

Author

Ivan Jacob Agaloos Pesigan

Examples

set.seed(42)
phi <- matrix(
  data = c(
    -0.357, 0.771, -0.450,
    0.0, -0.511, 0.729,
    0, 0, -0.693
  ),
  nrow = 3
)
colnames(phi) <- rownames(phi) <- c("x", "m", "y")
vcov_phi_vec <- matrix(
  data = c(
    0.00843, 0.00040, -0.00151,
    -0.00600, -0.00033, 0.00110,
    0.00324, 0.00020, -0.00061,
    0.00040, 0.00374, 0.00016,
    -0.00022, -0.00273, -0.00016,
    0.00009, 0.00150, 0.00012,
    -0.00151, 0.00016, 0.00389,
    0.00103, -0.00007, -0.00283,
    -0.00050, 0.00000, 0.00156,
    -0.00600, -0.00022, 0.00103,
    0.00644, 0.00031, -0.00119,
    -0.00374, -0.00021, 0.00070,
    -0.00033, -0.00273, -0.00007,
    0.00031, 0.00287, 0.00013,
    -0.00014, -0.00170, -0.00012,
    0.00110, -0.00016, -0.00283,
    -0.00119, 0.00013, 0.00297,
    0.00063, -0.00004, -0.00177,
    0.00324, 0.00009, -0.00050,
    -0.00374, -0.00014, 0.00063,
    0.00495, 0.00024, -0.00093,
    0.00020, 0.00150, 0.00000,
    -0.00021, -0.00170, -0.00004,
    0.00024, 0.00214, 0.00012,
    -0.00061, 0.00012, 0.00156,
    0.00070, -0.00012, -0.00177,
    -0.00093, 0.00012, 0.00223
  ),
  nrow = 9
)

# Specific time interval ----------------------------------------------------
MCMed(
  phi = phi,
  vcov_phi_vec = vcov_phi_vec,
  delta_t = 1,
  from = "x",
  to = "y",
  med = "m",
  R = 100L # use a large value for R in actual research
)
#> 
#> Total, Direct, and Indirect Effects
#> 
#> $`1`
#>          interval     est     se   R    2.5%   97.5%
#> total           1 -0.1000 0.0349 100 -0.1728 -0.0344
#> direct          1 -0.2675 0.0454 100 -0.3531 -0.1803
#> indirect        1  0.1674 0.0189 100  0.1310  0.1991
#> 

# Range of time intervals ---------------------------------------------------
mc <- MCMed(
  phi = phi,
  vcov_phi_vec = vcov_phi_vec,
  delta_t = 1:5,
  from = "x",
  to = "y",
  med = "m",
  R = 100L # use a large value for R in actual research
)
plot(mc)




# Methods -------------------------------------------------------------------
# MCMed has a number of methods including
# print, summary, confint, and plot
print(mc)
#> 
#> Total, Direct, and Indirect Effects
#> 
#> $`1`
#>          interval     est     se   R    2.5%   97.5%
#> total           1 -0.1000 0.0283 100 -0.1523 -0.0412
#> direct          1 -0.2675 0.0379 100 -0.3410 -0.1958
#> indirect        1  0.1674 0.0181 100  0.1303  0.1973
#> 
#> $`2`
#>          interval     est     se   R    2.5%   97.5%
#> total           2  0.0799 0.0318 100  0.0173  0.1382
#> direct          2 -0.3209 0.0533 100 -0.4335 -0.2250
#> indirect        2  0.4008 0.0472 100  0.3209  0.4844
#> 
#> $`3`
#>          interval     est     se   R    2.5%   97.5%
#> total           3  0.2508 0.0341 100  0.1789  0.3160
#> direct          3 -0.2914 0.0600 100 -0.4250 -0.1953
#> indirect        3  0.5423 0.0723 100  0.4313  0.6825
#> 
#> $`4`
#>          interval     est     se   R    2.5%   97.5%
#> total           4  0.3449 0.0396 100  0.2776  0.4253
#> direct          4 -0.2374 0.0614 100 -0.3713 -0.1499
#> indirect        4  0.5823 0.0888 100  0.4543  0.7487
#> 
#> $`5`
#>          interval     est     se   R    2.5%   97.5%
#> total           5  0.3693 0.0454 100  0.3097  0.4771
#> direct          5 -0.1828 0.0592 100 -0.3156 -0.1139
#> indirect        5  0.5521 0.0964 100  0.4232  0.7533
#> 
summary(mc)
#>      effect interval        est         se   R        2.5%       97.5%
#> 1     total        1 -0.1000384 0.02828969 100 -0.15232781 -0.04123191
#> 2    direct        1 -0.2674539 0.03785126 100 -0.34098924 -0.19575030
#> 3  indirect        1  0.1674155 0.01813653 100  0.13034214  0.19730024
#> 4     total        2  0.0799008 0.03177536 100  0.01734713  0.13816481
#> 5    direct        2 -0.3209035 0.05331547 100 -0.43347383 -0.22496835
#> 6  indirect        2  0.4008043 0.04715986 100  0.32090375  0.48438931
#> 7     total        3  0.2508138 0.03411898 100  0.17891544  0.31595326
#> 8    direct        3 -0.2914426 0.06004235 100 -0.42496332 -0.19529856
#> 9  indirect        3  0.5422564 0.07226284 100  0.43134204  0.68245524
#> 10    total        4  0.3449279 0.03955381 100  0.27762014  0.42528849
#> 11   direct        4 -0.2373900 0.06142283 100 -0.37132486 -0.14987686
#> 12 indirect        4  0.5823179 0.08884600 100  0.45427525  0.74867661
#> 13    total        5  0.3692538 0.04543535 100  0.30966378  0.47707320
#> 14   direct        5 -0.1828447 0.05923691 100 -0.31560524 -0.11390776
#> 15 indirect        5  0.5520985 0.09636387 100  0.42321469  0.75325267
confint(mc, level = 0.95)
#>      effect interval       2.5 %      97.5 %
#> 1     total        1 -0.15232781 -0.04123191
#> 2    direct        1 -0.34098924 -0.19575030
#> 3  indirect        1  0.13034214  0.19730024
#> 4     total        2  0.01734713  0.13816481
#> 5    direct        2 -0.43347383 -0.22496835
#> 6  indirect        2  0.32090375  0.48438931
#> 7     total        3  0.17891544  0.31595326
#> 8    direct        3 -0.42496332 -0.19529856
#> 9  indirect        3  0.43134204  0.68245524
#> 10    total        4  0.27762014  0.42528849
#> 11   direct        4 -0.37132486 -0.14987686
#> 12 indirect        4  0.45427525  0.74867661
#> 13    total        5  0.30966378  0.47707320
#> 14   direct        5 -0.31560524 -0.11390776
#> 15 indirect        5  0.42321469  0.75325267