In these notes, we run a factorial
ANOVA in SPSS, and follow up with simple effects analyses. The data
come from Eyesenck
(1974). We compute the simple effects analyses following the
statistically significant F of the overall ANOVA. The data in SPSS look
as follows (the first 20 observations are shown):

Using Windows

Using Syntax

First, we run the factorial ANOVA:

glm count by condition age.

Note the following regarding the above output:

Corrected Model = SS condition + SS age + SS condition*age

Total SS = SS condition + SS age + SS condition*age + SS error

Corrected Total = SS total - SS Intercept

What Does the Intercept Term Represent?

The intercept term of 13479.210 is computed as the grand total (or "grand sum") of all the count data, squared, then divided by N, the number of observations (which in our case is 100). The sum of the count data is equal to 1161.00. Squaring this term, we get 1347921, then dividing by 100, we get 13479.210. Alternatively, it is also equal to the grand mean of all the data, squared, multiplied by N [(11.61^2)(100)] = 13479.210. To better understand why it is computed this way, recall how the various sums of squares for the factorial ANOVA are computed:

Notice how each effect, whether it be a row, column, or interaction, is equal to the squared effect multiplied by a factor of N (whether it be Kn, Jn, or n). The calculation of the intercept term follows the same logic, only that now, we're not taking a difference between a group mean and a grand mean (as was the case for the rows, column effects), nor are we computing anything like the interaction effect of SS AB cells minus SSA minus SSB. Rather, the intercept term simply reflects the overall mean of the data, squared, multiplied by total N. A statistically significant intercept term simply suggests that the overall mean of the data is not equal to 0. Is that of interest to you? Probably not, which is why the intercept term is rarely interpreted in the above parameterization of the ANOVA. In alternative parameterizations, the intercept term is very meaningful, as we briefly discuss below.

Demonstrating the Meaning of the Intercept Term

We mentioned above that the intercept significance test isn't really of interest to us, since it simply represents the test of the null hypothesis that the grand mean of all the data is equal to 0. However, there is a very practical way to make the intercept term much more meaningful to us, and in some advanced linear models (especially longitudinal work, multilevel models), the intercept plays a very important role.

Consider what would happen if we centered the count data, and re-ran the factorial ANOVA. We would have the following:

COMPUTE count_centered = count - 11.61.

EXECUTE.

Visualizing the
Interaction

Next, we obtain a plot of the statistically significant condition*age interaction:

/plot = profile(condition*age)

/emmeans = tables (condition*age) compare (age)

where "emmeans" is short for "estimated marginal means," and "compare (age)" asks SPSS to compare age at each condition.

The above results are not very
surprising to us. We see that at condition = 1, there is no evidence
for a difference between the means of young and old (p = .694).
Likewise, at condition = 2, we have no evidence of a difference between
ages (p = .582). However, at conditions 3, 4, and 5, we have evidence
of a difference between ages young and old (p = .003, .001, .000). Be
sure to note the error term used
for each contrast, it is equal to 8.026, the error term from the
overall ANOVA. Had we used independent error terms, our p-values would
be different. Why do we use MS error across all simple effects? It's
because MS error is our best guess (estimate) at the population
variance under the
null hypothesis, and it is based on more degrees of freedom than would
be the error terms on more restricted analyses (i.e, the simple effects
analyses). However, had we reason to suggest our variances to be
unequal, we may have considered not using the pooled MS error term, and
would have opted for independent error terms.

Suppose that instead of computing differences of age at each condition, we wanted to compare condition at each age, we would use:

/emmeans = tables (condition*age) compare (condition).

where, as previously, "emmeans" is short for "estimated marginal means." The syntax "compare(condition)" tells SPSS to compare condition at each age. We obtain the following:

Using Windows

Using Syntax

First, we run the factorial ANOVA:

glm count by condition age.

Note the following regarding the above output:

Corrected Model = SS condition + SS age + SS condition*age

Total SS = SS condition + SS age + SS condition*age + SS error

Corrected Total = SS total - SS Intercept

What Does the Intercept Term Represent?

The intercept term of 13479.210 is computed as the grand total (or "grand sum") of all the count data, squared, then divided by N, the number of observations (which in our case is 100). The sum of the count data is equal to 1161.00. Squaring this term, we get 1347921, then dividing by 100, we get 13479.210. Alternatively, it is also equal to the grand mean of all the data, squared, multiplied by N [(11.61^2)(100)] = 13479.210. To better understand why it is computed this way, recall how the various sums of squares for the factorial ANOVA are computed:

Notice how each effect, whether it be a row, column, or interaction, is equal to the squared effect multiplied by a factor of N (whether it be Kn, Jn, or n). The calculation of the intercept term follows the same logic, only that now, we're not taking a difference between a group mean and a grand mean (as was the case for the rows, column effects), nor are we computing anything like the interaction effect of SS AB cells minus SSA minus SSB. Rather, the intercept term simply reflects the overall mean of the data, squared, multiplied by total N. A statistically significant intercept term simply suggests that the overall mean of the data is not equal to 0. Is that of interest to you? Probably not, which is why the intercept term is rarely interpreted in the above parameterization of the ANOVA. In alternative parameterizations, the intercept term is very meaningful, as we briefly discuss below.

Demonstrating the Meaning of the Intercept Term

We mentioned above that the intercept significance test isn't really of interest to us, since it simply represents the test of the null hypothesis that the grand mean of all the data is equal to 0. However, there is a very practical way to make the intercept term much more meaningful to us, and in some advanced linear models (especially longitudinal work, multilevel models), the intercept plays a very important role.

Consider what would happen if we centered the count data, and re-ran the factorial ANOVA. We would have the following:

COMPUTE count_centered = count - 11.61.

EXECUTE.

The intercept term is now equal to
0.000. This isn't that surprising, since the intercept is still
computed as previously, the square of the grand mean multiplied by N.
However, what is the mean of centered data? The mean of centered data
is always equal to 0. So, the computation is literally (0.000)(100) =
0. The test of significance on the intercept term tests the same thing
as it did previously (i.e., before we centered the data), the null
hypothesis that the mean of the count data is equal to 0. Not
surprisingly, it is 100% not significant (p = 1.000). Again, the
intercept term isn't of interest to us here, because by centering, we
already knew how it would turn out. Notice that the F ratios for the
other terms have not changed simply because we centered.

Where centering data, and interpreting the intercept term really comes into play, is in regression-style models. In traditional ANOVA-style models, centering the dependent variable isn't extremely common.

Where centering data, and interpreting the intercept term really comes into play, is in regression-style models. In traditional ANOVA-style models, centering the dependent variable isn't extremely common.

Next, we obtain a plot of the statistically significant condition*age interaction:

/plot = profile(condition*age)

Suppose
now that we would like to do a simple effects analysis of age @ each
condition. The syntax we need is:

/emmeans = tables (condition*age) compare (age)

where "emmeans" is short for "estimated marginal means," and "compare (age)" asks SPSS to compare age at each condition.

Suppose that instead of computing differences of age at each condition, we wanted to compare condition at each age, we would use:

/emmeans = tables (condition*age) compare (condition).

where, as previously, "emmeans" is short for "estimated marginal means." The syntax "compare(condition)" tells SPSS to compare condition at each age. We obtain the following:

The output suggests there to be no
effect for condition at each age. To visualize this, let's obtain the
interaction plot once more, but this time, instead of having condition
on the x-axis, we'll put age:

/PLOT = PROFILE( age*condition )

Again, note the error term used in
the simple effects. It is equal to 8.026, that of the overall MS error
of the ANOVA. This is how it should be. Because condition has 5 levels, we can
ask SPSS to provide a
Tukey post-hoc test for the condition
factor. It didn't make sense to ask for a post-hoc on age, since age
only had 2 levels. The post-hoc for condition looks as follows:

/POSTHOC = condition(TUKEY).

/PLOT = PROFILE( age*condition )

It always helps to obtain tables of
means to ensure the interaction graphs were plotted correctly, and it
is what you intended to obtain. The plot of cell means was obtained
above to the right [/EMMEANS =
TABLES(condition*age)]. All looks good. We can see that the cell
means correspond to what we're seeing in the graph.

/POSTHOC = condition(TUKEY).

From the table, we can observe which
condition means are statistically different from one another. SPSS also
provides an additional table to make some sense of the post-hoc test:

Conclusions from the above table are
as follows:

Condition means 1 and 2 are different from condition mean 3.

Condition means 1 and 2 are different from condition means 4 and 5.

Condition mean 3 is different from means 4 and 5.

We may have preferred simply to do contrasts on the condition means, which would usually be guided by theoretical expectation before analyzing the data. Suppose we had theoretical reason for wanting to compare condition means one by one to condition 5. We could run a simple contrast:

UNIANOVA

count BY condition age

/CONTRAST (condition)=Simple

/METHOD = SSTYPE(3)

/INTERCEPT = INCLUDE

/POSTHOC = condition ( TUKEY )

/PLOT = PROFILE( age*condition )

/EMMEANS = TABLES(condition*age)

/CRITERIA = ALPHA(.05)

/DESIGN = condition age condition*age.

Condition means 1 and 2 are different from condition mean 3.

Condition means 1 and 2 are different from condition means 4 and 5.

Condition mean 3 is different from means 4 and 5.

We may have preferred simply to do contrasts on the condition means, which would usually be guided by theoretical expectation before analyzing the data. Suppose we had theoretical reason for wanting to compare condition means one by one to condition 5. We could run a simple contrast:

UNIANOVA

count BY condition age

/CONTRAST (condition)=Simple

/METHOD = SSTYPE(3)

/INTERCEPT = INCLUDE

/POSTHOC = condition ( TUKEY )

/PLOT = PROFILE( age*condition )

/EMMEANS = TABLES(condition*age)

/CRITERIA = ALPHA(.05)

/DESIGN = condition age condition*age.

The values of each contrast are
highlighted. The p-values are located in the row "Sig.". We can see
that the first 3 contrasts are statistically significant, whereas the
last one is not.

References & Readings

Eyesenck, M. W. (1974). Age differences in incidental learning. Developmental Psychology, 10, 936-941.