{"id":337,"date":"2015-02-03T09:40:47","date_gmt":"2015-02-03T08:40:47","guid":{"rendered":"http:\/\/perso.ens-lyon.fr\/lise.vaudor\/?p=337"},"modified":"2026-04-02T14:01:11","modified_gmt":"2026-04-02T12:01:11","slug":"test-des-contrastes-de-scheffe","status":"publish","type":"post","link":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/test-des-contrastes-de-scheffe\/","title":{"rendered":"Test des contrastes de Scheff\u00e9"},"content":{"rendered":"<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/Test_Scheffe\/Lise_Vaudor_headband.png\" alt=\"plot of chunk\nLise_Vaudor_headband\" \/>Le\u00a0test de Scheff\u00e9 est un test qu&rsquo;on applique souvent apr\u00e8s une ANOVA: on parle de test <strong>post-hoc<\/strong> (au m\u00eame titre, par exemple, qu&rsquo;un test de Tukey). En effet, l&rsquo;ANOVA \u00e0 1 facteur permet de mettre en \u00e9vidence (le cas \u00e9ch\u00e9ant) le fait qu&rsquo;<strong>au moins un groupe a une moyenne diff\u00e9rente des autres<\/strong>. Si on a affaire \u00e0 3 groupes ou plus, une question se pose alors: quels sont les groupes diff\u00e9rents deux \u00e0 deux?<\/p>\n<h2>Le test de Scheff\u00e9, en pratique:<\/h2>\n<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/Test_Scheffe\/exemple_donnees_ANOVA_3_niveaux.png\" alt=\"plot of chunk\nexemple_donnees_ANOVA_3_niveaux\" \/><\/p>\n<p>Testons la significativit\u00e9 de l&rsquo;effet de X sur Y \u00e0 travers une ANOVA:<\/p>\n<pre><code>mymod=lm(Y~X)\nanova(mymod)\n\n## Analysis of Variance Table\n## \n## Response: Y\n##           Df Sum Sq Mean Sq F value Pr(&gt;F)  \n## X          2     61    30.7    2.55  0.087 .\n## Residuals 59    710    12.0                 \n## ---\n## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1\n<\/code><\/pre>\n<p>On rejette l&rsquo;hypoth\u00e8se d&rsquo;\u00e9galit\u00e9 de toutes les moyennes au seuil de <em>\u03b1<\/em>\u2004=\u200410%.<\/p>\n<p>Il n&rsquo;existe pas \u00e0 l&rsquo;heure actuelle de test de Scheff\u00e9 sous R.<\/p>\n<p><sub><sup>(en fait, si, il y a une fonction scheffe.test dans un package qui s&rsquo;appelle agricolae, mais il me semble apr\u00e8s l&rsquo;avoir test\u00e9e qu&rsquo;il y ait une petite erreur dans cette fonction, alors en attendant que son auteur la corrige -\u00e7a ne devrait pas \u00eatre bien long- on va faire comme s&rsquo;il n&rsquo;y avait rien&#8230;).<\/sup><\/sub><\/p>\n<p>Je vous propose d&rsquo;utiliser une petite fonction que j&rsquo;ai \u00e9crite (vous trouverez des explications sur le code dans le paragraphe suivant) et disponible <a href=\"..\/..\/lise.vaudor\/\/Rscripts\/Test_Scheffe\/test_Scheffe_maison.R\">ici<\/a>.<\/p>\n<p>Voici comment utiliser cette fonction:<\/p>\n<pre><code>source(\"test_Scheffe_maison.R\")\nScheffe.test(X,Y,alpha=0.1)\n\n##     contrast sigma    LCI    UCI    pval\n## A-B   -2.555 1.133 -5.034 -0.076 0.08718\n## A-C   -0.868 1.014 -3.087  1.352 0.69507\n## B-C    1.688 1.161 -0.854  4.229 0.35448\n<\/code><\/pre>\n<p>Les r\u00e9sultats du test de Scheff\u00e9 montrent que <strong>la diff\u00e9rence de moyenne entre A et B est significative au seuil de <em>\u03b1<\/em>\u2004=\u200410%<\/strong>. En revanche on n&rsquo;est pas en mesure d&rsquo;affirmer que B est diff\u00e9rent de C ou que A est diff\u00e9rent de C.<\/p>\n<h2>Le test de Scheff\u00e9, en th\u00e9orie<\/h2>\n<p>Maintenant que vous avez vu comment (et pourquoi) effectuer un test de Scheff\u00e9, revenons \u00ab\u00a0en arri\u00e8re\u00a0\u00bb pour approfondir le principe de ce test.<\/p>\n<p>On consid\u00e8re <em>r<\/em> groupes, et l&rsquo;on d\u00e9finit <em>\u03bc<\/em><sub><em>i<\/em><\/sub> comme \u00e9tant la moyenne du groupe num\u00e9ro <em>i<\/em>. Un <em>contraste<\/em> se d\u00e9finit de la mani\u00e8re suivante:<\/p>\n<p><code><span class=\"katex-eq\" data-katex-display=\"false\">\n\nC=\\sum_{i=1}^r c_i\\mu_i\n\n<\/span><\/code><\/p>\n<p>avec<\/p>\n<p><code><span class=\"katex-eq\" data-katex-display=\"false\">\n\n\\sum_{i=1}^r c_i = 0\n\n<\/span><\/code><\/p>\n<p>Cela signifie que si l&rsquo;on a trois groupes, on peut consid\u00e9rer (entre autres) les contrastes suivants:<br \/>\n<code><span class=\"katex-eq\" data-katex-display=\"false\">\n\nC_{A-B}=\\mu_A-\\mu_B \\\\\n\nC_{A-C}=\\mu_B-\\mu_C \\\\\n\nC_{B-C}=\\mu_A-\\mu_C\n\n<\/span><\/code><\/p>\n<p>La valeur estim\u00e9e d&rsquo;un contraste est simplement:<br \/>\n<code><span class=\"katex-eq\" data-katex-display=\"false\">\n\n\\hat{C} = \\sum_{i=1}^r c_i\\bar{Y}_i\n\n<\/span><\/code><br \/>\nDonc les estimations des trois contrastes qui nous int\u00e9ressent sont:<\/p>\n<pre><code>\nestimated_mu=as.vector(tapply(Y,X,\"mean\"))\ncontrasts=c(estimated_mu[1]-estimated_mu[2],\n            estimated_mu[1]-estimated_mu[3],\n            estimated_mu[2]-estimated_mu[3])\n\nprint(contrasts)\n<\/code><\/pre>\n<p>## [1] -2.5551 -0.8675  1.6876<\/p>\n<p>La variance associ\u00e9e \u00e0 cet estimateur est:<\/p>\n<p><code><span class=\"katex-eq\" data-katex-display=\"false\">\n\ns_{\\hat{C}}^2 = \\hat{\\sigma}^2\\sum_{i=1}^r \\frac{c_i^2}{n_i}\n\n<\/span><\/code><\/p>\n<p>Donc l&rsquo;\u00e9cart-type associ\u00e9e \u00e0 chacun des trois estimateurs consid\u00e9r\u00e9s est:<\/p>\n<pre><code>n=as.vector(tapply(Y,X,\"length\"))\nN=sum(n)\nr=3\nestimated_sigma=sqrt(sum(mymod$residuals^2)\/(N-r))\nsigma_contrasts=c(sqrt(estimated_sigma^2*(1\/n[1]+1\/n[2])),\n                  sqrt(estimated_sigma^2*(1\/n[1]+1\/n[3])),\n                  sqrt(estimated_sigma^2*(1\/n[2]+1\/n[3])))\nprint(sigma_contrasts)\n\n## [1] 1.133 1.014 1.161\n<\/code><\/pre>\n<p>Ainsi il y a une probabilit\u00e9 de 1\u2005\u2212\u2005\u03b1 que C se trouve dans l&rsquo;intervalle suivant:<\/p>\n<p><code><span class=\"katex-eq\" data-katex-display=\"false\">\n\n\\hat{C}\\pm s_{\\hat{C}}\\sqrt{(r-1)F_{\\alpha;r-1;N-r}}\n\n<\/span><\/code><\/p>\n<p>On peut donc calculer les intervalles de confiance comme suit:<\/p>\n<pre><code>alpha=0.1\ndelta=sigma_contrasts*sqrt(2*qf(1-alpha,3-1,length(X)-3))\n\n\nresults=data.frame(round(contrasts,3),\n                   round(sigma_contrasts,3),\n                   round(contrasts-delta,3),\n                   round(contrasts+delta,3))\nrow.names(results)=c(\"A-B\",\"A-C\",\"B-C\")\ncolnames(results)=c(\"contrast\",\"sigma\",\"LCI\",\"UCI\")\n<\/code><\/pre>\n<p>Par ailleurs la statistique suivante:<br \/>\n<code><span class=\"katex-eq\" data-katex-display=\"false\">\n\nT_{Scheffe}=\\frac{C^2}{(r-1)s_{\\hat{C}}^2}\n\n<\/span><\/code><br \/>\nsuit une loi de Fisher sous hypoth\u00e8se que tous les contrastes sont nuls.<\/p>\n<p>On peut donc calculer les p-values comme suit:<\/p>\n<pre><code>T_Scheffe=((contrasts^2)\/(sigma_contrasts^2))\/(3-1)\npvalues=1-pf(T_Scheffe, 3-1,length(X)-3)\nprint(data.frame(results,pvalues))\n\n##     contrast sigma    LCI    UCI pvalues\n## A-B   -2.555 1.133 -5.034 -0.076 0.08718\n## A-C   -0.868 1.014 -3.087  1.352 0.69507\n## B-C    1.688 1.161 -0.854  4.229 0.35448\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Le\u00a0test de Scheff\u00e9 est un test qu&rsquo;on applique souvent apr\u00e8s une ANOVA: on parle de test post-hoc (au m\u00eame titre, par exemple, qu&rsquo;un test de Tukey). En effet, l&rsquo;ANOVA \u00e0 1 facteur permet de mettre en \u00e9vidence (le cas \u00e9ch\u00e9ant) le fait qu&rsquo;au moins un groupe a une moyenne diff\u00e9rente des autres. Si on a affaire \u00e0 3 groupes ou plus, une question se pose alors: quels sont les groupes.. <a href=\"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/test-des-contrastes-de-scheffe\/\">Read More<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-337","post","type-post","status-publish","format-standard","hentry","category-tous-les-posts"],"_links":{"self":[{"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/posts\/337","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/comments?post=337"}],"version-history":[{"count":80,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/posts\/337\/revisions"}],"predecessor-version":[{"id":1524,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/posts\/337\/revisions\/1524"}],"wp:attachment":[{"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/media?parent=337"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/categories?post=337"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/tags?post=337"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}