Exemples de solutions

Transcription

Exemples de solutions
Quelques solutions pour les comparaisons multiples
(Howell, Chap. 12)
Cogmaster, 2006–2007 (A4)
1 – Tolérance à la morphine
Objet de l’étude. Il s’agit d’une étude hypothétique similaire à une expérience importante réalisée par [2] sur la tolérance à la morphine. Les données sont fictives et la description des conditions est « allégée », mais les
moyennes (et le degré de signification des différences entre les moyennes)
sont les mêmes que celles de l’article de Siegel.
La morphine est un médicament souvent utilisé pour atténuer la douleur.
Cependant, des administrations répétées de morphine provoquent un phénomène de tolérance : la morphine a de moins en moins d’effet (la réduction
de la douleur est de moins en moins forte) au fil du temps. Pour mettre en
évidence la tolérance à la morphine, on a souvent recours à une expérience
qui consiste à placer un rat sur une surface trop chaude. Lorsque la chaleur devient trop insupportable, le rat va se mettre à se lécher les pattes ;
le temps de latence qui précède le moment où le rat commence à se lécher
les pattes est utilisé comme mesure de sa sensibilité à la douleur. Un rat qui
vient de recevoir une injection de morphine montre en général un temps de
latence plus long, ce qui montre que sa sensibilité à la douleur est réduite.
Le développement de la tolérance à la morphine est indiqué par le fait que
les latences se raccourcissent progressivement (signe d’une sensibilité accrue)
sous l’effet des injections répétées de morphine.
Siegel a constaté que dans plusieurs situations impliquant des médicaments autres que la morphine, les réponses *conditionnées* (apprises) au
médicament vont en sens inverse des effets inconditionnés (naturels) du médicament. Par exemple, un animal à qui l’on a injecté de l’atropine a tendance à manifester une diminution prononcée de la salivation. Par contre,
si, après des injections répétées d’atropine, on administre soudain, *dans le
même environnement physique*, une solution saline (qui ne devrait avoir absolument aucun effet), la salivation de l’animal va *augmenter*. C’est comme
si celui-ci compensait l’effet anticipé de l’atropine. Dans ce type d’étude, il
semble qu’un mécanisme compensatoire appris se développe au fil des essais
pour contrebalancer l’effet du médicament.
Siegel a formulé la théorie selon laquelle ce processus pourrait contribuer
à expliquer la tolérance à la morphine. D’après son raisonnement, si, durant
1
une série d’essais préliminaires, on injecte de la morphine à l’animal placé
sur une surface chaude, une certaine tolérance à la morphine va se développer. Donc, si le sujet reçoit une nouvelle injection de morphine lors d’un
test ultérieur, il sera aussi sensible à la douleur que le serait un animal naı̈f
(c’est-à-dire qui n’a jamais reçu d’injection de morphine). Siegel poursuit
son raisonnement : si, lors du test, on injecte plutôt à l’animal une solution
saline physiologique dans le même environnement physique, l’hypersensibilité conditionnée résultant de l’administration répétée de morphine ne sera
pas contrebalancée par la présence de morphine et l’animal manifestera des
temps de latence très courts avant de se lécher les pattes. En outre, selon
Siegel, si l’on administre des injections répétées de morphine dans un environnement avant de le tester dans un environnement différent, le nouvel environnement ne suscitera pas l’hypersensibilité compensatoire conditionnée
pour contrebalancer la morphine. En conséquence, le sujet réagira comme
le ferait un animal qui reçoit sa toute première injection. L’héroı̈ne est un
dérivé de la morphine. Imaginons un héroı̈nomane qui consomme de fortes
doses en raison du développement d’un phénomène de tolérance. Si sa réaction à cette forte dose devient subitement celle d’une personne qui n’a jamais
consommé de drogue, au lieu d’être celle d’un habitué, le résultat pourrait
s’avérer mortel ; c’est d’ailleurs souvent le cas. Il s’agit alors d’un problème
très grave.
L’une des versions de l’expérience de Siegel se base sur la prédiction qui
vient d’être esquissée. L’expérience implique cinq groupes de rats. Chaque
groupe participe à quatre essais, mais les données d’analyse sont uniquement
prélevées lors du dernier essai critique (test). On désigne les groupes en indiquant le traitement appliqué lors des trois premiers essais puis du quatrième.
Le groupe M-M a reçu des injections de morphine lors des trois premiers essais dans l’environnement de test, puis de nouveau ors du quatrième essai,
dans le même environnement. Il s’agit du groupe standard en ce qui concerne
la tolérance à la morphine, et l’on s’attend à y relever des niveaux normaux
de sensibilité à la douleur. Le groupe M-S a reçu une injection de morphine
(dans l’environnement de test) lors des trois premiers essais puis une solution
saline lors du quatrième. On s’attend à ce que ces animaux se caractérisent
par une hypersensibilité à la douleur puisque l’hypersensibilité conditionnée
ne sera pas contrebalancée par les effets compensatoires de la morphine. Les
animaux du groupe M(cage)-M (en abrégé, Mc-M) ont reçu une injection de
morphine lors des trois premiers essais, effectués dans leur cage habituelle,
puis la même injection lors du quatrième essai, mais dans l’environnement
de test standard, qu’ils ne connaissaient pas. Dans ce groupe, les indices
initialement associés à l’injection de morphine n’étaient pas présents lors du
test ; on ne devrait donc pas s’attendre à constater, chez ces animaux, une
tolérance à la morphine lors du test. Le quatrième groupe (le groupe S-M)
a reçu une injection de solution saline durant les trois premiers essais (dans
l’environnement de test) et de morphine lors du quatrième. On s’attend à
2
ce que ces animaux manifestent la sensibilité la plus réduite à la douleur
puisqu’ils n’ont eu aucune occasion de développer une certaine tolérance à
la morphine. Enfin, le groupe S-S a reçu une injection de solution saline lors
des quatre essais. Si Siegel a raison, c’est le groupe S-M qui devrait présenter
les temps de latence les plus longs (indiquant une sensibilité minimale) et le
groupe M-S les temps de latence les plus courts (sensibilité maximale). Le
groupe Mc-M devrait se rapprocher du groupe S-M puisque les indices associés aux trois premiers essais du groupe Mc-M ne sont pas présents lors du
test. Les groupes M-M et S-S devraient se situer à un niveau intermédiaire.
L’égalité ou non des groupes M-M et S-S dépendra de la vitesse à laquelle se
développe la tolérance à la morphine. Le schéma des résultats ainsi anticipés
est le suivant :
S − M = Mc − M > M − M ? S − S > M − S
Le point d’interrogation indique l’absence de prédiction. La variable dépendante est le temps de latence (en secondes) qui s’écoule avant que l’animal
ne commence à se lécher les pattes.
Analyse. Dans un premier temps, on charge les données en utilisant read.table()
et en supprimant la première colonne qui correspond aux numéros d’observations dans le fichier de données.
> a <- read.table("tab12-1.dat", header = F)[-1]
> a$V2 <- as.factor(a$V2)
> summary(a)
V2
1:8
2:8
3:8
4:8
5:8
V3
Min.
: 1.00
1st Qu.: 6.00
Median :13.50
Mean
:15.60
3rd Qu.:24.25
Max.
:40.00
> names(a) <- c("Groupe", "Latence")
> levels(a$Groupe) <- c("M-S", "M-M", "S-S", "S-M", "Mc-M")
Un graphique des distributions inter- et intra-groupe sera utile pour situer
les comparaisons (a posteriori) à effectuer par la suite.
>
>
>
>
>
+
par(cex = 0.7)
plot(Latence ~ Groupe, data = a)
Latence.moy <- mean(a$Latence)
abline(h = Latence.moy, lty = 2)
text(0.5, Latence.moy + 2, paste("moy. = ", round(Latence.moy,
2)), pos = 4)
3
40
30
20
0
10
Latence
moy. = 15.6
M−S
M−M
S−S
S−M
Mc−M
Groupe
Le modèle d’ANOVA inclut l’unique facteur Groupe, et la fonction model.tables()
permet de situer la position des groupes par rapport à la moyenne générale,
puisque celle-ci indique les écarts entre la moyenne des groupes et la moyenne
générale.
> tapply(a$Latence, list(a$Groupe), mean)
M-S
4
M-M
10
S-S
11
S-M Mc-M
24
29
> tapply(a$Latence, list(a$Groupe), var)
M-S
M-M
S-S
S-M
Mc-M
10.00000 26.28571 45.14286 40.57143 38.00000
> a.aov <- aov(Latence ~ Groupe, data = a)
> summary(a.aov)
Df Sum Sq Mean Sq F value
Pr(>F)
Groupe
4 3497.6
874.4 27.325 2.443e-10 ***
Residuals
35 1120.0
32.0
--Signif. codes: 0 ’***’ 0.001 ’**’ 0.01 ’*’ 0.05 ’.’ 0.1 ’ ’ 1
> model.tables(a.aov, se = T)
Tables of effects
4
Groupe
Groupe
M-S
M-M
-11.6 -5.6
S-S
-4.6
S-M
8.4
Mc-M
13.4
Standard errors of effects
Groupe
2
replic.
8
L’ANOVA indique un effet clairement significatif (p < 0.001), ce qui n’est
pas surprenant vu les écarts de moyenne constatés (cf. la sortie produite par
model.tables()). On peut également utiliser summary.lm(a.aov) pour vérifier quelles sont les moyennes de groupes qui sont différentes de l’ordonnée
à l’origine (intercept). Par défaut, l’ordonnée à l’origine correspond à la
moyenne du premier groupe, ce que l’on peut vérifier en tapant
> contrasts(a$Groupe)
M-S
M-M
S-S
S-M
Mc-M
M-M S-S S-M Mc-M
0
0
0
0
1
0
0
0
0
1
0
0
0
0
1
0
0
0
0
1
et en constatant que les coefficients du premier groupe sont tous nuls1 .
Pour préciser la contribution de chaque groupe dans les différences globales détectées par l’ANOVA, une première approche consisterait à comparer
toutes les paires de moyennes à l’aide du test t multiple corrigé (méthode de
Bonferroni), appelé également test de Dunn.
> pairwise.t.test(a$Latence, a$Groupe, p.adjust.method = "bonf")
Pairwise comparisons using t tests with pooled SD
data:
M-M
S-S
S-M
Mc-M
a$Latence and a$Groupe
M-S
0.41051
0.18319
3.1e-07
1.9e-09
M-M
1.00000
0.00019
8.9e-07
S-S
0.00054
2.6e-06
S-M
0.85818
P value adjustment method: bonferroni
1
Il s’agit de contrastes dits de traitement, sous R. On obtient la même chose en tapant
contr.treatment(5). Le type de contraste utilisé pour un facteur (selon que celui-ci est
ordonné ou non) peut être vérifié en tapant C(a$Groupe). Certains logiciels, comme SAS,
fixent à 0 le dernier groupe. Dans ce cas naturellement, l’interprétation des coefficients
est différente. Notons que l’on peut imposer le groupe de référence dans les options de
contr.treatment.
5
Il apparaı̂t que seuls peuvent être considérés comme significativement
différents (du point de vue de leurs moyennes) les groupes :
– M-S et S-M
– M-S et Mc-M
– M-M et S-M
– M-M et Mc-M
– S-S et Mc-M
Le groupe Mc-M diffère de tous les groupes à l’exception du groupe S-M ;
le groupe S-M diffère de tous les groupes (sauf Mc-M). A la lecture de ces
résultats, on se retrouve bien avec 2 « paquets » de moyennes : les groupes
M-S, M-M et S-S vs. les groupes S-M et Mc-M. Il n’y a pas de différences
entre les groupes pour un même paquet, mais les paquets diffèrent entre eux.
Dans un deuxième temps, on peut reprendre directement l’énoncé du problème, dans lequel sont énoncés la problématique et l’objectif de l’analyse
(cf. schéma des hypothèses : S − M = M c − M > M − M ? S − S > M − S).
Pour cela, l’approche par la méthode des contrastes est appropriée. Avant de
mettre en œuvre des contrastes orthogonaux (comparaisons indépendantes
les unes des autres), nous allons d’abord utiliser de simples contrastes
P linéaires : il s’agit de combinaisons linéaires de moyennes, du type i αi x̄i
(comme pour les contrastes orthogonaux), qui ne sont pas indépendantes.
On peut les utiliser lorsque les hypothèses à tester ont été planifiées avant
l’expérience (i.e. avant observation des résultats), ou a posteriori mais dans
ce dernier cas on ne peut garantir un risque d’erreur global ≤ 0.05. On
supposera (Howell, p. 405) que nous avions prévu de comparer
– les deux groupes recevant une solution saline lors de la quatrième injection ;
– le groupe S-S au groupe M-S (la théorie prévoit que le groupe S-S
témoignerait d’une sensibilité à la douleur plus réduite) ;
– le groupe M-M au groupe Mc-M (la théorie prévoit que qu’un rat ayant
reçu trois injections de morphine puis une injection de solutio saline
dans le même environnement manifesterait une plus grande sensibilité
à la douleur) ;
– le groupe M-S au groupe S-S (pour voir si une tolérance à la morphine
s’est développée au point que les animaux ayant toujours reçu des injections de morphine ne se différencient pas, après quatre essais, des
animaux ayant toujours reçu des injections de solution saline).
Nous avons donc 4 comparaisons à effectuer, et la matrice des contrastes est
indiquée ci-dessous :
c1 −3
2 −3
c2
0 −1
0
c3 −1
0
1
c4
0
1 −1
Pour la créer sous R, on utilise
6
2
0
0
0
2
1
0
0
> cont <- rbind(c(-3, 2, -3, 2, 2), c(0, -1, 0, 0, 1), c(-1, 0,
+
1, 0, 0), c(0, 1, -1, 0, 0))
> cont
[1,]
[2,]
[3,]
[4,]
[,1] [,2] [,3] [,4] [,5]
-3
2
-3
2
2
0
-1
0
0
1
-1
0
1
0
0
0
1
-1
0
0
Important. On prendra garde à l’interprétation des résultats produits
par l’appel à la fonction aov() avec des contrastes définis manuellement
comme ci-dessus, car l’approche proposé par R diffère sensiblement de ce
qu’on pourrait attendre intuitivement. En fait, si l’on effectue directement
une anova en modifiant la structure de données à l’aide d’une matrice de
contraste, par exemple
> contrasts(a$Groupe) <- cont
> summary.lm(aov(a$Latence ~ a$Groupe))
les tests de significativité s’interprètent difficilement comme un ensemble
de comparaison séquentielles (ligne à ligne, dans l’exemple précédent avec
cont).
Ainsi, la séquence d’instructions suivantes ne permet pas d’interpréter
directement les 4 contrastes que nous aimerions tester :
En revanche, l’utilisation de contraste de traitement (cf. plus haut) ou à
somme nulle donnerait une interprétation beaucoup plus directe.
On peut utiliser la fonction aov.contr() (disponible sur le site web) qui
reproduit un tableau des tests F effectués sur chacun des k − 1 contrastes
passés en arguments. L’interprétation est directe :
> aov.contr(a$Latence, a$Groupe, cont)
Test of significance for linear combinations of means :
c1
c2
c3
c4
estimate F-statistic p-value
81
54.675 0.00000
19
45.125 0.00000
7
6.125 0.01847
-1
0.125 0.72586
c1 c2 c3
are significant at
0.05
Comme on ne se protège pas de l’inflation du risque d’erreur, dû aux
nombreuses comparaisons a posteriori (le risque global est à peu près de 20
% dans ce cas), on pourrait préférer fixer α = 0.01 au lieu de 0.05 pour
chaque test.
> aov.contr(a$Latence, a$Groupe, cont, conf.level = 0.99)
7
Test of significance for linear combinations of means :
c1
c2
c3
c4
estimate F-statistic p-value
81
54.675 0.00000
19
45.125 0.00000
7
6.125 0.01847
-1
0.125 0.72586
c1 c2
are significant at
0.01
Notons que ce type de test d’« hypothèses linéaires » est proposé par la
fonction fit.contrast() dans le package gmodels.
> library(gmodels)
> fit.contrast(a.aov, "Groupe", cont)
Le résultat produit inclut des tests t et les erreurs-types des estimations :
Groupe
Groupe
Groupe
Groupe
c=(
c=(
c=(
c=(
-3 2 -3 2 2 )
0 -1 0 0 1 )
-1 0 1 0 0 )
0 1 -1 0 0 )
Estimate Std. Error
81 10.954451
19
2.828427
7
2.828427
-1
2.828427
t value
7.3942545
6.7175144
2.4748737
-0.3535534
Pr(>|t|)
1.192497e-08
8.872312e-08
1.831864e-02
7.257945e-01
L’ordonnée à l’origine (intercept) correspond à la moyenne générale. Le
premier groupe correspond au premier contraste, c1 = −3x̄1 + 2x̄2 − 3x̄3 +
2x̄4 +2x̄5 , qui vise à comparer les groupes M-M et Mc-M vs. M-S, S-M et S-S.
Ce contraste est significatif (p < 0.001), ce qui indique que la moyenne des
deux premiers groupes considérés diffère de celle des trois autres groupes.
Seule la dernière comparaison n’est pas significative. On en conclut que les
latences des groupes M-M et S-S ne diffèrent pas en moyenne.
A titre indicatif, on peut recalculer le premier contraste c1 manuellement.
Pour cela, il faut calculer la SC associée à ce contraste. Celle-ci vaut simplement
P
n · ( αi x̄i )2
P 2
SC1 =
αi
où
αi = [−3 2 −3 2 2]
Sous R, on peut l’obtenir comme suit :
>
+
>
>
>
cont <- cbind(c(-3, 2, -3, 2, 2), c(0, -1, 0, 0, 1), c(-1, 0,
1, 0, 0), c(0, 1, -1, 0, 0))
a.mean <- tapply(a$Latence, list(a$Groupe), mean)
c1 <- sum(cont[, 1] * a.mean)
SC1 <- (8 * c1^2)/sum(cont[, 1]^2)
Le CM associé à ce contraste est égal à la SC car il n’y a qu’un degré
de liberté (on compare 2 groupes de moyennes). Pour obtenir la valeur du
8
Fobs associé à cette comparaison, il suffit donc de diviser la valeur de la SC
calculée par le CM de l’erreur. Celui-ci vaut 32 comme l’indique l’examen
de la table d’ANOVA présentée plus haut. On a donc
> (F1 <- SC1/32)
[1] 54.675
> qf(0.95, 1, 35)
[1] 4.121338
La valeur F calculée étant largement supérieure à la valeur repère d’une
distribution de Fisher-Snedecor à 1 et 35 ddl, on en conclut que les groupes
M-S et S-S diffèrent en moyenne des groupes M-M, S-M et Mc-M réunis.
On pourrait en profiter pour vérifier qu’un test t donnerait exactement
le même résultat (pour les comparaisons à 1 ddl, Fobs = t2obs ). Il faudrait
pour cela effectuer un test t en utilisant comme variance commune la variance résiduelle, c’est-à-dire la moyenne des variances intra-groupe. Pour le
contraste c2 , qui permet de comparer le groupe M-M au groupe Mc-M, on
aurait avec un test t classique :
> a.t.test <- with(a, t.test(Latence[as.numeric(Groupe) == 2],
+
Latence[as.numeric(Groupe) == 5], var.equal = T))
> a.t.test
Two Sample t-test
data: Latence[as.numeric(Groupe) == 2] and Latence[as.numeric(Groupe) == 5]
t = -6.7026, df = 14, p-value = 1.006e-05
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-25.0799 -12.9201
sample estimates:
mean of x mean of y
10
29
La valeur de Fobs vaut quant à elle :
> c2 <- sum(cont[, 2] * a.mean)
> SC2 <- (8 * c2^2)/sum(cont[, 2]^2)
> SC2/32
[1] 45.125
à comparer à
> a.t.test$statistic^2
t
44.92444
9
La différence s’explique par le fait que pour le test t, la variance commune
utilisée ne tient compte que des deux groupes comparés (moyenne des variances de M-M et Mc-M), alors que pour le contraste la variance commune
est estimée à partir de tous les groupes : ceci est légitime dans la mesure où
on a considéré que les variances étaient homogènes pour valider le résultat
du test d’ANOVA. On gagne donc à estimer la variance résiduelle avec le
maximum d’informations (i.e. de groupes).
Une dernière façon de tester des contrastes consiste à recréer les niveaux
du facteur en fonction des groupements de moyennes considérés. Cette approche se situe dans le cadre plus général de la comparaison de modèle : on
crée un nouveau modèle, résumant la structure de données, et on compare
ce modèle au modèle incluant tous les niveaux du facteur d’étude. S’il n’y
a pas de différence entre ces deux modèles, d’un point de vue statistique,
alors on est en droit de conserver le modèle le plus simple puisque celui-ci
apporte autant d’information que le modèle complet.
Par exemple, dans le cas de notre premier contraste (c1 ), on souhaite
comparer les groupes 1 et 3 aux groupes 2, 4 et 5 réunis. Ensuite, on construit
un modèle d’ANOVA avec ce nouveau facteur à 2 niveaux. Il s’agit bien
évidemment d’un modèle différent du modèle complet que nous avions testé
auparavant et qui se trouve stocké dans a.aov.
>
>
>
>
>
a.aov.complet <- aov(a$Latence ~ a$Groupe)
Groupe.c1 <- a$Groupe
levels(Groupe.c1)[c(2, 4:5)] <- "g1"
levels(Groupe.c1)[c(1, 3)] <- "g2"
levels(Groupe.c1)
[1] "g2" "g1"
> a.aov.c1 <- aov(a$Latence ~ Groupe.c1)
L’idée est maintenant de comparer ce modèle simplifié au modèle complet.
La fonction anova() est utilisée pour cela.
> anova(a.aov.complet, a.aov.c1)
Analysis of Variance Table
Model 1: a$Latence ~ a$Groupe
Model 2: a$Latence ~ Groupe.c1
Res.Df
RSS Df Sum of Sq
F
Pr(>F)
1
35 1120
2
38 2868 -3
-1748 18.208 2.733e-07 ***
--Signif. codes: 0 ’***’ 0.001 ’**’ 0.01 ’*’ 0.05 ’.’ 0.1 ’ ’ 1
> summary.lm(a.aov.c1)
Call:
aov(formula = a$Latence ~ Groupe.c1)
10
Residuals:
Min
1Q Median
-19.00 -5.00 -1.00
3Q
5.25
Max
19.00
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept)
7.500
2.172
3.453 0.00138 **
Groupe.c1g1
13.500
2.804
4.815 2.36e-05 ***
--Signif. codes: 0 ’***’ 0.001 ’**’ 0.01 ’*’ 0.05 ’.’ 0.1 ’ ’ 1
Residual standard error: 8.688 on 38 degrees of freedom
Multiple R-Squared: 0.3789,
Adjusted R-squared: 0.3626
F-statistic: 23.18 on 1 and 38 DF, p-value: 2.364e-05
Le résultat de la comparaison de ces deux modèles indique que nous ne
pouvons pas réduire le modèle initial (complet) à un modèle à 2 paramètres
(groupes).
L’utilisation de contrastes orthogonaux relève du même principe
1. définition de la matrice de contrastes
2. test du modèle (réponse en fonction de la matrice de contrastes)
Quels sont les contrastes à définir ? Cela dépend bien évidemment des objectifs de l’étude et des hypothèses que l’on souhaite tester. Il est clair qu’il faut
définir les contrastes les plus intéressants dès le début, puisqu’ensuite, par le
jeu des contraintes liées à la définition des contrastes orthogonaux (somme
nulle et produit vectoriel nul des coefficients de contraste), les contrastes
vont rapidement s’imposer d’eux-mêmes. . .
Voici l’exemple proposé par Howell (p. 409) :
c1
c2
c3
c4
3
3 −2 −2 −2
1 −1
0
0
0
0
0
2 −1 −1
0
0
0
1 −1
Le partitionnement de la SC liée au traitement est représentée ci-dessous :
(1, 2, 3, 4, 5)
(1)
(1, 2)
(3, 4, 5)
(2)
(3)
(4, 5)
(4)
11
(5)
En utilisant de tels contrastes, on obtient :
> cont2 <- rbind(c(3, 3, -2, -2, -2), c(1, -1, 0, 0, 0), c(0, 0,
+
2, -1, -1), c(0, 0, 0, 1, -1))
> aov.contr(a$Latence, a$Groupe, cont2, conf.level = 0.95)
Test of significance for linear combinations of means :
c1
c2
c3
c4
estimate F-statistic p-value
-86
61.63333 0.00000
-6
4.50000 0.04127
-31
40.04167 0.00000
-5
3.12500 0.08607
c1 c2 c3
are significant at
0.05
Il est à noter que si l’on avait commencé par comparer le traitement 1 (MS) à la combinaison des traitements 2, 3 et 4, l’ensemble des contrastes aurait
été différent. Tout dépend donc de la stratégie initiale des comparaisons. On
pourra également vérifier que la somme des SC de chacun des contrastes
vaut la SC totale.
Au sujet des contrastes sous R, on retiendra que l’utilisation de certains
contrastes comme les contrastes de helmert n’est pas toujours le plus intéressant lorsque le facteur d’étude a plus de 2 niveaux puisque ces contrastes
fournissent des estimations par rapport à une ligne de base qui change pour
chacun des contrastes considérés (cf. la sortie produite par contr.helmert(4)).
Il est préférable d’utiliser les contrastes de traitement (contr.treatment) ou
de somme null (contr.sum). Par défaut sous R, ce sont les contrastes de
traitement et les contrastes polynomiaux qui sont proposés.
> options(contrasts = c("contr.treatment", "contr.poly"))
Pour les contrastes de traitement, on peut modifier la ligne de base (on
a déjà dit plus haut que, par défaut, c’est le premier niveau du facteur qui
est contraint à 0, et tous les contrastes s’interprètent alors par rapport à
celui-ci ; c’est essentiellement ce que nous donne summary.lm()), à l’aide de
la fonction relevel().
> A <- gl(3, 10, 30, labels = c("a1", "a2", "a3"))
> levels(A)
[1] "a1" "a2" "a3"
> contrasts(A)
a1
a2
a3
a2 a3
0 0
1 0
0 1
12
> A <- relevel(A, ref = 2)
> levels(A)
[1] "a2" "a1" "a3"
> contrasts(A)
a2
a1
a3
a1 a3
0 0
1 0
0 1
Si l’on effectue une analyse avec ces contrastes, les coefficients de summary.lm()
s’interprèteront comme les écarts de moyennes des groupes a1 et a3 par rapport à a2. On prendra garde au fait que ces contrastes ne sont pas orthogonaux (le produit des vecteurs de contrastes n’est pas nul). Les comparaisons
n’étant pas indépendantes, le risque global, ou erreur d’ensemble, sera supérieur à α = 0.05 (inégalité de Bonferroni).
Les contrastes à somme nulle sont également intéressants dans la mesure
où ils permettent des comparaisons par paire de chacun des niveaux entre
eux (à l’image des comparaisons par des tests t multiples) :
> B <- gl(5, 5, 25)
> C(B, contr.sum)
[1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5
attr(,"contrasts")
[,1] [,2] [,3] [,4]
1
1
0
0
0
2
0
1
0
0
3
0
0
1
0
4
0
0
0
1
5
-1
-1
-1
-1
Levels: 1 2 3 4 5
En dernier lieu, on peut utiliser la méthode HSD de Tukey pour comparer
l’ensemble des paires de moyennes, tout en maintenant le risque d’erreur
global ≤ 0.05.
> a.tukey <- TukeyHSD(a.aov)
> par(cex = 0.7, mar = c(5, 6, 4, 2))
> plot(a.tukey, las = 1)
13
95% family−wise confidence level
M−M−M−S
S−S−M−S
S−M−M−S
Mc−M−M−S
S−S−M−M
S−M−M−M
Mc−M−M−M
S−M−S−S
Mc−M−S−S
Mc−M−S−M
0
10
20
30
Differences in mean levels of Groupe
L’inspection des intervalles de confiance pour les comparaisons des différentes paires de moyennes ( k(k+1
2 , soit 10 comparaisons) indique que seuls
diffèrent
– les groupes S-M et M-S
– les groupes Mc-M et M-S
– les groupes S-M et M-M
– les groupes Mc-M et M-M
– les groupes S-M et S-S
– les groupes Mc-M et S-S.
On retrouve donc des résultats analogues à ceux qui ont été observés avec
le test t multiple corrigé.
2 – L’ennui fait l’attrait
Objet de l’étude. Une étude de [1] fournit un exemple très utile de l’analyse de tendances. Cette étude examine la question de savoir ce qui fait que le
visage de quelqu’un est beau. Les auteurs ont abordé le problème d’après les
perspectives évolutionniste et cognitive. Selon la théorie évolutionniste moderne, les valeurs moyennes d’un trait sont préférées aux valeurs extrêmes,
et selon la théorie cognitive, adultes comme enfants réagissent de manière
plus positive à des prototypes d’objets plutôt qu’à des objets proches des
extrêmes d’une dimension quelconque. Par définition, un prototype possède
14
des valeurs moyennes de l’objet pour ce qui est des dimensions importantes :
le prototype d’un chat n’est ni trop grand ni trop petit, ni trop gros ni trop
maigre, et il ne ronronne ni trop fort ni trop doucement.
Langlois et Roggman ont pris des photos montrant le visage de 336
hommes et 214 femmes. Ils ont ensuite créé cinq groupes de photos composites via une fusion par ordinateur des différents visages. Pour l’un des
groupes, l’ordinateur a fusionné 32 visages de personne du même sexe, choisis aléatoirement, ce qui a donné un visage facilement reconnaissable et présentant une corpulence moyenne, une taille moyenne, des yeux ordinaires,
un nez d’une longueur moyenne, etc. Pour les autres groupes, l’ordinateur a
fusionné soit 2, soit 4, 8 ou 16 visages différents. L’appellation « composite
» servira à représenter les cinq groupes. Notons que ce n’est pas un nom
idéal pour une variable indépendante. Chaque groupe de photos composites
comprenait trois visages masculins et trois visages féminins, mais nous ne
tiendrons pas compte du sexe pour cet exemple (l’étude n’a mis en évidence
aucune différence significative quant au sexe, et le test global sur les différences entre les groupes n’est pas matériellement affecté si nous décidons de
ne pas prendre cette variable en considération).
Langlois et Roggman ont présenté des visages composites à différents
groupes de sujets et leur ont demandé d’évaluer la beauté de visages sur une
échelle allant de 1 à 5, où 5 représentait « très beau ». Dans leur analyse, les
données étudiées étaient en réalité les moyennes des évaluations des sujets
pour les six visages composites dans chaque condition.
Analyse.
> b <- read.table("tab12-7.dat", header = F)[-1]
> b$V2 <- as.factor(b$V2)
> summary(b)
V2
1:6
2:6
3:6
4:6
5:6
V3
Min.
:1.893
1st Qu.:2.500
Median :3.107
Mean
:2.917
3rd Qu.:3.248
Max.
:3.644
> names(b) <- c("Groupe", "Note")
> b.mean <- as.numeric(tapply(b$Note, list(b$Groupe), mean))
> plot(seq(1:5), b.mean, type = "p", pch = 19, xlab = "Groupe",
+
ylab = "Note moyenne", cex = 0.7)
15
3.2
3.0
2.8
2.6
Note moyenne
1
2
3
4
5
Groupe
À la place de tapply(), on aurait pu utiliser la fonction aggregate() qui
renvoie un data.frame, plus facile à manipuler puisque la classification des
valeurs par le facteur est conservée :
> c <- aggregate(b$Note, list(Groupe = b$Groupe), mean)
> plot(c$x ~ as.numeric(c$Groupe), type = "p", pch = 19)
Le modèle d’ANOVA se pose ainsi :
> b.aov <- aov(Note ~ Groupe, data = b)
> summary(b.aov)
Df Sum Sq Mean Sq F value Pr(>F)
Groupe
4 2.1704 0.5426 3.1342 0.03217 *
Residuals
25 4.3281 0.1731
--Signif. codes: 0 ’***’ 0.001 ’**’ 0.01 ’*’ 0.05 ’.’ 0.1 ’ ’ 1
Dans cette étude, on ne s’intéresse pas tant à la comparaison des paires
de moyennes qu’à l’existence d’une tendance linéaire ou quadratique entre
les groupes. On considère pour cela que les niveaux du facteur d’étude sont
bien ordonnés.
Les contrastes polynomiaux utilisés par Howell, pour la tendance linéaire
(L) et quadratique (Q) utilisent des valeurs entières :
16
L −2 −1
0
1 2
Q
2 −1 −2 −1 2
alors que R propose des valeurs numériques moins simples, mais tout aussi
« équilibrées » :
> contr.poly(5)
.L
.Q
.C
^4
[1,] -0.6324555 0.5345225 -3.162278e-01 0.1195229
[2,] -0.3162278 -0.2672612 6.324555e-01 -0.4780914
[3,] 0.0000000 -0.5345225 -4.095972e-16 0.7171372
[4,] 0.3162278 -0.2672612 -6.324555e-01 -0.4780914
[5,] 0.6324555 0.5345225 3.162278e-01 0.1195229
Pour spécifier le type de contraste à utiliser, et formaliser le nouveau
modèle à tester, on peut procéder comme suit :
> options(contrasts = c("contr.treatment", "contr.poly"))
> Groupe.cont <- with(b, C(Groupe, poly))
> attributes(Groupe.cont)
$levels
[1] "1" "2" "3" "4" "5"
$class
[1] "factor"
$contrasts
[1] "contr.poly"
> summary.lm(aov(Note ~ Groupe.cont, data = b))
Call:
aov(formula = Note ~ Groupe.cont, data = b)
Residuals:
Min
1Q
-7.720e-01 -1.967e-01
Median
1.041e-16
3Q
1.157e-01
Max
9.990e-01
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept)
2.91693
0.07597 38.398 < 2e-16 ***
Groupe.cont.L 0.58523
0.16986
3.445 0.00202 **
Groupe.cont.Q 0.03189
0.16986
0.188 0.85258
Groupe.cont.C -0.13429
0.16986 -0.791 0.43662
Groupe.cont^4 -0.01378
0.16986 -0.081 0.93597
--Signif. codes: 0 ’***’ 0.001 ’**’ 0.01 ’*’ 0.05 ’.’ 0.1 ’ ’ 1
Residual standard error: 0.4161 on 25 degrees of freedom
Multiple R-Squared: 0.334,
Adjusted R-squared: 0.2274
F-statistic: 3.134 on 4 and 25 DF, p-value: 0.03217
17
Le test pour la tendance linéaire se révèle significatif (p < 0.01). Notons
que par défaut, R donne des valeurs de t et pas des F comme sous certains
logiciels. Pour obtenir cette dernière (comme dans Howell, p. 442), il suffit
de prendre t2 :
> 3.445^2
[1] 11.86802
Il s’agit d’une valeur F à 1 et 24 ddl (ce sont toujours des comparaisons
à 1 ddl). Les autres contrastes ne sont pas significatifs, ce qui suggère qu’il
n’y a pas de tendance quadratique (ou même cubique) dans le profil des
réponses en fonction des groupes.
Les valeurs prédites par un tel modèle peuvent être obtenues à l’aide de
la fonction predict().
> b.pred <- unique(predict(aov(Note ~ Groupe.cont, data = b)))
> plot(b.pred)
On pourra vérifier, dans ce cas précis, que les valeurs prédites correspondent exactement aux moyennes de groupe.
18
Références
[1] Langlois, J.H. & Roggman, L.A. (1990). Attractive faces are only average. Psychological Science, 1, 115–121.
[2] Siegel, S. (1975). Evidence from rats that morphine tolerance is a learned response. Journal of Comparative and Physiological Psychology, 80,
498–506.
19