Many researchers like to do their anova using regression with dummy coding but wonder how to get tests of simple main effects. This FAQ will show you how to get tests of simple main effects when using dummy coding.

We will begin with a two-factor design using a dataset called **crf24**.
We will manually compute the various dummy variables and run the regression model.

use https://stats.idre.ucla.edu/stat/stata/faq/crf24, clear tab a, gen(a) tab b, gen(b) generate ab1 = a1*b1 generate ab2 = a1*b2 generate ab3 = a1*b3 regress y a1 b1 b2 b3 ab1 ab2 ab3Source | SS df MS Number of obs = 32 -------------+------------------------------ F( 7, 24) = 40.22 Model | 217 7 31 Prob > F = 0.0000 Residual | 18.5 24 .770833333 R-squared = 0.9214 -------------+------------------------------ Adj R-squared = 0.8985 Total | 235.5 31 7.59677419 Root MSE = .87797 ------------------------------------------------------------------------------ y | Coef. Std. Err. t P>|t| [95% Conf. Interval] -------------+---------------------------------------------------------------- a1 | -2 .6208194 -3.22 0.004 -3.281308 -.7186918 b1 | -8.25 .6208194 -13.29 0.000 -9.531308 -6.968692 b2 | -7 .6208194 -11.28 0.000 -8.281308 -5.718692 b3 | -4.5 .6208194 -7.25 0.000 -5.781308 -3.218692 ab1 | 4 .8779711 4.56 0.000 2.187957 5.812043 ab2 | 3 .8779711 3.42 0.002 1.187957 4.812043 ab3 | 3.5 .8779711 3.99 0.001 1.687957 5.312043 _cons | 10 .4389856 22.78 0.000 9.093978 10.90602 ------------------------------------------------------------------------------

For this model **a2** is the reference level for **a** and **b4** is the
reference level for **b**, i.e., they are the omitted levels.

Here is the test of the **a*b** interaction.

test ab1 ab2 ab3( 1) ab1 = 0 ( 2) ab2 = 0 ( 3) ab3 = 0 F( 3, 24) = 8.38 Prob > F = 0.0006

Since the **a*b** interaction is statistically significant we will procede with
tests of simple main effects. First, we will do the tests of **b** at
**a2** which is the reference level for **a**.

test b1 b2 b3( 1) b1 = 0 ( 2) b2 = 0 ( 3) b3 = 0 F( 3, 24) = 68.84 Prob > F = 0.0000

We will follow this with tests of **b** at
**a1** which will require that we combine the **b** dummies
with their interaction terms and use the **accumulate** option to get
a test with the correct degrees of freedom.

test b1 + ab1 = 0( 1) b1 + ab1 = 0 F( 1, 24) = 46.86 Prob > F = 0.0000test b2 + ab2 = 0, accumulate( 1) b1 + ab1 = 0 ( 2) b2 + ab2 = 0 F( 2, 24) = 29.51 Prob > F = 0.0000test b3 + ab3 = 0, accumulate( 1) b1 + ab1 = 0 ( 2) b2 + ab2 = 0 ( 3) b3 + ab3 = 0 F( 3, 24) = 23.65 Prob > F = 0.0000

The last **test** command has the F-ratio = 23.65 for **b** at **a1**.

We could have done the tests of simple main effects for differences in **a**
for each level of **b**. Thoses tests would look like this:

/* test of a at b=4 (the reference group) */ test a1( 1) a1 = 0 F( 1, 24) = 10.38 Prob > F = 0.0036/* test of a at b=1 */ test a1 + ab1 = 0( 1) a1 + ab1 = 0 F( 1, 24) = 10.38 Prob > F = 0.0036/* test of a at b=2 */ test a1 + ab2 = 0( 1) a1 + ab2 = 0 F( 1, 24) = 2.59 Prob > F = 0.1203/* test of a at b=3 */ test a1 + ab3 = 0( 1) a1 + ab3 = 0 F( 1, 24) = 5.84 Prob > F = 0.0237

As you can see, testing an effect, say **a**, by itself tests the simple
main effect for the reference group. To get the simple main effects for the
other levels, you combine the test of **a** with the appropriate interaction
term.

This FAQ only covers the computation of the tests of simple main effects
using dummy coding. 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**).

This method of using dummy coding to compute tests of simple main effects generalizes to more complex designs with multiple factors. Let’s try it with a three-factor completely crossed design. Once again we will manually create the dummy variables and run the regression model.

use https://stats.idre.ucla.edu/stat/stata/faq/threeway, clear recode a (1=0)(2=1) recode b (1=0)(2=1) tab c, gen(c) gen ab=a*b gen ac1=a*c1 gen ac2=a*c2 gen bc1=b*c1 gen bc2=b*c2 gen abc1=a*b*c1 gen abc2=a*b*c2 regress y a b c1 c2 ab ac1 ac2 bc1 bc2 abc1 abc2Source | SS df MS Number of obs = 24 -------------+------------------------------ F( 11, 12) = 33.94 Model | 497.833333 11 45.2575758 Prob > F = 0.0000 Residual | 16 12 1.33333333 R-squared = 0.9689 -------------+------------------------------ Adj R-squared = 0.9403 Total | 513.833333 23 22.3405797 Root MSE = 1.1547 ------------------------------------------------------------------------------ y | Coef. Std. Err. t P>|t| [95% Conf. Interval] -------------+---------------------------------------------------------------- a | -.5 1.154701 -0.43 0.673 -3.015876 2.015876 b | -9.5 1.154701 -8.23 0.000 -12.01588 -6.984124 c1 | -8 1.154701 -6.93 0.000 -10.51588 -5.484124 c2 | -4 1.154701 -3.46 0.005 -6.515876 -1.484124 ab | 15 1.632993 9.19 0.000 11.44201 18.55799 ac1 | 6.39e-14 1.632993 0.00 1.000 -3.557986 3.557986 ac2 | 1 1.632993 0.61 0.552 -2.557986 4.557986 bc1 | 9 1.632993 5.51 0.000 5.442014 12.55799 bc2 | 5 1.632993 3.06 0.010 1.442014 8.557986 abc1 | -8.5 2.309401 -3.68 0.003 -13.53175 -3.468247 abc2 | -5.5 2.309401 -2.38 0.035 -10.53175 -.4682473 _cons | 19 .8164966 23.27 0.000 17.22101 20.77899 ------------------------------------------------------------------------------

In this model **a1**, **b1** and **c3** are the reference groups for
variables **a**, **b** and **c**, respectively.

Here is the test of the three-way **a*b*c** interaction.

test abc1 abc2 abc2( 1) abc1 = 0 ( 2) abc2 = 0 ( 3) abc2 = 0 Constraint 3 dropped F( 2, 12) = 6.97 Prob > F = 0.0098

Since the test of the three-way interaction is statistically significant it means that
there is one or more two-way interactions that are significant at different levels of
a third variable. We have reason to believe that looking at the **b*c** interaction
could be productive, therefore we will test the **b*c** interactions for each
level of **a**.

/* test b*c at a1 (the reference level) */ test bc1 bc2( 1) bc1 = 0 ( 2) bc2 = 0 F( 2, 12) = 15.25 Prob > F = 0.0005/* test b*c at a2 */ test bc1+abc1=0 test bc2+abc2=0, accumulate( 1) bc1 + abc1 = 0 ( 2) bc2 + abc2 = 0 F( 2, 12) = 0.1875 Prob > F = 0.8314

We see that **b*c** at **a1** has a pretty large F-ratio and that the
F-ratio for **b*c** at **a2** is less than one.

So we will follow up this analysis by looking for differences in **c** for
eacl level of **b** all within **a1**.

/* test for c at b==1 & a==1 */ test c1 c2( 1) c1 = 0 ( 2) c2 = 0 F( 2, 12) = 24.00 Prob > F = 0.0001/* test for c at b==2 & a==1 */ test c1+bc1=0 test c2+bc2=0, accum( 1) c1 + bc1 = 0 ( 2) c2 + bc2 = 0 F( 2, 12) = 0.50 Prob > F = 0.6186

Dummy coding provides a fast and easy way to compute tests of simple main effects.