Two-Way ANOVA using SPSS

Posted on
ANOVA SPSS Sum of Squares Two-Way

This tutorial is going to take the theory learned in our Two-Way ANOVA tutorial and walk through how to apply it using SPSS. We will use the Moore dataset which can be downloaded using this link.

The data is from an experimental study which consists of subjects in a “social-psychological experiment who were faced with manipulated disagreement from a partner of either of low or high status. The subjects could either conform to the partner’s judgment or stick with their own judgment.” (John Fox, Sanford Weisberg and Brad Price (2018). carData: Companion to Applied Regression Data Sets. R package version 3.0-2. https://CRAN.R-project.org/package=carData).

We are interested in exploring an individual’s conformity based on their partner’s status:

  • Low
  • High

We are also interested in exploring whether their F-score category (a measure of authoritarianism) affects outcomes or interacts with partner status. The three factor levels are:

  • Low
  • Medium
  • High

Our sample size is \(N = 45\). First, let’s inspect the data for outliers or funky distributions by creating a boxplot of conformity scores within each combination of partner.status and fcategory. To create the boxplot in SPSS, go to Graphs \(\rightarrow\) Chart Builder…

The Chart Builder window will open. Select Boxplot.

Click and drag the second option (clustered) to the Chart Preview window.

Right click on the conformity variable and change it’s type to Scale (if it’s not already), then click and drag conformity to the y-axis box. Then click and drag fcategory to the x-axis, and partner.status to the cluster on x box.

Note how the order of variables on the x-axis is automatically alphabetical. We want to change this to read “Low, Medium, High”. Do this by selecting the x-axis. Then we will use the arrows to adjust the Order.

Then click OK. This is our output plot:

This figure allows us to get a sense of the distribution of the outcome within each factor level, though it makes it a little difficult to immediately see if an interaction is present. An interaction plot will provide this information for us. We can request the interaction plot when we run the actual ANOVA. We do this in SPSS by going to Analyze \(\rightarrow\) General Linear Model \(\rightarrow\) Univariate.

We select conformity as our Dependent Variable, and partner.status and fcategory as our Fixed Factor(s). Then click on Model…

The Univariate Model window will open. Verify that the Full Factorial button is selected. This tells SPSS to estimate the model that has both main effects plus the interaction.

Click Continue.

Next, we’ll request an interaction plot. This will show the means for the outcome within each level of one of the factors, with separate lines for the other factor. In an interaction plot, parallel lines indicate that no interaction is present because the mean differences in the first factor are the same regardless of the level of the other factor. Non-parallel lines mean that an interaction is likely present. In other words, the mean differences on the first factor depend on the the level of the second factor.

Click Plots… to open the Univariate: Profile Plots window. We will create two plots. One of fcategory by partner.status, and one of partner.status by fcategory. Looking at both will allow us to investigate the interaction from two perspectives.

Select partner.status for the Horizontal Axis and fcategory for Separate Lines, then click Add. Next, select fcategory for the Horizontal Axis and partner.status for Separate Lines. Click Add again. You will have two plots:

Click Continue, then click OK.

The first thing to investigate is the significance of the interaction. If it is non-significant, we can proceed to looking at the main effects. However, if the interaction is significant, the main effects will not be very helpful, as we will need to explore when each factor is significant given levels of the other factor. The significance tests appear in the Test of Between-Subjects Effects table:

This table gives us:

  • Type III Sum of Squares: The sum of squared errors for each model term
  • df: The degrees of freedom
  • Mean Square: \(\frac{SS}{df}\)
  • F: The F statistic for each variable
  • Sig.: The p-value associated with each term (\(\lt 0.05\) indicates significance)

We find \(p = 0.002\) for partner.status and \(p = 0.431\) for fcategory. Most importantly, we see that \(p = 0.023\) for partner.status*fcategory. This tells us that the effect of partner status will depend on levels of F-category, or vice versa. The next step is to determine when each factor is significant.

We can get a visual sense of the interaction by looking at the interaction plots we requested:

The top figure shows us that, among those in the fcategory = high group, the effect of partner.status is small; the line is relatively horizontal. However, when fcategory = low or fcategory = medium, the effect of partner.status is pronounced; the means are different when moving from partner.status = high to partner.status = low.

The bottom figure shows us the interaction from a different perspective. We see that the effect of fcategory is different depending on if we’re talking about those with partner.status = high or partner.status = low.

What neither figure tells us is which of these effects is significant. For example, in the top figure we saw that the effect of partner.status appeared weak among the factory = high group, but it was larger for the other two fcategory levels. Perhaps partner.status has a significant effect on conformity, but only when fcategory is not high. To test this, we’ll need to perform something akin to a one-way ANOVA for partner.status within each level of fcategory. However, the correct F-test will utilize all of the information from the full two-way factorial model. To get this test, it is necessary to use SPSS syntax.

To run the model with syntax, start out using the menus to set up the model just like we did above. However, once we are ready to run the model we will click on Paste instead of OK. The syntax editor will open with the syntax to run the model like we did before.

Add the following line of syntax:

/EMMEANS=TABLES(partner.status*fcategory) COMPARE(partner.status) .

The syntax should look something like:

Highlight everything and click Run.

Look for the table named Univariate Tests to find the specific tests we requested in the syntax.

The table tells us that partner.status is indeed significant when fcategory is low or medium, but not when it is high. Consequently, we can follow up with pairwise comparisons for partner.status within the two significant fcategory levels. We’ll see this in the Pairwise Comparisons table.

With only two levels of the partner.status factor, this table isn’t really necessary. It is more informative when we want to do post hoc pairwise comparisons of more than two levels. This would be the case if we assessed the effect of fcategory within levels of partner.status. To do this, we make a slight change to our syntax, swapping out partner.status with fcategory in the COMPARE() function:

Looking again at the Univariate Tests box:

We do not find a significant result for the joint tests that 1) all fcategory means are equal when partner.status = low, and 2) all fcategory means are equal when partner.status = high. If we did, we would again turn to the pairwise comparisons table to identify which means were significantly different given each partner.status level.