ANOVA avec R
Autoformation
S’autoformer en statistique via des tutoriels et des capsules vidéo
ANOVA avec R
Une analyse de la variance, de l’anglais Analysis of Variance (ANOVA) permet de vérifier s’il existe une différence statistiquement significative entre plus de deux groupes distincts, ou bien plus de deux temps de mesures pour un même individu. Alors qu’un test t est possible avec deux temps de mesure ou deux groupes, l’ANOVA permet de vérifier la différence entre plusieurs temps de mesure ou plusieurs groupes, mais nécessite une étape supplémentaire : l’analyse post hoc. Cette dernière permet de définir quels groupes sont significativement différents les uns des autres.
Dans ce tutoriel nous utiliserons une ANOVA sur les données d’une étude fictive pour laquelle nous connaissons le score d’un test à trois temps de mesure (temps 1, temps 2 et temps 3) pour un total 150 participant séparés en trois groupes : le groupe A (50 personnes), le groupe B (50 personnes) et le groupe C (50 personnes).
Nous utiliserons dans un premier temps une ANOVA afin d’observer s’il existe une différence entre les trois groupes au temps 1. Nous comparerons donc trois groupes les uns aux autres.
Dans un second temps, nous utiliserons une ANOVA afin d’observer s’il existe une différence entre les trois temps de mesure pour l’ensemble des participants. Nous comparerons donc trois temps de mesures les uns aux autres.
Pour vous pratiquer, vous pouvez télécharger les données (fichier CSV) utilisées dans ce tutoriel !
Télécharger et activer un package
Pour télécharger un package sur R, il suffit d’utiliser la commande install.packages() directement sur le script. Il vous suffit d’avoir un accès internet et le tout ne devrait prendre que quelques secondes. Ensuite, vous pouvez activer ces packages à l’aide de la fonction library().
Pour ce tutoriel, vous aurez besoin de quatre packages : psych, tidyverse, emmeans et afex.
Vous pouvez simplement copier et coller ces commandes ci-bas et les exécuter. Vous verrez apparaitre le téléchargement du package dans votre console.
install.packages("psych")
library(psych)
install.packages("tidyverse")
library(tidyverse)
install.packages("emmeans")
library(emmeans)
install.packages("afex")
library(afex)
Étape 1: Importer les données dans R
Pour importer un fichier CSV dans R, utilisez la fonction read.csv() et le symbole de la flèche pointant vers la gauche ( <- ) pour assigner un nom à votre banque dans R.
Votre commande devrait ressembler à l’exemple suivant :
mes_donnees <- read.csv("nom de la banque de données.csv")
Si vous désirez voir vos données d’une manière similaire à Excel, cliquez simplement sur ce nouvel élément dans l’environnement, et une feuille similaire à Excel s’ouvrira en onglet en haut à gauche.
Note: Vous pouvez vous référer au tutorial Importer ses données dans R pour en apprendre plus sur l’importation de données dans R
Comparaison de moyennes entre groupes
Nous commencerons par utiliser une ANOVA afin d’observer s’il existe une différence entre les trois groupes au temps 1. Nous comparerons donc trois groupes les uns aux autres.
Étape 2: Analyses descriptives par groupes
Dans un premier temps, nous voulons observer s’il existe une différence entre les trois groupes au temps 1. Nous comparerons donc ces trois groupes les uns aux autres.
La fonction describeBy() permet d’obtenir des données descriptives présentées par groupe. Dans cette fonction, écrivez d’abord la banque de données qui fera l’objet de l’analyse, suivi d’une virgule puis de la variable qui servira à catégoriser les résultats.
describeBy(le nom de votre banque de données, variable désirée)
Donc dans notre exemple :
describeBy(banque, banque$group)
Après avoir exécuté la fonction, vous verrez apparaitre dans la console (en haut à droite) les données présentées par groupes.
Étape 3: ANOVA avec 3 groupes
Grâce au package afex, vous avez accès à la fonction aov_ez() qui permet d’exécuter une ANOVA, et à la fonction nice() qui permet une visualisation simple des résultats.
En utilisant cette fonction, vous pourrez indiquer chacune des informations suivantes :
- La variable utilisée pour identifier les participants (id = )
- La variable dépendante qui sera comparée (dv =)
- Quelle banque de données utiliser (data =)
- La variable qui permet de distinguer les groupes à comparer (between =)
En utilisant le symbole « <- » pour donner un nom de référence à cette ANOVA, le code s’exprime ainsi dans l’exemple :
ANOVAgr <- aov_ez(id="code", dv="t1", data=banque, between="group")
Une fois exécutée, cette fonction créera un nouvel objet dans l’environnement (en bas à gauche). Elle portera le nom que vous lui avez donné avant le symbole « <- ».
Afin d’obtenir les résultats de l’ANOVA, utilisez la fonction nice() sur l’objet créé. Exemple : nice(ANOVAgr)
Si la valeur de p est plus petite que 0.05, cela signifie qu’au moins deux groupes sont différents les uns des autres. Pour savoir lesquels, une analyse post hoc est nécessaire.
Analyse post hoc
Un test post hoc permet de comparer les groupes entre eux afin de savoir lesquels sont significativement différents les uns des autres. Utilisez la fonction emmeans() pour observer ces différences. Dans la fonction, inscrivez le modèle à utiliser (votre ANOVA) puis la variable qui distingue les groupes (la variable de regroupement).
Dans cet exemple, le code s’exprime ainsi :
emmeans(ANOVAgr, pairwise ~ group)
Une fois exécutée, cette fonction générera un tableau dans votre console. Celui-ci offre la valeur de p pour les différences entre chaque combinaison de groupe possible.
Dans l’exemple on peut constater que les groupes significativement différents au temps 1 (p < 0.05) sont les groupes A et B (p = 0.0376), ainsi que les groupes A et C (p = 0.0002). Autrement dit, le groupe A est différent des deux autres au temps 1.
Comparaison de moyennes à travers le temps
Nous utiliserons maintenant une ANOVA afin d’observer s’il existe une différence entre les trois temps de mesure pour l’ensemble des participants. Nous comparerons donc trois temps de mesures les uns aux autres. Toutefois, la majorité des banques de données ne se prêtent pas bien à ce genre d’analyses. Une étape supplémentaire sera donc nécessaire : la transformation en format long.
Étape 4: Analyse descriptives par temps de mesure
Regardons maintenant les données par temps de mesure (t1, t2 et t3)
En utilisant la fonction summary() sur votre banque vous générerez un tableau présentant les variables descriptives par temps de mesures. On peut y observer que la moyenne semble augmenter d’un temps à l’autre, mais cette augmentation est-elle statistiquement significative ?
Étape 5: Transformer les données en format long
Pour répondre à cette question, il faut tout d’abord transformer la banque de données en format long. Cela signifie qu’au lieu d’avoir une rangée par participant et une colonne par temps de mesure, nous allons créer une banque dans laquelle chaque participant aura trois rangées (une par temps de mesure) et une seule colonne de score.
Notre banque perd donc des colonnes (format large), mais gagne plusieurs rangées (format long). Cette manipulation permet par la suite de regrouper les scores par temps.
Pour ce faire, nous utiliserons la fonction pivot_longer() et nous donnerons le nom banqueLONG à cette nouvelle banque.
Dans cet exemple, le code s’exprime ainsi :
banqueLONG <- pivot_longer(
data = banque,
cols = c("t1","t2","t3"),
names_to = "temps",
values_to = "score"
)
En termes simples, cette fonction permet de prendre les titres des colonnes t1, t2 et t3 cols = c(‘t1’, ‘t2’, ‘t3’) et de les placer sous une nouvelle colonne names_to = ‘temps’, tout en gardant leurs valeurs respectives dans une colonne adjacente values_to = ‘score’. Voir la banque générée dans l’exemple pour plus de clarté.
Étape 6: ANOVA avec les 3 temps
Une fois votre banque transformée et l’objet dans votre environnement, vous pouvez utiliser la fonction aov_ez() et la fonction nice() à nouveau.
En utilisant cette fonction, vous pourrez indiquer chacune des informations suivantes :
- La variable utilisée pour identifier les participants (id = )
- La variable dépendante qui sera comparée (dv =)
- Quelle banque de données utiliser (data =)
- La variable qui permet de distinguer les mesures pour un même participant (within =)
En utilisant le symbole « <- » pour donner un nom de référence à cette ANOVA, le code s’exprime ainsi dans l’exemple :
ANOVAt <- aov_ez(id="code", dv="score", data=banqueLONG, within="temps")
Une fois exécutée, cette fonction créera un nouvel objet dans l’environnement (en bas à gauche). Elle portera le nom que vous lui avez donné avant le symbole « <- ».
Afin d’obtenir les résultats de l’ANOVA, utilisez la fonction nice() sur l’objet créé. Exemple : nice(ANOVAt)
Si la valeur de p est plus petite que 0.05, cela signifie qu’au moins deux temps sont différents les uns des autres. Pour savoir lesquels, une analyse post hoc est nécessaire.
Analyse post hoc
Utilisez la fonction emmeans() et inscrivez le modèle à observer (votre ANOVA) puis la variable qui servira à créer les groupes (la variable de regroupement).
Dans cet exemple, le code s’exprime ainsi :
emmeans(ANOVAt, pairwise ~ temps)
Une fois exécutée, cette fonction générera un tableau dans votre console. Celui-ci présente la valeur de p pour les différences de score entre chaque temps de mesure.
Dans l’exemple, on peut constater que les scores sont significativement différents entre le temps 1 et le temps 2 (p = 0.0001) ainsi que le temps 1 et le temps 3 (p < 0.0001), mais pas entre le temps 2 et le temps 3 (p = 0.2241). Autrement dit, la moyenne des scores au temps 1 est différente des deux autres au temps, mais il n’y a pas de différence significative entre le temps 2 et 3.
Quelques notes
Truc : Si vous oubliez l’utilité d’une fonction, ou que vous voulez des détails sur celle-ci, utilisez le symbole « ? ». En plaçant ce symbole avant une fonction, et en exécutant la commande, vous ouvrirez une fenêtre d’aide (en bas à droite par défaut). Cette fenêtre présente la fonction, son fonctionnement, les arguments qu’elle nécessite et des exemples de son application. Par exemple pour obtenir de l’information sur la fonction summary(), il vous suffit exécuter la commande:
?summary()
Note : la fonction install.packages() requiert de guillemets pour le package mais pas la fonction library().
Note : le symbole « |> » est une flèche vers la droite et s’utilise afin de diriger un objet vers la fonction décrite à sa droite. Par exemple, ANOVAgr |> emmeans(pairwise~group) est équivalent à emmeans(ANOVAgr, pairwise~group).
Rappel : le symbole « $ » permet de référer à une variable spécifique de votre banque de données (colonne dans votre tableau).
Rappel : le symbole « ~ » est souvent utilisé pour mettre des variables en relation dans des analyses statistiques. Par exemple « âge ~ sexe » signifierait la catégorisation de l’âge par le sexe des participants.
PARTAGEZ VOS IMPRESSIONS & POSEZ VOS QUESTIONS ICI !