Stata : analyse de la variance

Table des matières

L'analyse de variance (ANOVA), souvent retrouvée dans l'exploitation d'un plan d'expérience, peut être dérivée dans la plupart des cas à partir des modèles de régression vus au chapitre 3 (et plus tard, aux chapitres 9 et 10). Toutefois, une présentation de la décomposition des sources de variance et du calcul des sommes de carré associées, indépendante de l'approche de régression linéaire, est proposée dans ce chapitre, d'autant que Stata dispose de commandes spécifiques pour les modèles d'ANOVA, en particulier oneway et anova.

Dupont [1] consacre plusieurs chapitres de son excellent ouvrage à l'analyse de variance, incluant le cas des mesures répétées.

Analyse de variance à un facteur

Modèle d'ANOVA

Le modèle d'ANOVA à un facteur se formule ainsi :

\[ y_{ij}=\mu_i+\varepsilon_{ij}\qquad i=1,\dots,a;\, j=1,\dots,n, \]

où \(y_{ij}\) désigne la $j$ème observation associée au traitement (ou groupe) \(i\), \(\mu_i\) est la moyenne du traitement et \(\varepsilon_{ij}\) représente la valeur résiduelle. La formulation ci-dessus se nomme "modèle moyen". Si l'on considère les \(\mu_i\) par rapport à la moyenne générale, \(\mu\), avec \(\mu_i = \mu+\tau_i\), alors on peut écrire le modèle sous forme de modèle d'effets :

\[ y_{ij}=\mu + \tau_i+\varepsilon_{ij}\qquad i=1,\dots,a;\, j=1,\dots,n. \]

Les \(\tau_i\) reflètent ainsi les différentes entre les moyennes des traitements et la moyenne générale, et il s'agit bien d'effets au sens propre du terme.

Dans l'exemple suivant, tiré de [1], on s'intéresse à la relation entre l'âge des participants à l'étude au moment du diagnostique et un polymorphisme de séquence. Les données sont disponibles dans le fichier polymorphism.dta :

use data/polymorphism
list in 1/5
set more off
use data/polymorphism
list in 1/5

     +---------------------+
     | id   age   genotype |
     |---------------------|
  1. |  1    43    1.6/1.6 |
  2. |  2    47    1.6/1.6 |
  3. |  3    55    1.6/1.6 |
  4. |  4    57    1.6/1.6 |
  5. |  5    61    1.6/1.6 |
     +---------------------+

Un résumé descriptif des données de groupe (ici défini par le type de polymorphisme) peut être obtenu très rapidement à l'aide de tabstat :

tabstat age, by(genotype) stat(mean sd n)
tabstat age, by(genotype) stat(mean sd n)

Summary for variables: age
     by categories of: genotype (Genotype)

genotype |      mean        sd         N
---------+------------------------------
 1.6/1.6 |  64.64286  11.18108        14
 1.6/0.7 |  64.37931  13.25954        29
 0.7/0.7 |    50.375  10.63877        16
---------+------------------------------
   Total |  60.64407  13.49427        59
----------------------------------------

Un résumé graphique de la distribution conditionnelle de l'âge dans les trois groupes s'obtient tout aussi simplement à l'aide de graph box :

set scheme plotplain
graph box age, over(genotype)
graph export "fig-04-boxplot-age-genotype.eps", replace

fig-04-boxplot-age-genotype.png

Figure 1 : Histogrammes pour l'âge de diagnostic en fonction du polymorphisme

Il est également possible d'afficher ces distributions sous forme d'histogrammes d'effectifs ou de fréquences, par exemple :

histogram age, by(genotype, col(3)) freq
graph export "fig-04-hist-age-genotype.eps", replace

fig-04-hist-age-genotype.png

Figure 2 : Distribution de l'âge de diagnostic en fonction du polymorphisme

Le tableau d'ANOVA peut être constuit à l'aide de oneway dans le cas où il n'y a qu'une seule variable explicative. L'option tabulate fournit exactement le même résumé numérique que la commande tabstat ci-dessus, tandis que l'option bonferonni ajoute la comparaison de l'ensemble des paires de moyennes avec une correction de Bonferroni pour les tests multiples. Si l'on ne souhaite que ces derniers, il suffit d'ajouter l'option noanova, mais en règle générale il est préférable de réaliser le test d'ensemble avant d'examiner les tests spécifiques, sauf si l'on a une hypothèse de recherche très particulière.

oneway age genotype
oneway age genotype

                        Analysis of Variance
    Source              SS         df      MS            F     Prob > F
------------------------------------------------------------------------
Between groups      2315.73355      2   1157.86678      7.86     0.0010
 Within groups      8245.79187     56   147.246283
------------------------------------------------------------------------
    Total           10561.5254     58   182.095266

Bartlett's test for equal variances:  chi2(2) =   1.0798  Prob>chi2 = 0.583

Conditions d'application du test

Il est généralement recommendé de vérifier les hypothèses du modèle, en particulier celle portant sur l'égalité des variances parentes, de manière graphique. Notons que oneway propose d'office un test formel d'égalité des variances (test de Bartlett). Le test de Levenne est disponible via la commande robvar (statistique W50) :

robvar age, by(genotype)
robvar age, by(genotype)

            |     Summary of Age at Diagnosis
   Genotype |        Mean   Std. Dev.       Freq.
------------+------------------------------------
    1.6/1.6 |   64.642857   11.181077          14
    1.6/0.7 |    64.37931   13.259535          29
    0.7/0.7 |      50.375   10.638766          16
------------+------------------------------------
      Total |   60.644068   13.494268          59

W0  =  0.83032671   df(2, 56)     Pr > F = 0.44120161

W50 =  0.60460508   df(2, 56)     Pr > F = 0.54981692

W10 =  0.79381598   df(2, 56)     Pr > F = 0.45713722

Concernant la normalité des distributions (parentes), à partir de l'échantillon il est toujours possible de tracer la fonction de répartition des observations, un histogramme ou un diagramme de type boîte à moustaches (cf. section suivante). La commande swilk fournit le test de Shapiro-Wilks, mais comme les méthodes graphiques restent à privilégier, voici une façon de vérifier la normalité des résidus du modèle (dans le cas de l'ANOVA à un facteur, cela ne change pas grand-chose par rapport au fait de travailler sur les observations directement, mais dans le cas à plus d'un facteur en interaction c'est la méthode recommendée) :

quietly anova age genotype
predict r, resid
qnorm r
graph export "fig-04-qnorm-age-genotype-resid.eps", replace

fig-04-qnorm-age-genotype-resid.png

Figure 3 : Distribution des résidus du modèle d'ANOVA

Commandes graphiques

Stata n'offre pas vraiment de commandes graphiques de post-estimation à l'exception de celles applicables au cas du modèle linéaire, telles que les graphiques de résidus en fonction des valeurs prédites ou observées. Il existe toutefois de nombreux packages disponibles sur le site SSC, en particulier la commande anovaplot (une approche manuelle pour construire un graphique d'interaction est présentée dans la section suivante) :

anovaplot
graph export "fig-04-anovaplot-age-genotype.eps", replace

fig-04-anovaplot-age-genotype.png

Figure 4 : Valeurs prédites par le modèle d'ANOVA

Une référence intéressante concernant les approches graphiques pour le diagnostique des modèles de régression, au sens large, est l'article de [2].

Comparaisons multiples

Lorsque le résultat du test d'ANOVA est significatif, il est souvent intéressant, voire nécessaire d'aller inspecter le résultat des comparaisons de chaque paire de moyennes. Comme indiqué plus haut, il est déconseillé de procéder à de telles comparaisons multiples lorsque l'ANOVA n'est en elle-même pas significative puisque dans ce cas il s'agit un peu de ce que l'on appelle du "data fishing". Cela dit, dans certains cas de figure, il est possible de pré-spécifier les comparaisons d'intérêt et de n'analyser que ces contrastes d'intérêt. Dans ce cas, le modèle d'ANOVA est même facultatif.

Il y a deux manières de procéder pour réaliser des comparaisons de paires de moyennes sous Stata (outre la comparaison manuelle à l'aide de ttest): (1) la commande oneway offre une option permettant de tester les paires de moyennes et d'appliquer une correction pour borner le risque d'erreur d'ensemble (FWER) ; (2) les commandes pwcompare, contrast ou lincome (ou test). La commande margins fournit plus de souplesse dans l’estimation conditionnelle ou marginale des effets et permet en outre la représentation graphique des résultats grâce à marginsplot. En dehors de pwcompare, les autres commandes restent applicables dans le cas du modèle linéaire dans son ensemble.

Voici le résultat des tests multiples à partir de oneway :

oneway age genotype, bonferroni noanova
oneway age genotype, bonferroni noanova

                  Comparison of Age at Diagnosis by Genotype
                                (Bonferroni)
Row Mean-|
Col Mean |    1.6/1.6    1.6/0.7
---------+----------------------
 1.6/0.7 |   -.263547
         |      1.000
         |
 0.7/0.7 |   -14.2679   -14.0043
         |      0.007      0.001

On arriverait naturellement aux mêmes conclusions en construisant manuellement les tests de Student correspondants, moyennant la prise en compte de la bonne somme de carrés (variance "poolée") :

quietly ttest age if genotype != 1, by(genotype)
display r(p)*3
quietly ttest age if genotype != 1, by(genotype)
00228566

L'ANOVA via la régression

The regress command is used to fit the underlying regression model corresponding to an ANOVA model fit using the anova command. Type regress after anova to see the coefficients, standard errors, etc., of the regression model for the last run of anova.

quietly anova age genotype
regress
quietly anova age genotype
regress

      Source |       SS       df       MS              Number of obs =      59
-------------+------------------------------           F(  2,    56) =    7.86
       Model |  2315.73355     2  1157.86678           Prob > F      =  0.0010
    Residual |  8245.79187    56  147.246283           R-squared     =  0.2193
-------------+------------------------------           Adj R-squared =  0.1914
       Total |  10561.5254    58  182.095266           Root MSE      =  12.135

------------------------------------------------------------------------------
         age |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
    genotype |
    1.6/0.7  |  -.2635468   3.949057    -0.07   0.947    -8.174458    7.647365
    0.7/0.7  |  -14.26786   4.440775    -3.21   0.002     -23.1638   -5.371915
             |
       _cons |   64.64286   3.243084    19.93   0.000     58.14618    71.13953
------------------------------------------------------------------------------

Cas des variances non égales

Plusieurs généralisations du test de Welch dans le cas où les variances ne sont pas égales ont été proposées [3]. Sous Stata, les procédures wtest et fstar peuvent être téléchargées. Voici un exemple d'application avec wtest, dont les auteurs ont montré que cette statistique de test convient dans le cas où les échantillons sont de même taille (ce n'est pas vraiment le cas ici) mais de variance différente [4] :

wtest age genotype
wtest age genotype
unrecognized command:  wtest
r(199);

Approche non paramétrique

L'ANOVA de Kruskal-Wallis, qui généralise la commande ranksum au cas à plus de deux échantillons, est disponible via la commande kwallis :

kwallis age, by(genotype)
kwallis age, by(genotype)

Kruskal-Wallis equality-of-populations rank test

  +---------------------------+
  | genotype | Obs | Rank Sum |
  |----------+-----+----------|
  |  1.6/1.6 |  14 |   494.00 |
  |  1.6/0.7 |  29 |   999.50 |
  |  0.7/0.7 |  16 |   276.50 |
  +---------------------------+

chi-squared =    12.060 with 2 d.f.
probability =     0.0024

chi-squared with ties =    12.073 with 2 d.f.
probability =     0.0024

Cette commande ne dispose pas d'option. On peut retrouvera simplement les sommes des rangs (voire les moyennes) utilisées dans ce test statistique à l'aide des instructions suivantes :

egen rr = rank(age)
bysort genotype : egen rs = sum(rr)
tabdisp genotype, cellvar(rs) format(%3.1f)
egen rr = rank(age)
bysort genotype : egen rs = sum(rr)
tabdisp genotype, cellvar(rs) format(%3.1f)

----------------------
 Genotype |         rs
----------+-----------
  1.6/1.6 |      494.0
  1.6/0.7 |      999.5
  0.7/0.7 |      276.5
----------------------

Il est également possible de coupler cette instruction avec une série de tests post-hoc de Mann-Whitney, comme illustré ci-dessous :

foreach k of numlist 1/3 {
  quietly ranksum age if genotype != `k', by(genotype)
  display r(z), "(p=" 2*(1-normal(r(z))) ")"
}
05188301 (p=.95862192)

Analyse de variance à plusieurs facteurs

Utilisation de la commande anova

La commande oneway est limité au cas à un facteur explicatif. La commande anova est plus générale et couvre : les plans factoriels et emboîtés, les plans équilibrés ou non (cf. calcul des sommes de carrés), les mesures répétées, l’analyse de covariance. Dans le cas à un facteur à effet fixe, on retrouvera évidemment les mêmes résultats que plus haut :

anova age genotype
anova age genotype

                           Number of obs =      59     R-squared     =  0.2193
                           Root MSE      = 12.1345     Adj R-squared =  0.1914

                  Source |  Partial SS    df       MS           F     Prob > F
              -----------+----------------------------------------------------
                   Model |  2315.73355     2  1157.86678       7.86     0.0010
                         |
                genotype |  2315.73355     2  1157.86678       7.86     0.0010
                         |
                Residual |  8245.79187    56  147.246283   
              -----------+----------------------------------------------------
                   Total |  10561.5254    58  182.095266

Les comparaisons par paires de moyennes s’obtiennent à l’aide de pwcompare, commande plus générale que pwmean. Les options de correction (mcompare()) incluent en plus : tukey, snk, duncan et dunnett.

pwcompare genotype, cformat(%3.2f)
pwcompare genotype, cformat(%3.2f)

Pairwise comparisons of marginal linear predictions

Margins      : asbalanced

---------------------------------------------------------------------
                    |                                 Unadjusted
                    |   Contrast   Std. Err.     [95% Conf. Interval]
--------------------+------------------------------------------------
           genotype |
1.6/0.7 vs 1.6/1.6  |      -0.26       3.95         -8.17        7.65
0.7/0.7 vs 1.6/1.6  |     -14.27       4.44        -23.16       -5.37
0.7/0.7 vs 1.6/0.7  |     -14.00       3.78        -21.57       -6.43
---------------------------------------------------------------------

Voici un exemple de plan d'expérience dans lequel on s'intéresse à la fabrication d'une batterie capable de fonctionner dans des conditions extrêmes de température [5]. Cette étude comprend deux facteurs expérimentaux ayant trois niveaux chacun : la température (°F) et un paramètre lié au design de la batterie elle-même. Il s'agit donc d'un plan factoriel \(3^2\). Les données sont disponibles dans le fichier battery.txt.

import delimited "data/battery.txt", delimiter("", collapse) varnames(1) clear
list in 1/3
 r
(3 vars, 36 obs)
list in 1/3

     +----------------------------+
     | life   material   temper~e |
     |----------------------------|
  1. |  130          1         15 |
  2. |   74          1         15 |
  3. |  155          1         15 |
     +----------------------------+

Voici les résultats pour le modèle avec interaction :

anova life material##temperature
anova life material##temperature

                           Number of obs =      36     R-squared     =  0.7652
                           Root MSE      = 25.9849     Adj R-squared =  0.6956

                  Source |  Partial SS    df       MS           F     Prob > F
    ---------------------+----------------------------------------------------
                   Model |  59416.2222     8  7427.02778      11.00     0.0000
                         |
                material |  10683.7222     2  5341.86111       7.91     0.0020
             temperature |  39118.7222     2  19559.3611      28.97     0.0000
    material#temperature |  9613.77778     4  2403.44444       3.56     0.0186
                         |
                Residual |    18230.75    27  675.212963   
    ---------------------+----------------------------------------------------
                   Total |  77646.9722    35  2218.48492

On rappelle que le modèle à effets pour ce type d'ANOVA s'écrit :

\[ y_{ijk}=\mu+\tau_i+\beta_j+(\tau\beta)_{ij}+\varepsilon_{ijk}, \]

où \(i\), \(j\) (\(i=1\dots a\), \(j=1\dots b\)) décrivent les niveaux des facteurs \(A\) et \(B\), et \(k\) représente le numéro d'observation (\(k=1\dots n\)). L'ordre dans lequel les observations sont choisies est tiré au sort, de sorte que l'on parle d'un plan complètement randomisé. On distingue \(a+b+1\) dépendances linéaires dans ce système d'équations, et par conséquent les paramètres ne peuvent être identifiés sans imposer certaines contraintes. En règle générale, on impose \(\sum_{i=1}^a\hat{\tau}_i=0\), \(\sum_{j=1}^b\hat{\beta}_j=0\), \(\sum_{i=1}^a\widehat{\tau\beta}_{ij}=0\) (\(j=1,2,\dots,b\)) et \(\sum_{j=1}^b\widehat{\tau\beta}_{ij}=0\) (\(i=1,2,\dots,a\)). On montre avec un peu d'algèbre que l'équation ci-dessus peut être exprimée sous la forme d'une somme corrigée de sommes de carrés :

\[ \begin{split} \sum_{i=1}^a\sum_{j=1}^b\sum_{k=1}^n(y_{ijk}-\bar{y}_{\cdot\cdot\cdot})^2 &= \sum_{i=1}^a\sum_{j=1}^b\sum_{k=1}^n[ (\bar{y}_{i\cdot\cdot}-\bar{y}_{\cdot\cdot\cdot})+(\bar{y}_{\cdot j\cdot}-\bar{y}_{\cdot\cdot\cdot}) \\ & \quad + (\bar{y}_{ij\cdot}-\bar{y}_{i\cdot\cdot}-\bar{y}_{\cdot j\cdot}+\bar{y}_{\cdot\cdot\cdot})+(y_{ijk}-\bar{y}_{ij\cdot})]^2\\ &= bn\sum_{i=1}^a(\bar{y}_{i\cdot\cdot}-\bar{y}_{\cdot\cdot\cdot})^2+an\sum_{j=1}^b(\bar{y}_{\cdot j\cdot}-\bar{y}_{\cdot\cdot\cdot})^2 \\ & \quad + n\sum_{i=1}^a\sum_{j=1}^b(\bar{y}_{ij\cdot}-\bar{y}_{i\cdot\cdot}-\bar{y}_{\cdot j\cdot}+\bar{y}_{\cdot\cdot\cdot})^2\\ & \quad + \sum_{i=1}^a\sum_{j=1}^b\sum_{k=1}^n(y_{ijk}-\bar{y}_{ij\cdot})^2 \end{split} \]

Sous forme symbolique, et on retrouve la formule passée en arguments de anova (sans la résiduelle), on a bien \(SS_T=SS_A+SS_B+SS_{AB}+SS_E\). Les hypothèses associées à ce type de plan portent généralement sur les effets principaux et sur l'effet d'interaction :

  • égalité des effets du traitement en lignes, \(H_0:\; \tau_1=\tau_2=\dots=\tau_a=0\) ;
  • égalité des effets du traitement en colonnes, \(H_0:\; \beta_1=\beta_2=\dots=\beta_b=0\) ;
  • absence d'interaction entre les traitements en lignes et en colonnes, \(H_0:\; (\tau\beta)_{ij}=0\quad \textrm{for all}\; i,j\).

Voici le tableau résumant les moyennes pour chaque traitement, ainsi que les écart-types et effectifs associés. On pourra vérifier que le plan est parfaitement équilibré :

table material temperature, contents(mean life sd life n life) format(%4.1f)
table material temperature, contents(mean life sd life n life) format(%4.1f)

-------------------------------
          |     Temperature    
 Material |    15     70    125
----------+--------------------
        1 | 134.8   57.2   57.5
          |  45.4   23.6   26.9
          |     4      4      4
          | 
        2 | 155.8  119.8   49.5
          |  25.6   12.7   19.3
          |     4      4      4
          | 
        3 | 144.0  145.8   85.5
          |  26.0   22.5   19.3
          |     4      4      4
-------------------------------

Un graphique d'interaction permettant d'illustrer les variations de moyennes entre les conditions pourrait être constuit à l'aide de scatter comme suit :

preserve
collapse (mean) mean=life (sd) sd=life, by(material temperature)
list in 1/3
drop sd
reshape wide mean, i(temperature) j(material)
twoway connected mean* temperature, legend(label(1 "#1") label(2 "#2") label(3 "#3")) ytitle(Mean life)
restore

Il existe également les commandes rcap et serrbar pour gérer les barres d'erreur. Toutefois la commande marginplot est beaucoup plus souple d'utilisation et elle s'interface directement avec les modèles statistiques les plus courants. Voici une exemple de son utilisation avec le modèle précédent :

quietly margins temperature#material
marginsplot, name(p)
graph export "fig-04-margins-life-battery.eps", replace name(p)

fig-04-margins-life-battery.png

Figure 5 : Graphique d'interaction avec la commande marginsplot

Définition et analyse de contrastes

Voyons ce que l'on peut réaliser en termes de tests de contrastes à l'aide de pwcompare. Dans un premier temps, la comparaison de l'ensemble des paires de moyennes peut être réalisée en décomposant le terme d'interaction, et en utilisant la méthode de Tukey comme correction pour les tests multiples :

pwcompare material#temperature, mcompare(tukey)
pwcompare material#temperature, mcompare(tukey)

Pairwise comparisons of marginal linear predictions

Margins      : asbalanced

-----------------------------------
                     |    Number of
                     |  Comparisons
---------------------+-------------
material#temperature |           36
-----------------------------------

----------------------------------------------------------------------
                     |                                   Tukey
                     |   Contrast   Std. Err.     [95% Conf. Interval]
---------------------+------------------------------------------------
material#temperature |
 (1  70) vs (1  15)  |      -77.5   18.37407     -139.3232   -15.67681
 (1 125) vs (1  15)  |     -77.25   18.37407     -139.0732   -15.42681
 (2  15) vs (1  15)  |         21   18.37407     -40.82319    82.82319
 (2  70) vs (1  15)  |        -15   18.37407     -76.82319    46.82319
 (2 125) vs (1  15)  |     -85.25   18.37407     -147.0732   -23.42681
 (3  15) vs (1  15)  |       9.25   18.37407     -52.57319    71.07319
 (3  70) vs (1  15)  |         11   18.37407     -50.82319    72.82319
 (3 125) vs (1  15)  |     -49.25   18.37407     -111.0732    12.57319
 (1 125) vs (1  70)  |        .25   18.37407     -61.57319    62.07319
 (2  15) vs (1  70)  |       98.5   18.37407      36.67681    160.3232
 (2  70) vs (1  70)  |       62.5   18.37407      .6768132    124.3232
 (2 125) vs (1  70)  |      -7.75   18.37407     -69.57319    54.07319
 (3  15) vs (1  70)  |      86.75   18.37407      24.92681    148.5732
 (3  70) vs (1  70)  |       88.5   18.37407      26.67681    150.3232
 (3 125) vs (1  70)  |      28.25   18.37407     -33.57319    90.07319
 (2  15) vs (1 125)  |      98.25   18.37407      36.42681    160.0732
 (2  70) vs (1 125)  |      62.25   18.37407      .4268132    124.0732
 (2 125) vs (1 125)  |         -8   18.37407     -69.82319    53.82319
 (3  15) vs (1 125)  |       86.5   18.37407      24.67681    148.3232
 (3  70) vs (1 125)  |      88.25   18.37407      26.42681    150.0732
 (3 125) vs (1 125)  |         28   18.37407     -33.82319    89.82319
 (2  70) vs (2  15)  |        -36   18.37407     -97.82319    25.82319
 (2 125) vs (2  15)  |    -106.25   18.37407     -168.0732   -44.42681
 (3  15) vs (2  15)  |     -11.75   18.37407     -73.57319    50.07319
 (3  70) vs (2  15)  |        -10   18.37407     -71.82319    51.82319
 (3 125) vs (2  15)  |     -70.25   18.37407     -132.0732   -8.426813
 (2 125) vs (2  70)  |     -70.25   18.37407     -132.0732   -8.426813
 (3  15) vs (2  70)  |      24.25   18.37407     -37.57319    86.07319
 (3  70) vs (2  70)  |         26   18.37407     -35.82319    87.82319
 (3 125) vs (2  70)  |     -34.25   18.37407     -96.07319    27.57319
 (3  15) vs (2 125)  |       94.5   18.37407      32.67681    156.3232
 (3  70) vs (2 125)  |      96.25   18.37407      34.42681    158.0732
 (3 125) vs (2 125)  |         36   18.37407     -25.82319    97.82319
 (3  70) vs (3  15)  |       1.75   18.37407     -60.07319    63.57319
 (3 125) vs (3  15)  |      -58.5   18.37407     -120.3232    3.323187
 (3 125) vs (3  70)  |     -60.25   18.37407     -122.0732    1.573187
----------------------------------------------------------------------

Le test d'un contraste spécifique peut être réalisé tout aussi simplement, en indiquant le niveau du ou des facteurs qui nous intéressent, ainsi que les degrés de liberté associés :

pwcompare i2.material#i3.temperature, mcompare(tukey) df(34)
pwcompare i2.material#i3.temperature, mcompare(tukey) df(34)
level 3 of factor temperature not found in list of covariates
r(111);

Des simulations de Monte Carlo permettent évaluer la puissance statistique d'un plan factoriel, en spécifiant les valeurs attendues pour les moyennes et variances dans chacune des conditions expérimentales. Il ne s'agit donc pas d'un calcul de puissance a posteriori.

Autres plans d'expérience

Plan en blocs complets randomisés

Les plans en blocs complets randomisés (RCBD en anglais) sont utilisés lorsque l'on souhaite contrôler certains facteurs de nuisance. Le facteur d'intérêt est alors appelé traitement et le ou les facteurs de nuisance bloc(s). Il ne faut pas les confondre avec les modèles d'analyse de covariance dans lesquels les réponses sont ajustées a posteriori pour prendre en compte les facteurs de nuisance.

Block what you can; randomize what you cannot. — George E.P. Box

Les conditions de validité associées à ce type d'analyse sont les mêmes que dans le cas de l'ANOVA à plusieurs facteurs (indépendance, normalité et homogénéité des variances), mais on postule également l'absence d'interaction entre traitement et bloc (additivité des effets) et la symétrie composée de la matrice de variance-covariance, comme dans le cas de l'ANOVA à mesures répétées (dans cette dernière, les sujets sont assimilables aux blocs, mais chaque bloc contient plusieurs sujets appariés sur une ou plusieurs caractéristiques communes).

Le modèle à effet se formule ainsi :

\[ y_{ij}=\mu+\tau_i+\beta_j+\varepsilon_{ij}\qquad (i=1,2,\dots,a; j=1,2,\dots,b), \]

avec les contraintes \(\sum_{i=1}^a\tau_i = 0\) et \(\sum_{j=1}^b\beta_j = 0\). L'équation fondamentale de cette ANOVA revient donc à \(SS_T=SS_{\textrm{treat}}+SS_{\textrm{block}}+SS_E\). La résiduelle à \((a-1)(b-1)\) degrés de liberté capture la variance non expliquée par les facteurs considérés.

Considérons l'exemple suivant, tiré de

Plan en blocs incomplets équilibrés

Les plans en blocs incomplets équilibrés (BIBD en anglais) font partie des plans en blocs aléatoires dans lesquels certains traitements ne sont pas observés pour certains blocs ou combinaisons de blocs. Si l'on note \(a\) le nombre de traitements, et \(k\) le nombre maximum de traitements dans chaque bloc (\(k < a\)), alors un plan BIBD se résume à un arrangement de \(a \choose k\) combinaisons [6].

Voici un exemple discuté par Montgomery, chapitre 4 [5] :

Tableau 1 : Résultats d'une expérience de catalyse (Tableau 4–21)
Traitement 1 2 3 4 \(y_{i\cdot}\)
1 73 74 -- 71 218
2 -- 75 67 72 214
3 73 75 68 -- 216
4 75 -- 72 75 222
\(y_{\cdot j}\) 221 224 207 218 \(870=y_{\cdot\cdot}\)

Si l'on considère qu'il y a \(a\) traitements et \(b\) blocs, et que chaque bloc consiste en \(k\) traitements, avec \(r\) répliques au total dans le plan, alors on a \(N = ar = bk\) observations, et le nombre de fois où chaque paire de traitement apparaît dans le même bloc vaut \(\lambda = \frac{r(k-1)}{a-1}\), \(\lambda\in \{0,1,2,\dots\}\). Si \(a = b\), le plan est dit symétrique. 1

use data/tab-4-21, clear
use data/tab-4-21, clear
.dta too modern
    File data/tab-4-21.dta is from a more recent version of Stata.  Type 
    update query to determine whether a free update of Stata is available,
    and browse http://www.stata.com/ to determine if a new version is
    available.
r(610);

Références

[1] W. D. Dupont, Statistical Modeling for Biomedical Researchers. Cambridge University Press, 2nd ed., 2009.
[2] N. Cox, “Speaking stata: Graphing model diagnostics,” The Stata Journal, vol. 4, no. 4, pp. 449--475, 2004.
[3] B. L. Welch, “On the comparison of several mean values: an alternative approach,” Biometrika, vol. 38, p. 330—336, 1951.
[4] R. Wilcox, V. Charlin, and K. Thompson, “New monte carlo results on the robustness of the ANOVA f, W and F statistics,” vol. 15, no. 4, pp. 933--943, 1986.
[5] D. C. Montgomery, Design and Analysis of Experiments. Wiley, 5 ed., 2001.
[6] K. Hinkelmann and O. Kempthorne, Design and Analysis of Experiments. Volume 2: Advanced Experimental Design. John Wiley & Sons, Inc., 2005.

Notes de bas de page:

1

Comme \(\lambda\) est forcément un entier, cela limite l'espace des solutions pour certains plans. Par exemple, les contraintes \(r=4\), \(t=4\), \(b=8\) et \(k=2\) ne sont pas admissibles dans un simple plan en blocs aléatoires, mais restent valides dans le cas un plan en blocs incomplets équilibrés.

Generated by Emacs 26.3 (Org mode 9.3.1) on 2022-05-13 ven. 22:39 (chl@aliquote.org)