pingouin.mixed_anova#

pingouin.mixed_anova(data=None, dv=None, within=None, subject=None, between=None, correction='auto', effsize='np2')[source]#

Mixed-design (split-plot) ANOVA.

Parameters:
datapandas.DataFrame

DataFrame. Note that this function can also directly be used as a Pandas method, in which case this argument is no longer needed.

dvstring

Name of column containing the dependent variable.

withinstring

Name of column containing the within-subject factor (repeated measurements).

subjectstring

Name of column containing the between-subject identifier.

betweenstring

Name of column containing the between factor.

correctionstring or boolean

If True, return Greenhouse-Geisser corrected p-values for the within factor and the interaction. If ‘auto’ (default), compute Mauchly’s test of sphericity to determine whether the p-values needs to be corrected.

effsizestr

Effect size. Must be one of ‘np2’ (partial eta-squared), ‘n2’ (eta-squared) or ‘ng2’(generalized eta-squared).

Returns:
aovpandas.DataFrame

ANOVA summary:

  • 'Source': Names of the factor considered

  • 'ddof1': Degrees of freedom (numerator)

  • 'ddof2': Degrees of freedom (denominator)

  • 'F': F-values

  • 'p_unc': Uncorrected p-values

  • 'np2': Partial eta-squared effect sizes

  • 'eps': Greenhouse-Geisser epsilon factor (= index of sphericity)

  • 'p_GG_corr': Greenhouse-Geisser corrected p-values

  • 'W_spher': Sphericity test statistic

  • 'p_spher': p-value of the sphericity test

  • 'sphericity': sphericity of the data (boolean)

Notes

Data are expected to be in long-format (even the repeated measures). If your data is in wide-format, you can use the pandas.melt() function to convert from wide to long format.

The Greenhouse-Geisser epsilon and Mauchly’s test of sphericity are computed from the pooled within-group covariance matrix of the repeated measurements, i.e. after removing the between-group differences in means. This is the same as SPSS, JASP and the afex / car R packages. The same epsilon is used to correct the p-values of both the within factor and the interaction.

Missing values are automatically removed using a strict listwise approach (= complete-case analysis). In other words, any subject with one or more missing value(s) is completely removed from the dataframe prior to running the test. This could drastically decrease the power of the ANOVA if many missing values are present. In that case, we strongly recommend using linear mixed effect modelling, which can handle missing values in repeated measures.

Warning

If the between-subject groups are unbalanced (= unequal sample sizes), a type II ANOVA will be computed. Note however that SPSS, JAMOVI and JASP by default return a type III ANOVA, which may lead to slightly different results.

Examples

For more examples, please refer to the Jupyter notebooks

Compute a two-way mixed model ANOVA.

>>> from pingouin import mixed_anova, read_dataset
>>> df = read_dataset("mixed_anova")
>>> aov = mixed_anova(dv="Scores", between="Group", within="Time", subject="Subject", data=df)
>>> aov.round(3)
        Source     SS  DF1  DF2     MS      F  p_unc    np2    eps
0        Group  5.460    1   58  5.460  5.052  0.028  0.080    NaN
1         Time  7.628    2  116  3.814  4.027  0.020  0.065  0.998
2  Interaction  5.167    2  116  2.584  2.728  0.070  0.045  0.998

Same but reporting a generalized eta-squared effect size. Notice how we can also apply this function directly as a method of the dataframe, in which case we do not need to specify data=df anymore.

>>> df.mixed_anova(
...     dv="Scores", between="Group", within="Time", subject="Subject", effsize="ng2"
... ).round(3)
        Source     SS  DF1  DF2     MS      F  p_unc    ng2    eps
0        Group  5.460    1   58  5.460  5.052  0.028  0.031    NaN
1         Time  7.628    2  116  3.814  4.027  0.020  0.042  0.998
2  Interaction  5.167    2  116  2.584  2.728  0.070  0.029  0.998