First let’s load in the sample data. We have organized the data file in a column-wise format, where each row is a subject. This is in preparation for a multivariate approach to the ANOVA. Here we won’t both with the univariate approach, since we are interested in the sphericity tests and the corrected values of the F test.

```
fname <- "http://www.gribblelab.org/stats2019/data/2wayrepdata.csv"
mydata <- read.table(fname, sep=",", header=TRUE)
mydata
```

```
## subject a1b1 a1b2 a1b3 a2b1 a2b2 a2b3
## 1 1 420 420 480 480 600 780
## 2 2 480 480 540 660 780 780
## 3 3 540 660 540 480 660 720
## 4 4 480 480 600 360 720 840
## 5 5 540 600 540 540 720 780
```

Let’s extract the data matrix (just the numeric values) from the data frame:

```
dm <- as.matrix(mydata[1:5, 2:7])
dm
```

```
## a1b1 a1b2 a1b3 a2b1 a2b2 a2b3
## 1 420 420 480 480 600 780
## 2 480 480 540 660 780 780
## 3 540 660 540 480 660 720
## 4 480 480 600 360 720 840
## 5 540 600 540 540 720 780
```

Now let’s create a multivariate linear model object:

`mlm1 <- lm(dm ~ 1)`

Next we are going to use the `Anova()`

command in the `car`

package, so we have to first load the package. We also have to define a data frame that contains the within-subjects factors. If you don’t have the `car`

package installed, just type `install.packages("car")`

and R will download it and install it.

`library(car)`

`## Loading required package: carData`

```
af <- factor(c("a1","a1","a1","a2","a2","a2"))
bf <- factor(c("b1","b2","b3","b1","b2","b3"))
myfac <- data.frame(factorA=af,factorB=bf)
myfac
```

```
## factorA factorB
## 1 a1 b1
## 2 a1 b2
## 3 a1 b3
## 4 a2 b1
## 5 a2 b2
## 6 a2 b3
```

Now we will define the anova using `Anova()`

:

```
mlm1.aov <- Anova(mlm1, idata = myfac, idesign = ~factorA*factorB, type="III")
summary(mlm1.aov, multivariate=FALSE)
```

```
## Warning in summary.Anova.mlm(mlm1.aov, multivariate = FALSE): HF eps > 1
## treated as 1
```

```
##
## Univariate Type III Repeated-Measures ANOVA Assuming Sphericity
##
## Sum Sq num Df Error SS den Df F value Pr(>F)
## (Intercept) 10443000 1 33600 4 1243.214 3.861e-06 ***
## factorA 147000 1 33600 4 17.500 0.013881 *
## factorB 138480 2 39120 8 14.159 0.002354 **
## factorA:factorB 67920 2 23280 8 11.670 0.004246 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Mauchly Tests for Sphericity
##
## Test statistic p-value
## factorB 0.76047 0.66317
## factorA:factorB 0.96131 0.94254
##
##
## Greenhouse-Geisser and Huynh-Feldt Corrections
## for Departure from Sphericity
##
## GG eps Pr(>F[GG])
## factorB 0.80676 0.005291 **
## factorA:factorB 0.96275 0.004857 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## HF eps Pr(>F[HF])
## factorB 1.271242 0.002354093
## factorA:factorB 1.838414 0.004245732
```

Note how the formula uses the same names as in the `myfac`

data frame we defined.

The first part of the output lists the omnibus F tests for the main effects and the interaction effect. We then see the Mauchly tests of sphericity. We see tests for the main effect of factorB, and the factorA:factorB interaction effect. We don’t see a test of the main effect of factorA, because in this case, factorA has only two levels … and so there is no variances of differences-between-groups… since there are only two levels, there is only a single variance of differences (between the two levels). We then see Greenhouse-Geisser and Huynh-Felft corrections.

The factorA:factorB interaction is significant, so we want to conduct so-called simple main effects analyses. This would be testing the effects of one factor (e.g. factorB), separately within each level of factorA (or vice-versa). In a between-subjects two-factor ANOVA, simple main effects are evaluated by doing separate one-way ANOVAs, but using the MSerror term from the overall two-factor analysis as the error term. For within-subjects designs it’s probably better to use separate error terms for each analysis, since the sphericity assumption is likely not true, and repeated measures ANOVA Is sensitive (more so than between-subjects ANOVA) to violations of the sphericity assumption. Therefore we can in fact literally run separate single-factor repeated measures ANOVAs, with one factor, within levels of the other factor.

The approach for computing linear contrasts (including pairwise tests) is the same as for a single-factor repeated measures design. We can either compute F ratios by taking the appropriate MSerr term from the ANOVA output (this approach assumes sphericity), or we can simple compute differences scores and perform t-tests (this doesn’t assume sphericity). Correcting for Type-I error is up to you — you could use a Bonferroni adjustment, or compute Tukey probabilities, etc.

A split plot design is a mixed design in which there are some repeated measures factor(s) and some between-subjects factor(s). Let’s load in some sample data for a study with one repeated measures and one between subjects factor:

```
fname <- "http://www.gribblelab.org/stats2019/data/splitplotdata.csv"
mdata <- read.table(fname, sep=",", header=TRUE)
mdata
```

```
## subject a1 a2 a3 gender
## 1 1 420 420 480 f
## 2 2 480 480 540 f
## 3 3 540 660 540 f
## 4 4 480 480 600 f
## 5 5 540 600 540 f
## 6 6 439 434 495 m
## 7 7 497 497 553 m
## 8 8 555 675 553 m
## 9 9 492 496 615 m
## 10 10 555 617 555 m
```

We have three levels of a repeated measures factor (a1, a2, a3) and two levels of a between-subjects factor, gender (m,f), and 10 subjects.

First as before we extract the data corresponding to the dependent variable from the data frame:

```
dm <- as.matrix(mdata[1:10, 2:4])
dm
```

```
## a1 a2 a3
## 1 420 420 480
## 2 480 480 540
## 3 540 660 540
## 4 480 480 600
## 5 540 600 540
## 6 439 434 495
## 7 497 497 553
## 8 555 675 553
## 9 492 496 615
## 10 555 617 555
```

Then we formulate our multivariate model:

`mlm <- lm(dm ~ 1 + gender, data=mdata)`

Note how now `dm`

depends not just on a constant but also on `gender`

. Next we design a data frame that contains the design of the repeated measures factor:

```
af <- factor(c("a1","a2","a3"))
myfac <- data.frame(factorA=af)
myfac
```

```
## factorA
## 1 a1
## 2 a2
## 3 a3
```

Now we use the `Anova()`

function to perform the split plot anova:

```
mlm.aov <- Anova(mlm, idata=myfac, idesign = ~factorA, type="III")
summary(mlm.aov, multivariate=FALSE)
```

```
##
## Univariate Type III Repeated-Measures ANOVA Assuming Sphericity
##
## Sum Sq num Df Error SS den Df F value Pr(>F)
## (Intercept) 4056000 1 71368 8 454.6592 2.461e-08 ***
## gender 1733 1 71368 8 0.1942 0.6711
## factorA 6240 2 40655 16 1.2279 0.3191
## gender:factorA 4 2 40655 16 0.0007 0.9993
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Mauchly Tests for Sphericity
##
## Test statistic p-value
## factorA 0.15097 0.0013368
## gender:factorA 0.15097 0.0013368
##
##
## Greenhouse-Geisser and Huynh-Feldt Corrections
## for Departure from Sphericity
##
## GG eps Pr(>F[GG])
## factorA 0.54082 0.3031
## gender:factorA 0.54082 0.9840
##
## HF eps Pr(>F[HF])
## factorA 0.5590067 0.3043066
## gender:factorA 0.5590067 0.9858722
```

The rules and approach for further tests following significant omnibus ANOVA test(s) are no different than before.