Appendix T — SPSS Tutorial: Factorial ANOVA

Conducting two-way between-subjects and mixed factorial ANOVAs in SPSS

NoteLearning objectives

By the end of this tutorial, you will be able to:

  • Run a two-way between-subjects ANOVA (2 × 2) using SPSS General Linear Model → Univariate.
  • Run a mixed factorial ANOVA (between-subjects × within-subjects) using SPSS General Linear Model → Repeated Measures.
  • Interpret the SPSS interaction test and determine whether to proceed to simple effects analysis.
  • Produce and interpret an SPSS interaction profile plot.
  • Conduct simple effects analysis for a significant interaction.
  • Calculate partial eta-squared and partial omega-squared from SPSS output.
  • Write a complete APA-style results paragraph for a factorial ANOVA.

T.1 Overview

This tutorial covers two complementary factorial designs that appear throughout Chapter 16:

Part A — Between-subjects factorial ANOVA: Two factors, each between subjects, testing whether Sex and Group jointly predict post-test strength.

Part B — Mixed factorial ANOVA: One between-subjects factor (Group) combined with one within-subjects factor (Time), testing whether strength trajectories differ between groups across a 12-week program.

Both analyses use core_session.csv. You should be comfortable with one-way ANOVA (Chapter 14 tutorial) and repeated measures ANOVA (Chapter 15 tutorial) before proceeding.

T.2 Dataset

  • File: core_session.csv
  • Variables used (Part A): strength_kg, group, sex_category; filter to time = "post"
  • Variables used (Part B): strength_kg, group, time; all participants, all time points
  • Sample: N = 60 (30 control, 30 training); male (n = 27), female (n = 33)
TipSave your work before starting

Before running any analysis, save a copy of the dataset under a new name (e.g., core_session_ch16.sav). This protects your original file if you need to restructure data or add new variables during the tutorial.


T.3 Part A: Two-way between-subjects ANOVA (2 × 2)

T.3.1 Overview of Part A

This analysis tests the independent and joint effects of Sex (female, male) and Group (control, training) on post-test strength. Because this is a purely between-subjects design — every participant appears in exactly one cell — we use General Linear Model → Univariate.

T.3.2 Step 1: Filter to post-test observations

The core_session.csv dataset contains three rows per participant (pre, mid, post). For the between-subjects factorial, we need only the post-test row:

  1. Click Data → Select Cases
  2. Click If condition is satisfiedIf…
  3. Type the condition: time = "post" (or select the variable and type the string value used in your file — it may be "post" or 3 depending on encoding)
  4. Click Continue → OK

SPSS will cross-out non-selected rows and append a filter variable. All subsequent analyses will use only post-test observations until you reset the filter.

WarningRemember to reset the filter for Part B

After completing Part A, return to Data → Select Cases → All cases before running the mixed ANOVA in Part B, which requires all three time points.

T.3.3 Step 2: Run the two-way between-subjects ANOVA

  1. Click Analyze → General Linear Model → Univariate
  2. Move strength_kg to the Dependent Variable box
  3. Move group to Fixed Factor(s)
  4. Move sex_category to Fixed Factor(s)
  5. Click Options:
    • Under Display Means for, select group, sex_category, and group*sex_category
    • Check Compare main effects and set Confidence interval adjustment to Bonferroni
    • Check Descriptive statistics, Estimates of effect size, and Homogeneity tests
    • Click Continue
  6. Click Plots:
    • Move group to the Horizontal Axis box
    • Move sex_category to the Separate Lines box
    • Click Add, then Continue
  7. Click OK

T.3.4 Step 3: Interpret Part A output

Levene’s Test of Equality of Error Variances

SPSS reports Levene’s test before the main ANOVA table. A non-significant result (p > .05) confirms that the assumption of equal variances across cells is satisfied.

Levene Statistic df1 df2 p
1.84 3 56 .150

Interpretation: The test is not significant (p = .150), so the homogeneity assumption is satisfied.

Tests of Between-Subjects Effects

Source Type III SS df MS F p η²_p
Corrected Model 1,040.67 3 346.89 1.93 .137
Intercept 397,040.22 1 397,040.22 2,205.97 < .001
sex_category 0.22 1 0.22 0.00 .974 .000
group 939.31 1 939.31 5.22 .026 .085
sex_category × group 101.14 1 101.14 0.56 .457 .010
Error 10,084.70 56 180.08
Total 414,278.03 60

The η²_p values are reported automatically by SPSS in the “Partial Eta Squared” column when you checked Estimates of effect size in the Options dialog.

Key decisions:

  1. Interaction first: The Sex × Group interaction is F(1, 56) = 0.56, p = .457, η²_p = .010 — not significant. The lines in the interaction plot (Figure 16.2 in Chapter 16) are roughly parallel, confirming no interaction.
  2. Main effects: With a non-significant interaction, interpret main effects directly. Group is significant (F = 5.22, p = .026, η²_p = .085); Sex is not (F = 0.00, p = .974).

T.3.5 Step 4: Obtain partial omega-squared (ω²_p)

SPSS reports η²_p automatically when you check Estimates of effect size in the Options dialog, but it does not report ω²_p directly. Two options are available to obtain it without hand calculation:

  1. Statistical Calculators appendix — The interactive effect size tool in the Statistical Calculators appendix accepts the SS and MS values from the SPSS output and returns ω²_p for each effect.
  2. SPSS 31 and later — Use Analyze → Power Analysis → General Linear Model to obtain ω²_p alongside η²_p in the output.

For reference, the formula for a between-subjects effect is:

\[\omega^2_p = \frac{SS_{\text{effect}} - df_{\text{effect}} \times MS_{\text{error}}}{SS_{\text{effect}} + (N - df_{\text{effect}}) \times MS_{\text{error}}}\]

The three values you need (\(SS_{\text{effect}}\), \(df_{\text{effect}}\), \(MS_{\text{error}}\)) all appear in the Tests of Between-Subjects Effects table above. For the Group effect in our example, this yields ω²_p = .066 — a small-to-medium effect[1].

T.3.6 Step 5: Part A interaction plot

After clicking OK, SPSS generates a profile plot in the output. You should see two lines (Female, Male) that are nearly parallel across the two group conditions — confirming the absence of an interaction. If the lines crossed substantially, you would need to proceed to simple effects analysis.


T.4 Part B: Mixed factorial ANOVA (Group × Time)

T.4.1 Overview of Part B

This analysis tests whether strength trajectories differ between the training and control groups across pre, mid, and post time points. Group is the between-subjects factor; Time is the within-subjects (repeated measures) factor. We use General Linear Model → Repeated Measures — the same module used for one-way repeated measures ANOVA in Chapter 15, extended to include Group as a between-subjects factor.

First: Return to Data → Select Cases → All cases to include all three time points.

T.4.2 Step 1: Restructure the data to wide format

The mixed ANOVA in SPSS requires data in wide format: one row per participant, with separate columns for each time point. The core_session.csv file is in long format (one row per observation). You need to reshape it.

  1. Click Data → Restructure
  2. Select Restructure selected variables into cases → click NextWait. This is the opposite direction. For wide-to-long, you would use this option. For long-to-wide (what we need here), choose Restructure selected cases into variables.
  3. Select Restructure selected cases into variablesNext
  4. In Identifier Variable(s), move id into the box
  5. In Index Variable, move time into the box
  6. Click Next through the remaining dialogs, accepting defaults
  7. Click Finish

SPSS will create a new dataset with one row per participant and columns named strength_kg.1, strength_kg.2, strength_kg.3 corresponding to the time-point order. Verify that the order corresponds to pre, mid, post — check by examining the first few rows against the original data. If the order differs, note it for the next step.

TipRename the restructured columns for clarity

After restructuring, rename strength_kg.1, strength_kg.2, strength_kg.3 to strength_pre, strength_mid, strength_post using Variable View. This prevents confusion when defining the within-subjects factor in the next step.

T.4.3 Step 2: Run the mixed ANOVA

  1. Click Analyze → General Linear Model → Repeated Measures
  2. In the Within-Subject Factor Name box, type Time
  3. Set Number of Levels to 3
  4. Click Add — “Time(3)” appears in the list
  5. Click Define
  6. Move strength_pre, strength_mid, and strength_post into the Within-Subjects Variables boxes (slots 1, 2, 3 respectively — ensure pre goes in slot 1, mid in slot 2, post in slot 3)
  7. Move group into the Between-Subjects Factor(s) box
  8. Click Options:
    • Under Display Means for, select group, Time, and group*Time
    • Check Compare main effects → set to Bonferroni
    • Check Descriptive statistics and Estimates of effect size
    • Click Continue
  9. Click Plots:
    • Move Time to the Horizontal Axis box
    • Move group to the Separate Lines box
    • Click AddContinue
  10. Click OK

T.4.4 Step 3: Interpret Part B output

Mauchly’s Test of Sphericity

Within-Subjects Effect Mauchly’s W df p Greenhouse-Geisser ε Huynh-Feldt ε
Time .932 2 .059 .935 .978

Interpretation: Mauchly’s test is not significant (p = .059), so the sphericity assumption is not violated. Use the Sphericity Assumed row in the next table.

Tests of Within-Subjects Effects

Source SS df MS F p η²_p
Time Sphericity Assumed 290.49 2 145.24 108.55 < .001 .652
Greenhouse-Geisser 290.49 1.87 155.34 108.55 < .001 .652
Time × group Sphericity Assumed 163.26 2 81.63 61.00 < .001 .513
Greenhouse-Geisser 163.26 1.87 87.30 61.00 < .001 .513
Error(Time) Sphericity Assumed 155.22 116 1.34
Greenhouse-Geisser 155.22 108.46 1.43

Because Mauchly’s test was non-significant, use the Sphericity Assumed row (the first row for each effect).

Tests of Between-Subjects Effects

Source SS df MS F p η²_p
Intercept 1,140,972.61 1 1,140,972.61 2,222.80 < .001
group 1,294.44 1 1,294.44 2.52 .117 .042
Error 29,772.65 58 513.32

Key decisions:

  1. Interaction first: Time × Group is F(2, 116) = 61.00, p < .001, η²_p = .513 — highly significant. Proceed to simple effects analysis before interpreting main effects.
  2. Main effect of Time: F(2, 116) = 108.55, p < .001, η²_p = .652 — significant, but interpret in the context of the interaction.
  3. Main effect of Group: F(1, 58) = 2.52, p = .117, η²_p = .042 — not significant. This reflects the fact that groups start similarly and only diverge over time.

T.4.5 Step 4: Conduct simple effects analysis

To decompose the significant Group × Time interaction, split the file by Group and run a one-way repeated measures ANOVA on Time separately within each group.

Split the file by Group:

  1. Click Data → Split File
  2. Select Organize output by groups
  3. Move group to the Groups Based on box
  4. Click OK

Run repeated measures ANOVA (same steps as Chapter 15):

  1. Click Analyze → General Linear Model → Repeated Measures
  2. Define Time with 3 levels; define the three time-point variables as before
  3. In Options, check Descriptive statistics, Estimates of effect size, and Compare main effects with Bonferroni
  4. Click OK

SPSS will produce separate output for each group. You will observe:

  • Control group: Time F is small and non-significant — strength does not meaningfully change over the program.
  • Training group: Time F is large and highly significant — strength increases progressively (consistent with Chapter 15 results: F(2, 58) = 116.0, p < .001, η²_p = .80).

Reset the file split after analysis:

  1. Click Data → Split File
  2. Select Analyze all cases, do not create groups
  3. Click OK

T.4.6 Step 5: Obtain partial omega-squared for Part B

As with Part A, use either the Statistical Calculators appendix tool or SPSS 31+ (Analyze → Power Analysis → General Linear Model) to obtain ω²_p for each effect — no hand calculation required.

The key distinction in a mixed ANOVA is that within-subjects effects (Time and the interaction) use the within-subjects error term (\(MS_{\text{error(W)}}\) from the Error(Time) row), while the between-subjects effect (Group) uses the between-subjects error (\(MS_{\text{Subjects/Group}}\) from the Tests of Between-Subjects Effects table). The calculator tool or SPSS handles this automatically once you supply the correct SS, df, and MS values from the two output tables.

For reference, the formulas are:

\[\omega^2_p(\text{within-subjects effect}) = \frac{SS_{\text{effect}} - df_{\text{effect}} \times MS_{\text{error(W)}}}{SS_{\text{effect}} + (N \cdot p - df_{\text{effect}}) \times MS_{\text{error(W)}}}\]

\[\omega^2_p(\text{Group}) = \frac{SS_{\text{Group}} - df_{\text{Group}} \times MS_{\text{Subjects/Group}}}{SS_{\text{Group}} + (N - df_{\text{Group}}) \times MS_{\text{Subjects/Group}}}\]

where \(p\) is the number of within-subjects levels (3 time points here) and \(N\) is total participants. For our example, the resulting values are: ω²_p(Time) = .54, ω²_p(Group × Time) = .40, ω²_p(Group) = .025.


T.5 Part C: Interaction plot in SPSS

SPSS generates a basic profile plot when you specify it in the Plots dialog. For a more publication-ready figure, follow these steps to create an error bar chart:

  1. Click Graphs → Legacy Dialogs → Error Bars
  2. Select Summaries for groups of casesDefine
  3. Move strength_kg to the Variable box
  4. Move time to the Category Axis box
  5. Move group to the Define Clusters by box
  6. Set Bars Represent to Standard error of mean (95%)
  7. Click OK

Double-click the chart to open the Chart Editor. Adjust colors, line styles, axis labels, and font sizes to match your publication style. Export via File → Export as an EMF or PNG file.


T.6 Part D: APA-style write-up examples

T.6.1 Part A write-up (between-subjects, no interaction)

A 2 (Sex: female, male) × 2 (Group: control, training) between-subjects ANOVA was conducted with post-test strength (kg) as the dependent variable. Levene’s test indicated equality of error variances, F(3, 56) = 1.84, p = .150. The Sex × Group interaction was not significant, F(1, 56) = 0.56, p = .457, η²_p = .010, indicating that the effect of training on post-test strength was similar for male and female participants. The main effect of Group was significant, F(1, 56) = 5.22, p = .026, η²_p = .085, ω²_p = .066, with the training group (M = 85.06 kg, SD = 12.48) demonstrating greater post-test strength than the control group (M = 77.14 kg, SD = 13.98). The main effect of Sex was not significant, F(1, 56) = 0.00, p = .974, η²_p < .001.

T.6.2 Part B write-up (mixed ANOVA, significant interaction)

A 2 (Group: control, training) × 3 (Time: pre, mid, post) mixed ANOVA was conducted on strength_kg, with Group as the between-subjects factor and Time as the within-subjects factor. Mauchly’s test indicated that sphericity was not violated, W = .93, p = .059. The Group × Time interaction was statistically significant, F(2, 116) = 61.00, p < .001, η²_p = .51, ω²_p = .40. To decompose the interaction, simple effects analysis was conducted by running separate one-way repeated measures ANOVAs for each group. Within the training group, there was a significant effect of Time, F(2, 58) = 116.0, p < .001, η²_p = .80, with post-hoc Bonferroni tests confirming significant increases from pre (M = 79.67 kg) to mid (M = 81.69 kg, Δ = 2.02 kg) and from pre to post (M = 85.06 kg, Δ = 5.39 kg). Within the control group, the effect of Time was not significant. The main effect of Time was significant, F(2, 116) = 108.55, p < .001, η²_p = .65; the main effect of Group was not significant, F(1, 58) = 2.52, p = .117, η²_p = .04.


T.7 Troubleshooting

“I cannot find the time = "post" filter / Select Cases doesn’t work”: Confirm the actual string value stored in the time variable by opening Variable View and checking the Values column, or running Analyze → Descriptive Statistics → Frequencies on time. Use the exact string as stored (it may be uppercase, lowercase, or numeric).

“The restructured data columns are in the wrong order (post, mid, pre instead of pre, mid, post)”: SPSS restructures based on the alphabetical or numerical sort order of the index variable. If your time variable is a string, it will sort alphabetically (“mid,” “post,” “pre”). Rename or re-order the wide columns manually in Variable View before defining the repeated measures factor.

“Mauchly’s test output doesn’t appear”: Mauchly’s test is only produced for within-subjects factors with three or more levels. If you defined Time as having only 2 levels, SPSS skips the test. Verify that all three time-point columns are assigned to the correct slots in the Within-Subjects Variables grid.

“The Interaction row is missing from the Tests of Within-Subjects Effects table”: This occurs when the between-subjects factor (group) was not moved to the Between-Subjects Factor(s) box in the Repeated Measures dialog. Re-run the analysis and confirm Group is specified as a between-subjects factor, not left unspecified.

“Simple effects SPSS output shows only one group”: After splitting the file by Group, only the last group’s output may display if the split variable was not recognized. Verify the split is active by checking for the group-filter label at the bottom of the SPSS Data Editor window before running the simple effects analysis.

“My η²_p values differ slightly from those in the textbook”: Small discrepancies can arise from rounding in intermediate steps. The values computed by SPSS from the raw data are the authoritative figures. If the discrepancy exceeds .01, check that you are using the correct subset of data (all cases for Part B; post-test only for Part A) and the correct within-subjects error term for each effect.


T.8 Practice exercises

Use core_session.csv for all exercises.

Exercise 1: Run the same 2(Sex) × 2(Group) between-subjects ANOVA from Part A, but use vo2_mlkgmin as the outcome variable at post-test. Does the interaction reach significance? Does the Group main effect remain significant? Compare η²_p values across the two outcomes (strength vs. VO₂max) and interpret the difference.

Exercise 2: Run a 2(Group) × 3(Time) mixed ANOVA using sprint_20m_s as the dependent variable. Inspect Mauchly’s test. Is the Group × Time interaction significant? Produce an interaction profile plot and describe the pattern in 2–3 sentences.

Exercise 3: The mixed ANOVA for strength_kg yielded a Group × Time interaction of η²_p = .513. Use GPower (F-test: ANOVA: Repeated Measures, between-within interaction) to determine the minimum sample size needed to detect this interaction with power = .80, α = .05, two groups, three measurement time points, and a within-subject correlation of r* = .97. How does this compare to the N = 60 used in the study?

Exercise 4: Run the Group × Time mixed ANOVA on strength_kg and then conduct simple effects analysis by splitting the file by Group. For the Training group, run Bonferroni-corrected pairwise comparisons across Time. Report the mean differences, confidence intervals, and Cohen’s d for each pair (pre–mid, pre–post, mid–post), following the format used in Chapter 15’s worked example.