How Can I Do Mediation Analysis With The Sem Command - Stata FAQ
How Can I Do Mediation Analysis With The Sem Command - Stata FAQ
| Stata FAQ
The sem command introduced in Stata 12 makes the analysis of mediation models much easier as long as both the dependent variable and the
mediator variable are continuous variables.
We will illustrate using the sem command with the hsbdemo dataset. The examples will not demonstrate full mediation, i.e., the effect of the
independent variable will not go from being significant to being not significant. Rather, the examples will show partial mediation in which there is a
decrease in the direct effect.
If your model contains control variables, i.e., covariates, you must include these in each of the sem equations. Thus, your sem model will look
something like this:
where DV stands for the dependent variable, IV stands for the independent variable, MV stands for the mediator variable, and CVs stand for the
covariates.
The simplest mediation model had one IV, one MV and a DV. Here is the symbolic version of the model.
In our simple mediation example the independent variable is math, the mediator variable is read and the dependent variable is science.
https://stats.oarc.ucla.edu/stata/faq/how-can-i-do-mediation-analysis-with-the-sem-command/ 1/19
10/23/23, 11:02 PM How can I do mediation analysis with the sem command? | Stata FAQ
https://stats.oarc.ucla.edu/stata/faq/how-can-i-do-mediation-analysis-with-the-sem-command/ 2/19
10/23/23, 11:02 PM How can I do mediation analysis with the sem command? | Stata FAQ
Endogenous variables
Exogenous variables
Observed: math
-------------------------------------------------------------------------------
| OIM
| Coef. Std. Err. z P>|z| [95% Conf. Interval]
--------------+----------------------------------------------------------------
Structural |
read |
math | .724807 .0579824 12.50 0.000 .6111636 .8384504
_cons | 14.07254 3.100201 4.54 0.000 7.996255 20.14882
------------+----------------------------------------------------------------
science |
read | .3654205 .0658305 5.55 0.000 .2363951 .4944459
math | .4017207 .0720457 5.58 0.000 .2605138 .5429276
_cons | 11.6155 3.031268 3.83 0.000 5.674324 17.55668
--------------+----------------------------------------------------------------
var(e.read)| 58.71925 5.871925 48.26811 71.43329
var(e.science)| 50.8938 5.08938 41.83548 61.91346
https://stats.oarc.ucla.edu/stata/faq/how-can-i-do-mediation-analysis-with-the-sem-command/ 3/19
10/23/23, 11:02 PM How can I do mediation analysis with the sem command? | Stata FAQ
-------------------------------------------------------------------------------
LR test of model vs. saturated: chi2(0) = 0.00, Prob > chi2 = .
estat teffects
Direct effects
------------------------------------------------------------------------------
https://stats.oarc.ucla.edu/stata/faq/how-can-i-do-mediation-analysis-with-the-sem-command/ 4/19
10/23/23, 11:02 PM How can I do mediation analysis with the sem command? | Stata FAQ
| OIM
| Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
Structural |
read |
math | .724807 .0579824 12.50 0.000 .6111636 .8384504
-----------+----------------------------------------------------------------
science |
read | .3654205 .0658305 5.55 0.000 .2363951 .4944459
math | .4017207 .0720457 5.58 0.000 .2605138 .5429276
------------------------------------------------------------------------------
Indirect effects
------------------------------------------------------------------------------
| OIM
| Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
Structural |
read |
math | 0 (no path)
-----------+----------------------------------------------------------------
science |
read | 0 (no path)
math | .2648593 .0522072 5.07 0.000 .1625351 .3671836
------------------------------------------------------------------------------
Total effects
------------------------------------------------------------------------------
| OIM
| Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
https://stats.oarc.ucla.edu/stata/faq/how-can-i-do-mediation-analysis-with-the-sem-command/ 5/19
10/23/23, 11:02 PM How can I do mediation analysis with the sem command? | Stata FAQ
Structural |
read |
math | .724807 .0579824 12.50 0.000 .6111636 .8384504
-----------+----------------------------------------------------------------
science |
read | .3654205 .0658305 5.55 0.000 .2363951 .4944459
math | .66658 .05799 11.49 0.000 .5529217 .7802384
------------------------------------------------------------------------------
The total effect for math, .66658, is the effect we would find if there was no mediator in our model. It is significant with a z of 11.49. The direct effect
for math is .4017207 which, while still significant (z = 5.58), is much smaller than the total effect. The indirect effect of math that passes through read is
.2648593 and is also statistically significant.
It is often easier to interpret these values by computing ratios and proportions as shown below.
We see above that the proportion of the total effect that is mediated is almost .40 which is a respectable amount. The ratio of the indirect effect to the
direct effect is about .66 or almost 2/3 the size of the direct effect. And finally, the total effect is about 1.66 times the direct effect.
If you are uncomfortable with the standard errors and confidence intervals produced directly by sem, you can obtain the bootstrapped standard
errors and confidence intervals in two ways First by using the vce(boostrap) option after your sem command Or second by writing a small
https://stats.oarc.ucla.edu/stata/faq/how-can-i-do-mediation-analysis-with-the-sem-command/ 6/19
10/23/23, 11:02 PM How can I do mediation analysis with the sem command? | Stata FAQ
errors and confidence intervals in two ways. First, by using the vce(boostrap) option after your sem command. Or second, by writing a small
program that runs both the sem command and the estat teffects and then bootstrapping this program.
Let’s demonstrate the vce(boostrap) option. Here we will add the reps option and request 200 replications.
https://stats.oarc.ucla.edu/stata/faq/how-can-i-do-mediation-analysis-with-the-sem-command/ 7/19
10/23/23, 11:02 PM How can I do mediation analysis with the sem command? | Stata FAQ
.................................................. 100
.................................................. 150
.................................................. 200
-------------------------------------------------------------------------------
| Observed Bootstrap Normal-based
| Coef. Std. Err. z P>|z| [95% Conf. Interval]
--------------+----------------------------------------------------------------
Structural |
read |
math | .724807 .0581262 12.47 0.000 .6108818 .8387321
_cons | 14.07254 3.092117 4.55 0.000 8.012099 20.13297
------------+----------------------------------------------------------------
science |
read | .3654205 .0802203 4.56 0.000 .2081915 .5226495
math | .4017207 .0875101 4.59 0.000 .2302041 .5732373
_cons | 11.6155 2.707368 4.29 0.000 6.309158 16.92184
--------------+----------------------------------------------------------------
var(e.read)| 58.71925 5.93704 48.16332 71.58871
var(e.science)| 50.8938 5.496477 41.18471 62.89176
-------------------------------------------------------------------------------
Adding this option provides us bootstrapped confidence intervals. You can now use estat teffects to obtain normal-based bootstrapped confidence
intervals around the indirect effect.
https://stats.oarc.ucla.edu/stata/faq/how-can-i-do-mediation-analysis-with-the-sem-command/ 8/19
10/23/23, 11:02 PM How can I do mediation analysis with the sem command? | Stata FAQ
estat teffects
Direct effects
------------------------------------------------------------------------------
https://stats.oarc.ucla.edu/stata/faq/how-can-i-do-mediation-analysis-with-the-sem-command/ 9/19
10/23/23, 11:02 PM How can I do mediation analysis with the sem command? | Stata FAQ
Indirect effects
------------------------------------------------------------------------------
| Observed Bootstrap Normal-based
| Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
Structural |
read |
math | 0 (no path)
-----------+----------------------------------------------------------------
science |
read | 0 (no path)
math | .2648593 .0593311 4.46 0.000 .1485726 .3811461
------------------------------------------------------------------------------
Total effects
------------------------------------------------------------------------------
| Observed Bootstrap Normal-based
| Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
https://stats.oarc.ucla.edu/stata/faq/how-can-i-do-mediation-analysis-with-the-sem-command/ 10/19
10/23/23, 11:02 PM How can I do mediation analysis with the sem command? | Stata FAQ
Structural |
read |
math | .724807 .0581262 12.47 0.000 .6108818 .8387321
-----------+----------------------------------------------------------------
science |
read | .3654205 .0802203 4.56 0.000 .2081915 .5226495
math | .66658 .0592669 11.25 0.000 .5504189 .7827411
------------------------------------------------------------------------------
However, you can also write a program to perform the bootstrapping. This enables us to obtain both percentile-based and bias-corrected confidence
intervals as well as normal-based confidence intervals. Here is the program that we a calling indireff.ado.
So how do we know which elements of r(indirect), r(direct) and r(total) we need? We will use the sem command and then quietly run estat teffects
followed by a matrix list to see the matrices of the coefficients.
https://stats.oarc.ucla.edu/stata/faq/how-can-i-do-mediation-analysis-with-the-sem-command/ 11/19
10/23/23, 11:02 PM How can I do mediation analysis with the sem command? | Stata FAQ
r(indirect)[1,3]
read: science: science:
o. o.
math read math
r1 0 0 .26485934
r(direct)[1,3]
read: science: science:
math read math
r1 .72480697 .36542052 .40172068
r(total)[1,3]
read: science: science:
math read math
r1 .72480697 .36542052 .66658002
We see that in each case the coefficient of interest is the third element.
Now that we know the correct matrix elements, we will run indireff for 200 bootstrap replications. You may want to run more, say 2,000 to 5,000. We
will then request the percentile and biased corrected confidence intervals.
https://stats.oarc.ucla.edu/stata/faq/how-can-i-do-mediation-analysis-with-the-sem-command/ 12/19
10/23/23, 11:02 PM How can I do mediation analysis with the sem command? | Stata FAQ
command: indireff
_bs_1: r(indir)
_bs_2: r(direct)
_bs_3: r(total)
------------------------------------------------------------------------------
| Observed Bootstrap Normal-based
| Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
_bs_1 | .2648593 .0545941 4.85 0.000 .1578569 .3718618
_bs_2 | .4017207 .0872965 4.60 0.000 .2306228 .5728186
_bs_3 | .66658 .0576837 11.56 0.000 .553522 .7796381
------------------------------------------------------------------------------
What if you had multiple independent variables? You just need to have one equation for each IV predicting the mediator variable. Here is the symbolic
model.
For our example, we will use math and ses as our independent variables. We will keep the same mediator and dependent variable as before.
https://stats.oarc.ucla.edu/stata/faq/how-can-i-do-mediation-analysis-with-the-sem-command/ 13/19
10/23/23, 11:02 PM How can I do mediation analysis with the sem command? | Stata FAQ
sem (read <- math)(read <- ses)(science <- read math ses) Endogenous variables
https://stats.oarc.ucla.edu/stata/faq/how-can-i-do-mediation-analysis-with-the-sem-command/ 14/19
10/23/23, 11:02 PM How can I do mediation analysis with the sem command? | Stata FAQ
Exogenous variables
-------------------------------------------------------------------------------
| OIM
| Coef. Std. Err. z P>|z| [95% Conf. Interval]
--------------+----------------------------------------------------------------
Structural |
read |
math | .68845 .059519 11.57 0.000 .5717949 .805105
ses | 1.726 .7698566 2.24 0.025 .2171093 3.234892
_cons | 12.43962 3.147394 3.95 0.000 6.270842 18.6084
------------+----------------------------------------------------------------
science |
read | .3507374 .0663219 5.29 0.000 .2207487 .480726
math | .3905883 .0721193 5.42 0.000 .2492371 .5319395
ses | 1.033732 .731092 1.41 0.157 -.3991816 2.466647
_cons | 10.84415 3.065166 3.54 0.000 4.836532 16.85176
--------------+----------------------------------------------------------------
var(e.read)| 57.27968 5.727968 47.08476 69.68202
var(e.science)| 50.39009 5.039009 41.42142 61.30067
-------------------------------------------------------------------------------
LR test of model vs. saturated: chi2(0) = 0.00, Prob > chi2 = .
https://stats.oarc.ucla.edu/stata/faq/how-can-i-do-mediation-analysis-with-the-sem-command/ 15/19
10/23/23, 11:02 PM How can I do mediation analysis with the sem command? | Stata FAQ
We note that the indirect effects of both math and ses are significant.
Because we have multiple independent variables, the computation of the ratios and proportions is a bit more complex.
In this section we will consider the case in which there are multiple mediator variables. This time there will be one equation for each mediator
variable. The symbolic form of the mode looks like this.
sem (MV1 <- IV)(MV2 <- IV)(DV <- MV1 MV2 IV)
For our example we will use read and write as the mediators. We will go back to a single independent variable, math.
sem (read <- math)(write <- math)(science <- read write math) Endogenous variables
https://stats.oarc.ucla.edu/stata/faq/how-can-i-do-mediation-analysis-with-the-sem-command/ 16/19
10/23/23, 11:02 PM How can I do mediation analysis with the sem command? | Stata FAQ
Exogenous variables
Observed: math
-------------------------------------------------------------------------------
| OIM
| Coef. Std. Err. z P>|z| [95% Conf. Interval]
--------------+----------------------------------------------------------------
Structural |
read |
math | .724807 .0579824 12.50 0.000 .6111636 .8384504
_cons | 14.07254 3.100201 4.54 0.000 7.996255 20.14882
------------+----------------------------------------------------------------
write |
math | .6247082 .0562757 11.10 0.000 .5144099 .7350065
_cons | 19.88724 3.008947 6.61 0.000 13.98981 25.78467
------------+----------------------------------------------------------------
science |
read | .3015317 .0679912 4.43 0.000 .1682715 .434792
write | .2065257 .0700532 2.95 0.003 .0692239 .3438274
math | .3190094 .0759047 4.20 0.000 .170239 .4677798
_cons | 8.407353 3.160709 2.66 0.008 2.212476 14.60223
--------------+----------------------------------------------------------------
var(e.read)| 58.71925 5.871925 48.26811 71.43329
https://stats.oarc.ucla.edu/stata/faq/how-can-i-do-mediation-analysis-with-the-sem-command/ 17/19
10/23/23, 11:02 PM How can I do mediation analysis with the sem command? | Stata FAQ
The indirect effect for math, .345706, is the combination of the indirect via read plus the indirect via write. We can compute these indirect paths
manually.
The last computation shows that the indirect effect given by estat teffects is the combined indirect effect.
We can use the values we just computed to get the ratios and proportions of interest.
https://stats.oarc.ucla.edu/stata/faq/how-can-i-do-mediation-analysis-with-the-sem-command/ 18/19
10/23/23, 11:02 PM How can I do mediation analysis with the sem command? | Stata FAQ
https://stats.oarc.ucla.edu/stata/faq/how-can-i-do-mediation-analysis-with-the-sem-command/ 19/19