The margins command in Stata is a useful tool for obtaining simple main effects in an ANOVA (Analysis of Variance) analysis. It allows for the calculation of the average predicted values for each level of a categorical variable, holding all other variables at their means. This command is particularly helpful in ANOVA models with multiple factors, as it can provide a clearer understanding of the effects of each individual factor on the outcome variable. By using the margins command, researchers can easily examine the simple main effects of each factor and make informed decisions about their data analysis.
How can I get anova simple main effects with the margins command? Stata FAQ
Now that Stata 11 has been released, you be wondering if there is an easy way to compute
tests of simple main effects? Yes there is and this FAQ
will show you how to get tests of simple main effects using the new margins command.
Consider a two-factor design using a dataset called crf24.
use https://stats.idre.ucla.edu/stat/stata/faq/crf24, clear
anova y a##b
Number of obs = 32 R-squared = 0.9214
Root MSE = .877971 Adj R-squared = 0.8985
Source | Partial SS df MS F Prob > F
-----------+----------------------------------------------------
Model | 217 7 31 40.22 0.0000
|
a | 3.125 1 3.125 4.05 0.0554
b | 194.5 3 64.8333333 84.11 0.0000
a#b | 19.375 3 6.45833333 8.38 0.0006
|
Residual | 18.5 24 .770833333
-----------+----------------------------------------------------
Total | 235.5 31 7.59677419As you can see the a#b interaction is statistically significant.
Next we will use the margins command on the a#b interaction. We will include the
post option and if the design were unbalanced or included a covariate we would also
include the asbalanced option.
margins a#b, post
Adjusted predictions Number of obs = 32
Expression : Linear prediction, predict()
------------------------------------------------------------------------------
| Delta-method
| Margin Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
a#b |
1 1 | 3.75 .4389856 8.54 0.000 2.889604 4.610396
1 2 | 4 .4389856 9.11 0.000 3.139604 4.860396
1 3 | 7 .4389856 15.95 0.000 6.139604 7.860396
1 4 | 8 .4389856 18.22 0.000 7.139604 8.860396
2 1 | 1.75 .4389856 3.99 0.000 .8896041 2.610396
2 2 | 3 .4389856 6.83 0.000 2.139604 3.860396
2 3 | 5.5 .4389856 12.53 0.000 4.639604 6.360396
2 4 | 10 .4389856 22.78 0.000 9.139604 10.8604
------------------------------------------------------------------------------The margins command has given us a list of the cell means and their standard errors.
We can use combinations of these means to compute the test of simple maun effects. For example,
a1 versus a2 at b1 would test cell a1,b1 versus cell a2,b1. Here is what the tests
of simple main effects for a each level of b would look like.
test 1.a#1.b == 2.a#1.b
( 1) 1bn.a#1bn.b - 2.a#1bn.b = 0
chi2( 1) = 10.38
Prob > chi2 = 0.0013
test 1.a#2.b == 2.a#2.b
( 1) 1bn.a#2.b - 2.a#2.b = 0
chi2( 1) = 2.59
Prob > chi2 = 0.1072
test 1.a#3.b == 2.a#3.b
( 1) 1bn.a#3.b - 2.a#3.b = 0
chi2( 1) = 5.84
Prob > chi2 = 0.0157
test 1.a#4.b == 2.a#4.b
( 1) 1bn.a#4.b - 2.a#4.b = 0
chi2( 1) = 10.38
Prob > chi2 = 0.0013Each one of the above tests used only one degree of freedom so the terms in the test
were simple. We will next move on to test of b at each level of a. Each of these
tests have three degrees of freedom and so, will will involve a more complex test command.
We will start off showing the accum
approach and then show a cleaner way to get the result with a single test command.
/* test of b at a==1 */
test 1.a#1.b == 1.a#2.b
test 1.a#1.b == 1.a#3.b, accum
test 1.a#1.b == 1.a#4.b, accum
( 1) 1bn.a#1bn.b - 1bn.a#2.b = 0
( 2) 1bn.a#1bn.b - 1bn.a#3.b = 0
( 3) 1bn.a#1bn.b - 1bn.a#4.b = 0
chi2( 3) = 70.95
Prob > chi2 = 0.0000
/* the same test using a single test command */
test (1.a#1.b == 1.a#2.b)(1.a#1.b == 1.a#3.b)(1.a#1.b == 1.a#4.b)
( 1) 1bn.a#1bn.b - 1bn.a#2.b = 0
( 2) 1bn.a#1bn.b - 1bn.a#3.b = 0
( 3) 1bn.a#1bn.b - 1bn.a#4.b = 0
chi2( 3) = 70.95
Prob > chi2 = 0.0000
/* convert chi2 to approximate F-value */
display r(chi2)/r(df)
23.648649We will finish up with tests of b at a==2 just by changing all of the 1.a terms to
2.a
/* test of b at a==1 */
test (2.a#1.b == 2.a#2.b)(2.a#1.b == 2.a#3.b)(2.a#1.b == 2.a#4.b)
( 1) 2.a#1bn.b - 2.a#2.b = 0
( 2) 2.a#1bn.b - 2.a#3.b = 0
( 3) 2.a#1bn.b - 2.a#4.b = 0
chi2( 3) = 206.51
Prob > chi2 = 0.0000
/* convert chi2 to approximate F-value */
display r(chi2)/r(df)
68.837838This FAQ only covers the computation of the tests of simple main effects
using the margins command. The FAQ does not cover computing the critical values of these
tests. There is a user written ado-program smecriticalvalue which can
assist in this process (search smecriticalvalue).
Let’s try a little more challenging example, one that is unbalanced with a covariate.
use https://stats.idre.ucla.edu/stat/data/hsbdemo, clear
anova write female##prog c.read
Number of obs = 200 R-squared = 0.4889
Root MSE = 6.88105 Adj R-squared = 0.4730
Source | Partial SS df MS F Prob > F
------------+----------------------------------------------------
Model | 8740.54801 6 1456.758 30.77 0.0000
|
female | 1680.08743 1 1680.08743 35.48 0.0000
prog | 632.133455 2 316.066727 6.68 0.0016
female#prog | 301.770797 2 150.885399 3.19 0.0435
read | 4110.18709 1 4110.18709 86.81 0.0000
|
Residual | 9138.32699 193 47.3488445
------------+----------------------------------------------------
Total | 17878.875 199 89.843593The female#prog interaction is significant but we’ll go ahead and compute the tests
of simple main effects. This time because the model is both unbalanced and includes a
covariate we will include the asbalanced option which is equivalent to least squares
means (lsmeans) or expected marginal means (emmeans) in SAS and SPSS.
margins female#prog, asbalanced post
Predictive margins Number of obs = 200
Expression : Linear prediction, predict()
------------------------------------------------------------------------------
| Delta-method
| Margin Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
female#prog |
0 1 | 48.7854 1.502058 32.48 0.000 45.84142 51.72938
0 2 | 52.61465 1.026455 51.26 0.000 50.60284 54.62647
0 3 | 45.08098 1.476716 30.53 0.000 42.18667 47.97529
1 1 | 55.85857 1.432221 39.00 0.000 53.05146 58.66567
1 2 | 55.68658 .926245 60.12 0.000 53.87117 57.50199
1 3 | 53.71585 1.356821 39.59 0.000 51.05653 56.37517
------------------------------------------------------------------------------
/* tests of female at each level of prog */
test 0.female#1.prog == 1.female#1.prog
( 1) 0bn.female#1bn.prog - 1.female#1bn.prog = 0
chi2( 1) = 11.56
Prob > chi2 = 0.0007
test 0.female#2.prog == 1.female#2.prog
( 1) 0bn.female#2.prog - 1.female#2.prog = 0
chi2( 1) = 5.17
Prob > chi2 = 0.0229
test 0.female#3.prog == 1.female#3.prog
( 1) 0bn.female#3.prog - 1.female#3.prog = 0
chi2( 1) = 19.54
Prob > chi2 = 0.0000
/* tests of prog at each level of female */
test (0.female#1.prog == 0.female#2.prog)(0.female#1.prog == 0.female#3.prog)
( 1) 0bn.female#1bn.prog - 0bn.female#2.prog = 0
( 2) 0bn.female#1bn.prog - 0bn.female#3.prog = 0
chi2( 2) = 17.41
Prob > chi2 = 0.0002
/* convert chi2 to approximate F-value */
display r(chi2)/r(df)
8.7026677
test (1.female#1.prog == 1.female#2.prog)(1.female#1.prog == 1.female#3.prog)
( 1) 1.female#1bn.prog - 1.female#2.prog = 0
( 2) 1.female#1bn.prog - 1.female#3.prog = 0
chi2( 2) = 1.69
Prob > chi2 = 0.4287
/* convert chi2 to approximate F-value */
display r(chi2)/r(df)
.84693839So that’s how to compute tests of simple main effects using margins in Stata 11.
Cite this article
stats writer (2024). How can I use the margins command in Stata to obtain simple main effects in an ANOVA?. PSYCHOLOGICAL SCALES. Retrieved from https://scales.arabpsychology.com/stats/how-can-i-use-the-margins-command-in-stata-to-obtain-simple-main-effects-in-an-anova/
stats writer. "How can I use the margins command in Stata to obtain simple main effects in an ANOVA?." PSYCHOLOGICAL SCALES, 1 Jul. 2024, https://scales.arabpsychology.com/stats/how-can-i-use-the-margins-command-in-stata-to-obtain-simple-main-effects-in-an-anova/.
stats writer. "How can I use the margins command in Stata to obtain simple main effects in an ANOVA?." PSYCHOLOGICAL SCALES, 2024. https://scales.arabpsychology.com/stats/how-can-i-use-the-margins-command-in-stata-to-obtain-simple-main-effects-in-an-anova/.
stats writer (2024) 'How can I use the margins command in Stata to obtain simple main effects in an ANOVA?', PSYCHOLOGICAL SCALES. Available at: https://scales.arabpsychology.com/stats/how-can-i-use-the-margins-command-in-stata-to-obtain-simple-main-effects-in-an-anova/.
[1] stats writer, "How can I use the margins command in Stata to obtain simple main effects in an ANOVA?," PSYCHOLOGICAL SCALES, vol. X, no. Y, ص Z-Z, July, 2024.
stats writer. How can I use the margins command in Stata to obtain simple main effects in an ANOVA?. PSYCHOLOGICAL SCALES. 2024;vol(issue):pages.
