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