R 编程中的 MANOVA 测试
多元方差分析 (MANOVA)只是具有多个因变量的 ANOVA(方差分析)。它是 ANOVA 的延续。在 ANOVA 中,我们通过独立分组变量测试一个连续因变量的统计差异。 MANOVA 通过采用多个连续因变量并将它们共同捆绑成一个加权线性复合变量来继续此分析。 MANOVA 比较新创建的组合是否因自变量的不同水平或组而变化。可以非常轻松地在 R 编程中执行此 MANOVA 测试。
例如,让我们进行一个实验,我们对两组大鼠进行两次治疗,并获取大鼠的体重和身高。在这种情况下,大鼠的体重和身高是两个因变量,假设两者共同受到治疗差异的影响。可以使用多元方差分析来检验这一假设。
MANOVA的解释
如果全局多变量检验很重要,则假设相应的效果很重要。在这种情况下,接下来的问题是决定治疗是否只影响身高、体重或两者兼而有之。换句话说,我们想要区分导致显着全局效应的特定因变量。为了澄清这个问题,使用单向方差分析来分别测试每个因变量。
MANOVA 的假设
MANOVA 可用于特定条件:
- 因变量应在组内正态分布。
- 预测变量范围内的方差同质性。
- 每个单元格中所有协变量对、所有因变量对以及所有因变量-协变量对之间的线性关系。
R中的实现
R 提供了一种方法manova()来执行 MANOVA 测试。 “manova”类与“aov”类的不同之处在于选择不同的汇总方法。函数manova()调用 aov,然后将类“manova”添加到每个层的结果对象中。
Syntax:
manova(formula, data = NULL, projections = FALSE, qr = TRUE, contrasts = NULL, …)
Parameters:
formula: A formula specifying the model.
data: A data frame in which the variables specified in the formula will be found. If missing, the variables are searched for in the standard way.
projections: Logical flag
qr: Logical flag
contrasts: A list of contrasts to be used for some of the factors in the formula.
…: Arguments to be passed to lm, such as subset or na.action
例子:
要在 R 中执行 MANOVA 测试,让我们采用iris数据集。
R
# R program to illustrate
# MANOVA test
# Import required library
library(dplyr)
# Taking iris data set
myData = iris
# Show a random sample
set.seed(1234)
dplyr::sample_n(myData, 10)
R
# Taking two dependent variable
sepal = iris$Sepal.Length
petal = iris$Petal.Length
# MANOVA test
result = manova(cbind(Sepal.Length, Petal.Length) ~ Species,
data = iris)
summary(result)
输出:
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.5 2.5 4.0 1.3 versicolor
2 5.6 2.5 3.9 1.1 versicolor
3 6.0 2.9 4.5 1.5 versicolor
4 6.4 3.2 5.3 2.3 virginica
5 4.3 3.0 1.1 0.1 setosa
6 7.2 3.2 6.0 1.8 virginica
7 5.9 3.0 4.2 1.5 versicolor
8 4.6 3.1 1.5 0.2 setosa
9 7.9 3.8 6.4 2.0 virginica
10 5.1 3.4 1.5 0.2 setosa
要知道不同物种之间的萼片和花瓣长度是否存在任何重要差异,请执行 MANOVA 测试。因此,函数manova()可以按如下方式使用。
R
# Taking two dependent variable
sepal = iris$Sepal.Length
petal = iris$Petal.Length
# MANOVA test
result = manova(cbind(Sepal.Length, Petal.Length) ~ Species,
data = iris)
summary(result)
输出:
Df Pillai approx F num Df den Df Pr(>F)
Species 2 0.9885 71.829 4 294 < 2.2e-16 ***
Residuals 147
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
从上面的输出可以看出,这两个变量在 Species 之间存在高度显着差异。