Comment effectuer une MANOVA dans R



Pour comprendre la MANOVA, il est d’abord utile de comprendre l’ANOVA.

Une ANOVA (analyse de variance) est utilisée pour déterminer s’il existe ou non une différence statistiquement significative entre les moyennes de trois groupes indépendants ou plus.

Par exemple, supposons que nous voulions savoir si la technique d’étude a ou non un impact sur les résultats aux examens d’une classe d’étudiants. Nous avons divisé la classe en trois groupes au hasard. Chaque groupe utilise une technique d’étude différente pendant un mois pour préparer un examen. A la fin du mois, tous les étudiants passent le même examen.

Pour savoir si l’étude de la technique a un impact sur les résultats aux examens, nous pouvons effectuer une ANOVA unidirectionnelle, qui nous dira s’il existe une différence statistiquement significative entre les scores moyens des trois groupes.

Dans une ANOVA, nous avons une variable de réponse. Cependant, dans une MANOVA (analyse multivariée de la variance), nous avons plusieurs variables de réponse.

Par exemple, supposons que nous voulions savoir quel est l’impact du niveau d’éducation (c’est-à-dire lycée, diplôme d’associé, baccalauréat, maîtrise, etc.) à la fois sur le revenu annuel et sur le montant de la dette étudiante. Dans ce cas, nous avons un facteur (niveau d’éducation) et deux variables de réponse (revenu annuel et dette étudiante), nous pouvons donc effectuer une MANOVA à sens unique.

Connexe : Comprendre les différences entre ANOVA, ANCOVA, MANOVA et MANCOVA

Comment effectuer une MANOVA dans R

Dans l’exemple suivant, nous allons illustrer comment effectuer une MANOVA unidirectionnelle dans R à l’aide de l’ensemble de données intégré iris , qui contient des informations sur la longueur et la largeur de différentes mesures de fleurs pour trois espèces différentes (« setosa », « virginica», «versicolor»):

#view first six rows of iris dataset
head(iris)

#  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1          5.1         3.5          1.4         0.2  setosa
#2          4.9         3.0          1.4         0.2  setosa
#3          4.7         3.2          1.3         0.2  setosa
#4          4.6         3.1          1.5         0.2  setosa
#5          5.0         3.6          1.4         0.2  setosa
#6          5.4         3.9          1.7         0.4  setosa

Supposons que nous voulions savoir si l’espèce a un effet sur la longueur et la largeur des sépales. En utilisant l’espèce comme variable indépendante, et la longueur et la largeur des sépales comme variables de réponse, nous pouvons effectuer une MANOVA unidirectionnelle en utilisant la fonction manova() dans R.

La fonction manova() utilise la syntaxe suivante :

manova (cbind (rv1, rv2, …) ~ iv, données)

où:

  • rv1, rv2 : variable réponse 1, variable réponse 2, etc.
  • iv : variable indépendante
  • data : nom de la trame de données

Dans notre exemple avec l’ensemble de données iris, nous pouvons ajuster une MANOVA et afficher les résultats en utilisant la syntaxe suivante :

#fit the MANOVA model
model <- manova(cbind(Sepal.Length, Sepal.Width) ~ Species, data = iris)

#view the results
summary(model)
#           Df  Pillai approx F num Df den Df    Pr(>F)    
#Species     2 0.94531   65.878      4    294 < 2.2e-16 ***
#Residuals 147                                             
#---
#Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

À partir du résultat, nous pouvons voir que la statistique F est de 65,878 et que la valeur p correspondante est extrêmement petite. Cela indique qu’il existe une différence statistiquement significative dans les mesures des sépales en fonction des espèces.

Note technique : Par défaut, manova() utilise la statistique du test Pillai . Étant donné que la distribution de cette statistique de test est complexe, une valeur F approximative est également fournie pour une interprétation plus facile.

De plus, il est possible de spécifier « Roy », « Hotelling-Lawley » ou « Wilks » comme statistique de test à utiliser en utilisant la syntaxe suivante : summary(model, test = ‘Wilks’)

Pour savoir exactement comment la longueur et la largeur des sépales sont affectées par l’espèce , nous pouvons effectuer des ANOVA univariées en utilisant summary.aov() comme indiqué dans le code suivant :

summary.aov(model)


# Response Sepal.Length :
#             Df Sum Sq Mean Sq F value    Pr(>F)    
#Species       2 63.212  31.606  119.26 < 2.2e-16 ***
#Residuals   147 38.956   0.265                      
#---
#Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

# Response Sepal.Width :
#             Df Sum Sq Mean Sq F value    Pr(>F)    
#Species       2 11.345  5.6725   49.16 < 2.2e-16 ***
#Residuals   147 16.962  0.1154                      
#---
#Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Nous pouvons voir à partir du résultat que les valeurs p pour les deux ANOVA univariées sont extrêmement faibles (<2,2e-16), ce qui indique que l’espèce a un effet statistiquement significatif sur la largeur et la longueur des sépales .

Visualiser les moyens du groupe

Il peut également être utile de visualiser les moyennes de groupe pour chaque niveau de nos espèces variables indépendantes afin de mieux comprendre nos résultats.

Par exemple, on peut utiliser la bibliothèque gplots et la fonction plotmeans() pour visualiser la longueur moyenne des sépales par espèce :

#load gplots library
library(gplots)

#visualize mean sepal length by species
plotmeans(iris$Sepal.Length ~ iris$Species)

Sur le graphique, nous pouvons voir que la longueur moyenne des sépales varie considérablement selon les espèces. Cela correspond aux résultats de notre MANOVA, qui nous a indiqué qu’il existait une différence statistiquement significative dans les mesures des sépales en fonction des espèces.

On peut également visualiser la largeur moyenne des sépales par espèce :

plotmeans(iris$Sepal.Width ~ iris$Species)

Consultez la RDocumentation complète de la fonction manova() ici .

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *