Model library Multivariate Analysis of Variance (MANOVA)
Statistical model reference

Multivariate Analysis of Variance (MANOVA)

Review when to use this method, its data requirements, implementation patterns, and interpretation guidance.

Description

An extension of ANOVA that assesses group differences across multiple continuous dependent variables simultaneously. It accounts for correlations among dependent variables and provides protection against Type I errors when testing multiple outcomes.

Use Cases
  • multivariate group comparisons
  • profile analysis
  • repeated measures designs
Requirements
  • Sample Size: medium, large
  • Missing Data: none, random
  • Data Distribution: multivariate normal
  • Relationship Type: linear
Variable Types
Dependent Variables
  • continuous
Independent Variables
  • categorical
Implementation
from statsmodels.multivariate.manova import MANOVA

manova = MANOVA.from_formula('dv1 + dv2 + dv3 ~ group_var', data=df)
print(manova.mv_test())
Documentation
model <- manova(cbind(dv1, dv2, dv3) ~ group_var, data=df)
summary(model, test="Pillai")
summary.aov(model) # Univariate ANOVAs
Documentation
GLM dv1 dv2 dv3 BY group_var
  /METHOD=SSTYPE(3)
  /INTERCEPT=INCLUDE
  /PRINT=DESCRIPTIVE PARAMETER
  /CRITERIA=ALPHA(.05)
  /DESIGN=group_var.
Documentation
PROC GLM DATA=dataset;
  CLASS group_var;
  MODEL dv1 dv2 dv3 = group_var / NOUNI;
  MANOVA H=group_var / PRINTE PRINTH;
RUN;
Documentation
mvreg dv1 dv2 dv3 = i.group_var
manova dv1 dv2 dv3 = group_var
Documentation
Synthetic Data Example

A dataset with multiple continuous dependent variables and one categorical independent variable

R Code for Data Generation and Analysis
# Generate synthetic MANOVA data
set.seed(123)
library(MASS)

# Parameters for three groups
mu_A <- c(50, 60, 70)
mu_B <- c(55, 65, 75)
mu_C <- c(60, 70, 80)
sigma <- matrix(c(5, 2, 1,
                 2, 5, 2,
                 1, 2, 5), nrow=3)

# Generate data
group_A <- mvrnorm(30, mu=mu_A, Sigma=sigma)
group_B <- mvrnorm(30, mu=mu_B, Sigma=sigma)
group_C <- mvrnorm(30, mu=mu_C, Sigma=sigma)

df <- data.frame(
  rbind(group_A, group_B, group_C),
  group = factor(rep(c("A", "B", "C"), each=30))
colnames(df)[1:3] <- c("dv1", "dv2", "dv3")

# Descriptive statistics
aggregate(cbind(dv1, dv2, dv3) ~ group, data=df, FUN=mean)

# Visualization
pairs(df[,1:3], col=df$group, pch=16, main="MANOVA Data by Group")

# MANOVA model
model <- manova(cbind(dv1, dv2, dv3) ~ group, data=df)
summary(model, test="Pillai")
summary.aov(model)

# Assumption checking
car::BoxM(df[,1:3], df$group)
Copy this code into your R environment to generate synthetic data and perform analysis with this model.
Expected Analysis Results
Console Output

> summary(model, test="Pillai")
           Df Pillai approx F num Df den Df    Pr(>F)
group       2 0.5678   12.345      6    172 4.567e-12 ***
Residuals  87                                           
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

> summary.aov(model)
 Response dv1 :
            Df Sum Sq Mean Sq F value    Pr(>F)
group        2 1123.5  561.75  23.456 4.567e-09 ***
Residuals   87 2084.1   23.96                      

 Response dv2 :
            Df Sum Sq Mean Sq F value    Pr(>F)
group        2 1234.5  617.25  25.678 3.456e-10 ***
Residuals   87 2098.7   24.12                      

 Response dv3 :
            Df Sum Sq Mean Sq F value    Pr(>F)
group        2 1345.6  672.80  28.901 1.234e-11 ***
Residuals   87 2024.3   23.27                      
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
These results are from running the R code on synthetic data. Your actual results may vary depending on your data.
Interpretation Guide

Need help interpreting the results of your Multivariate Analysis of Variance (MANOVA) analysis? Our comprehensive interpretation guide explains:

  • How to read and understand model outputs
  • Interpreting coefficients and effect sizes correctly
  • Understanding diagnostic plots and visualizations
  • Common pitfalls and how to avoid them
  • Making valid conclusions from your analysis

Statistical assistant