El análisis de varianza multivariante ( MANOVA ) es un ANOVA con dos o más variables de resultado (o respuesta) continuas.
El MANOVA unidireccional prueba simultáneamente las diferencias estadísticas para las variables de respuesta múltiple mediante una agrupación de variables.
Por ejemplo, podemos realizar un experimento en el que le damos dos tratamientos (A y B) a dos grupos de ratones, y estamos interesados en el peso y la altura de los ratones. En ese caso, el peso y la altura de los ratones son nuestras variables de resultado (o dependientes), y nuestra hipótesis es que ambos juntos se ven afectados por la diferencia en el tratamiento. Se podría utilizar un análisis de varianza multivariado para probar esta hipótesis.
El procedimiento de MANOVA se puede resumir de la siguiente manera:
En un experimento para inhibir un tumor, se quiere investigar el efecto del sexo (S) y de la temperatura ambiental (T). Se consideran las variables: Y1 =peso inicial, Y2 =peso final, Y3 =peso del tumor.
pesos <-c (18.15,16.51, 0.24, 19.15, 19.49, 0.16, 18.68,
19.50, 0.32, 18.35, 19.81, 0.17, 19.54, 19.84,
0.20, 20.58, 19.44, 0.22,21.27, 23.30, 0.33,
18.87, 22.00, 0.25, 19.57, 22.30, 0.45, 20.66,
21.08, 0.20, 20.15, 18.95, 0.35, 21.56, 20.34,
0.20,20.74, 16.69, 0.31, 20.22, 19.00, 0.18,
20.02, 19.26, 0.41, 18.38, 17.92, 0.30, 17.20,
15.90, 0.28, 20.85, 19.90, 0.17)
y1<-pesos[c(T,F,F)]
y2<-pesos[c(F,T,F)]
y3<-pesos[c(F,F,T)]
temp <-factor(c(rep(4,6),rep(20,6),rep(34,6)))
sex<-factor(rep(c(rep("M",3),rep("H",3)),3))
ratas<-data.frame(y1,y2,y3,temp,sex)
head(ratas)
## y1 y2 y3 temp sex
## 1 18.15 16.51 0.24 4 M
## 2 19.15 19.49 0.16 4 M
## 3 18.68 19.50 0.32 4 M
## 4 18.35 19.81 0.17 4 H
## 5 19.54 19.84 0.20 4 H
## 6 20.58 19.44 0.22 4 H
ggboxplot(ratas,x="sex",y=c("y1","y2"),
merge=T,palette = "jco")
ggboxplot(ratas,x="temp",y=c("y1","y2"),
merge=T,palette = "jco")
aggregate(ratas[,1:3],list(ratas$sex,ratas$temp),mean)
## Group.1 Group.2 y1 y2 y3
## 1 H 4 19.49000 19.69667 0.1966667
## 2 M 4 18.66000 18.50000 0.2400000
## 3 H 20 20.79000 20.12333 0.2500000
## 4 M 20 19.90333 22.53333 0.3433333
## 5 H 34 18.81000 17.90667 0.2500000
## 6 M 34 20.32667 18.31667 0.3000000
aggregate(ratas[,1:3],list(ratas$sex,ratas$temp),length)
## Group.1 Group.2 y1 y2 y3
## 1 H 4 3 3 3
## 2 M 4 3 3 3
## 3 H 20 3 3 3
## 4 M 20 3 3 3
## 5 H 34 3 3 3
## 6 M 34 3 3 3
aggregate(ratas[,1:3],list(ratas$sex,ratas$temp),sd)
## Group.1 Group.2 y1 y2 y3
## 1 H 4 1.1158405 0.2227854 0.02516611
## 2 M 4 0.5002999 1.7233978 0.08000000
## 3 H 20 0.7139328 1.0814034 0.08660254
## 4 M 20 1.2342339 0.6806859 0.10066446
## 5 H 34 1.8626057 2.0000333 0.07000000
## 6 M 34 0.3716629 1.4147202 0.11532563
normal<-function(vec){
shapiro.test(vec)$p
}
aggregate(ratas[,1:3],list(ratas$sex,ratas$temp),normal)
## Group.1 Group.2 y1 y2 y3
## 1 H 4 0.9258674 0.128686974 0.7804408
## 2 M 4 0.9338670 0.005540978 1.0000000
## 3 H 20 0.6975632 0.666926507 0.0000000
## 4 M 20 0.5491264 0.424350926 0.7804408
## 5 H 34 0.6155710 0.988973545 0.2737737
## 6 M 34 0.5202800 0.175746733 0.8564460
library(MVN)
mvn(ratas[,c(1,2,3)],mvnTest = "hz")
## $multivariateNormality
## Test HZ p value MVN
## 1 Henze-Zirkler 0.7029199 0.151332 YES
##
## $univariateNormality
## Test Variable Statistic p value Normality
## 1 Shapiro-Wilk y1 0.9686 0.7711 YES
## 2 Shapiro-Wilk y2 0.9574 0.5518 YES
## 3 Shapiro-Wilk y3 0.9240 0.1519 YES
##
## $Descriptives
## n Mean Std.Dev Median Min Max 25th 75th Skew
## y1 18 19.6633333 1.20945783 19.795 17.20 21.56 18.7275 20.6400 -0.26369339
## y2 18 19.5127778 1.95549243 19.495 15.90 23.30 18.9625 20.2300 -0.03861505
## y3 18 0.2633333 0.08574929 0.245 0.16 0.45 0.2000 0.3175 0.59716549
## Kurtosis
## y1 -1.0800902
## y2 -0.5963898
## y3 -0.8050386
library(biotools)
## ---
## biotools version 3.1
library(car)
boxM(ratas[,c(1,2,3)],grouping = ratas[,c(4)])
##
## Box's M-test for Homogeneity of Covariance Matrices
##
## data: ratas[, c(1, 2, 3)]
## Chi-Sq (approx.) = 3.7453, df = 12, p-value = 0.9876
boxM(ratas[,c(1,2,3)],grouping = ratas[,c(5)])
##
## Box's M-test for Homogeneity of Covariance Matrices
##
## data: ratas[, c(1, 2, 3)]
## Chi-Sq (approx.) = 11.034, df = 6, p-value = 0.08734
leveneTest(ratas$y1~ratas$sex)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 1 0.7524 0.3985
## 16
leveneTest(ratas$y1~ratas$temp)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 2 0.3282 0.7253
## 15
leveneTest(ratas$y2~ratas$sex)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 1 1.2716 0.2761
## 16
leveneTest(ratas$y2~ratas$temp)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 2 0.8605 0.4428
## 15
leveneTest(ratas$y3~ratas$sex)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 1 1.3213 0.2673
## 16
leveneTest(ratas$y3~ratas$temp)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 2 1.0105 0.3875
## 15
mod1<-manova(cbind(y1,y2,y3)~sex+temp,data=ratas)
summary(mod1)
## Df Pillai approx F num Df den Df Pr(>F)
## sex 1 0.21483 1.0945 3 12 0.38905
## temp 2 0.80234 2.9030 6 26 0.02656 *
## Residuals 14
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#modelo con interacción
mod2<-manova(cbind(y1,y2,y3)~sex*temp,data=ratas)
summary(mod2)
## Df Pillai approx F num Df den Df Pr(>F)
## sex 1 0.27510 1.2650 3 10 0.33838
## temp 2 0.97019 3.4544 6 22 0.01475 *
## sex:temp 2 0.75271 2.2128 6 22 0.08041 .
## Residuals 12
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
m1<-aov(y1~temp,data=ratas)
m2<-aov(y2~temp,data=ratas)
m3<-aov(y3~temp,data=ratas)
m4<-aov(y1~temp*sex,data=ratas)
m5<-aov(y2~temp*sex,data=ratas)
m6<-aov(y3~temp*sex,data=ratas)
summary(m1)
## Df Sum Sq Mean Sq F value Pr(>F)
## temp 2 4.933 2.466 1.856 0.19
## Residuals 15 19.935 1.329
summary(m2)
## Df Sum Sq Mean Sq F value Pr(>F)
## temp 2 32.59 16.293 7.538 0.00542 **
## Residuals 15 32.42 2.161
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(m3)
## Df Sum Sq Mean Sq F value Pr(>F)
## temp 2 0.01963 0.009817 1.398 0.278
## Residuals 15 0.10537 0.007024
summary(m4)
## Df Sum Sq Mean Sq F value Pr(>F)
## temp 2 4.933 2.466 2.074 0.168
## sex 1 0.020 0.020 0.017 0.899
## temp:sex 2 5.643 2.821 2.372 0.135
## Residuals 12 14.272 1.189
summary(m5)
## Df Sum Sq Mean Sq F value Pr(>F)
## temp 2 32.59 16.293 9.176 0.00382 **
## sex 1 1.32 1.318 0.742 0.40590
## temp:sex 2 9.79 4.897 2.758 0.10339
## Residuals 12 21.31 1.776
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(m6)
## Df Sum Sq Mean Sq F value Pr(>F)
## temp 2 0.01963 0.009817 1.374 0.290
## sex 1 0.01742 0.017422 2.439 0.144
## temp:sex 2 0.00221 0.001106 0.155 0.858
## Residuals 12 0.08573 0.007144
# análisis post hoc
etaSquared(m2)
## eta.sq eta.sq.part
## temp 0.5012788 0.5012788
etaSquared(m5)
## eta.sq eta.sq.part
## temp 0.50127879 0.60463503
## sex 0.02026862 0.05823481
## temp:sex 0.15067126 0.31491368
post<-TukeyHSD(m2)
post
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = y2 ~ temp, data = ratas)
##
## $temp
## diff lwr upr p adj
## 20-4 2.2300000 0.02527797 4.434722 0.0472590
## 34-4 -0.9866667 -3.19138869 1.218055 0.4924782
## 34-20 -3.2166667 -5.42138869 -1.011945 0.0047632
plot(post)