ANOVA à deux facteurs

Mesure du voltage de batteries

Nous avons \(a=2\) appareils de mesure \(i=1,2\) (voltmètre facteur A “the appraisers”) et \(b=3\) types de batteries \(j=1,2,3\) (facteur B ou “parts” en anglais).

Le voltage des batteries est mesuré avec chaque voltmètre \(R=3\) fois, soit \(a\times b\times R=18\) mesures.

a<-2
b<-3
R<-3

Voici nos données :

voltmeter<-rep(1:2,each=9)
battery<-rep(rep(1:3,each=3),2)
run<-rep(1:3,6)
voltage<-c(1.4727,1.4206,1.4754,1.5083,1.5739,
           1.4341,1.5517,1.5483,1.4614,1.3337,
           1.6078,1.4767,1.4066,1.5951,1.8419,
           1.7087,1.8259,1.5444)
batteries<-data.frame(voltmeter,battery,run,voltage)
batteries
##    voltmeter battery run voltage
## 1          1       1   1  1.4727
## 2          1       1   2  1.4206
## 3          1       1   3  1.4754
## 4          1       2   1  1.5083
## 5          1       2   2  1.5739
## 6          1       2   3  1.4341
## 7          1       3   1  1.5517
## 8          1       3   2  1.5483
## 9          1       3   3  1.4614
## 10         2       1   1  1.3337
## 11         2       1   2  1.6078
## 12         2       1   3  1.4767
## 13         2       2   1  1.4066
## 14         2       2   2  1.5951
## 15         2       2   3  1.8419
## 16         2       3   1  1.7087
## 17         2       3   2  1.8259
## 18         2       3   3  1.5444

En toute rigueur nous devrions vérifier que :

  • les échantillons sont issus d’une population normale

  • les variances conditionnelles (variances dans chaque sous-population) sont identiques : homoscédasticité

  • les sous-échantillons sont indépendants

Néanmoins en pratique l’ANOVA est assez robuste.

Soit \(x_{ijr}\) l’observation numéro \(r\) dans l’échantillon \(E_{ij}\)\((i,j)\in \left \{ 1,2 \right \} \times \left \{ 1,2,3 \right \}\)

On a :

\(\overline{x}_{ij}=\frac{1}{3}\sum_{r=1}^{3}x_{ijr}\)

Que nous pouvons obtenir par :

with(batteries, tapply(voltage, list(voltmeter, battery), mean))->mat_Xbar_ij
rownames(mat_Xbar_ij)<-c("vol1","vol2")
colnames(mat_Xbar_ij)<-c("bat1","bat2","bat3")
mat_Xbar_ij
##          bat1     bat2     bat3
## vol1 1.456233 1.505433 1.520467
## vol2 1.472733 1.614533 1.693000

Les moyennes marginales sont :

\(\overline{x}_{i.}=\frac{1}{3}\sum_{j=1}^{3} \overline{x}_{ij}\)

\(\overline{x}_{.j}=\frac{1}{2}\sum_{i=1}^{2} \overline{x}_{ij}\)

Que nous obtenons avec les commandes :

(xbar_i.<-apply(mat_Xbar_ij,1,mean))
##     vol1     vol2 
## 1.494044 1.593422
(xbar_.j<-apply(mat_Xbar_ij,2,mean))
##     bat1     bat2     bat3 
## 1.464483 1.559983 1.606733

et la moyenne générale \(\overline {\overline{X}} :\)

(xbarbar<-mean(batteries$voltage))
## [1] 1.543733

Hypothèses

\(H_{0} : \mu_{i.}=\mu ,\; \forall \; i\)

\(H_{0} : \mu_{.j}=\mu , \; \forall \; j\)

\(H_{0} : \mu_{ij}=\mu ,\; \forall \; i,j\)

Décomposition de la moyenne :

\(x_{ijr}-\overline {\overline{X}}=(\overline{x}_{i.}-\overline {\overline{X}})+(\overline{x}_{.j}-\overline {\overline{X}})+(\overline{x}_{ij}-\overline{x}_{i.}-\overline{x}_{.j}+\overline {\overline{X}})+(x_{ijr}-\overline{x}_{ij})\)

D’où :

\[ \begin{matrix}SCT & = &SCE_{A} & + & SCE_{B} & + & SCE_{AB} & + &SCR \\ \sum_{i=1}^{a}\sum_{j=1}^{b}\sum_{r=1}^{R}\left ( x_{ijr}-\overline {\overline{X}} \right )^{2}& = & \sum_{i=1}^{a}(\overline{x}_{i.}-\overline {\overline{X}})^{2}\times b\times R & + & \sum_{j=1}^{b}(\overline{x}_{.j}-\overline {\overline{X}})^{2}\times a\times R & + & SCE_{AB} & + & \sum_{i=1}^{a}\sum_{j=1}^{b}\sum_{r=1}^{R}(x_{ijr}-\overline{x}_{ij})^{2}\end{matrix} \]

Calculons ces termes :

(SCT<-sum((batteries$voltage-xbarbar)^2))
## [1] 0.315817
(SCE_A<-sum((xbar_i.-xbarbar)^2)*b*R)
## [1] 0.04444174
(SCE_B<-sum((xbar_.j-xbarbar)^2)*a*R)
## [1] 0.06308175
temp<-NULL
for (i in 1:2) {
    for (j in 1:3){ 
      temp<-c(temp,(mat_Xbar_ij[i,j]-xbar_i.[i]-xbar_.j[j]+xbarbar)^2)
                  }
                }
(SCE_AB<-sum(temp)*3)
## [1] 0.01847247
temp<-NULL
for (i in 1:2) {
    for (j in 1:3){ 
      for (k in 1:3){
      temp<-c(temp,(batteries[batteries$voltmeter==i & batteries$battery==j & batteries$run==k,]$voltage-mat_Xbar_ij[i,j])^2)
      
          }
      }
}

(SCR<-sum(temp))
## [1] 0.1898211

Le tableau ci-dessous résume ces résultats, pour les moyennes des carrés il suffit de diviser les Sommes des Carrés par leurs degrés de liberté :

(nous pouvons utiliser des acronymes anglais ou français ainsi SSE et SCR sont identiques ainsi que MSE et MCR)

Tout ceci est assez fastidieux, heureusement avec R tous ces termes se retrouvent très facilement :

ANOVA avec R

result<-anova(lm(voltage~battery+voltmeter+battery*voltmeter,
                 data = batteries))
result
## Analysis of Variance Table
## 
## Response: voltage
##                   Df   Sum Sq  Mean Sq F value Pr(>F)
## battery            2 0.063082 0.031541  1.9939 0.1788
## voltmeter          1 0.044442 0.044442  2.8095 0.1195
## battery:voltmeter  2 0.018472 0.009236  0.5839 0.5728
## Residuals         12 0.189821 0.015818

Décomposition de la variabilité :

La répétabilité, \(\sigma^{2}_{repeatability}=\frac{SCR}{ab(R-1)}\) est obtenue directement comme le “Residuals Mean Sq” de la 4ème ligne:

result$`Mean Sq`[4]
## [1] 0.01581842

La variabilité due au voltmètre (ou Appraiser) \(\sigma^{2}_{Appraisers}=\frac{MSA-MSAB}{b\times R}\) est :

(result$`Mean Sq`[2]-result$`Mean Sq`[3])/(b*R)
## [1] 0.003911723

La variabilité due à l’interaction Batterie-Voltmètre, \(\sigma^{2}_{Interaction}=\frac{MSAB-MSE}{R}=\frac{MSAB-\sigma^{2}_{repeatability}}{R}\) est :

(result$`Mean Sq`[3]-result$`Mean Sq`[4])/R
## [1] -0.002194062

(cette valeur étant négative nous prendrons zéro)

La reproductibilité, \(\sigma^{2}_{reproducibility}=\sigma^{2}_{Appraisers}+\sigma^{2}_{Interaction}\) est alors : 0.003911723

Le gage R&R, mesure la variabilité provoquée par le système de mesure, que nous comparerons ensuite à la variabilité totale.

\(\sigma^{2}_{R\&R}=\sigma^{2}_{repeatability}+\sigma^{2}_{reproducibility}\), prend la valeur :

result$`Mean Sq`[4]+(result$`Mean Sq`[2]-result$`Mean Sq`[3])/(b*R)
## [1] 0.01973015

La variation due au processus, \(\sigma^{2}_{Part \; to \;Part}=\frac{MSB-MSAB}{a\times R}\) :

(result$`Mean Sq`[1]-result$`Mean Sq`[3])/(2*3)
## [1] 0.00371744

Enfin, la variabilité totale \(\sigma^{2}_{Totale}=\sigma^{2}_{R\&R}+\sigma^{2}_{Part \; to \;Part}\) :

result$`Mean Sq`[4]+(result$`Mean Sq`[2]-result$`Mean Sq`[3])/(3*3)+(result$`Mean Sq`[1]-result$`Mean Sq`[3])/(2*3)
## [1] 0.02344759

Pour qu’un système de mesure soit précis, la contribution de la variabilité du Gage R&R ne doit pas dépasser 10% de la variabilité totale.

\(\%Gage \;R\&R=\frac{\sigma_{R\&R}}{\sigma_{Totale}}<10\%\)

Une valeur comprise entre 10 et 30% peut être acceptable.

Une valeur supérieure à 30% représente un mauvais système de mesure.

Dans notre exemple, nous avons :

sqrt(result$`Mean Sq`[4]+(result$`Mean Sq`[2]-result$`Mean Sq`[3])/(3*3))/sqrt(result$`Mean Sq`[4]+(result$`Mean Sq`[2]-result$`Mean Sq`[3])/(3*3)+(result$`Mean Sq`[1]-result$`Mean Sq`[3])/(2*3))
## [1] 0.9173099

Ce qui signifie que la plus grande partie de la variation du processus est due à la variabilité du système de mesure.

Utilisation du Package SixSigma de R

library(SixSigma)
gage_rr<-ss.rr(var = voltage,part = battery,appr = voltmeter,data = batteries,main = "Six Sigma Gage R&R Measure",sub = "Batteries Projet MSA")
## Complete model (with interaction):
## 
##                   Df  Sum Sq Mean Sq F value Pr(>F)
## battery            2 0.06308 0.03154   3.415  0.227
## voltmeter          1 0.04444 0.04444   4.812  0.160
## battery:voltmeter  2 0.01847 0.00924   0.584  0.573
## Repeatability     12 0.18982 0.01582               
## Total             17 0.31582                       
## 
## alpha for removing interaction: 0.05 
## 
## 
## Reduced model (without interaction):
## 
##               Df  Sum Sq Mean Sq F value Pr(>F)
## battery        2 0.06308 0.03154   2.120  0.157
## voltmeter      1 0.04444 0.04444   2.987  0.106
## Repeatability 14 0.20829 0.01488               
## Total         17 0.31582                       
## 
## Gage R&R
## 
##                       VarComp %Contrib
## Total Gage R&R    0.018162959    86.74
##   Repeatability   0.014878111    71.05
##   Reproducibility 0.003284848    15.69
##     voltmeter     0.003284848    15.69
## Part-To-Part      0.002777127    13.26
## Total Variation   0.020940086   100.00
## 
##                       StdDev  StudyVar %StudyVar
## Total Gage R&R    0.13477002 0.8086201     93.13
##   Repeatability   0.12197586 0.7318552     84.29
##   Reproducibility 0.05731359 0.3438816     39.61
##     voltmeter     0.05731359 0.3438816     39.61
## Part-To-Part      0.05269846 0.3161907     36.42
## Total Variation   0.14470690 0.8682414    100.00
## 
## Number of Distinct Categories = 1

gage_rr
## $anovaTable
##                   Df  Sum Sq Mean Sq F value Pr(>F)
## battery            2 0.06308 0.03154   3.415  0.227
## voltmeter          1 0.04444 0.04444   4.812  0.160
## battery:voltmeter  2 0.01847 0.00924   0.584  0.573
## Repeatability     12 0.18982 0.01582               
## Total             17 0.31582                       
## 
## $anovaRed
##               Df  Sum Sq Mean Sq F value Pr(>F)
## battery        2 0.06308 0.03154   2.120  0.157
## voltmeter      1 0.04444 0.04444   2.987  0.106
## Repeatability 14 0.20829 0.01488               
## Total         17 0.31582                       
## 
## $varComp
##                       VarComp %Contrib
## Total Gage R&R    0.018162959    86.74
##   Repeatability   0.014878111    71.05
##   Reproducibility 0.003284848    15.69
##     voltmeter     0.003284848    15.69
## Part-To-Part      0.002777127    13.26
## Total Variation   0.020940086   100.00
## 
## $studyVar
##                       StdDev  StudyVar %StudyVar %Tolerance
## Total Gage R&R    0.13477002 0.8086201     93.13         NA
##   Repeatability   0.12197586 0.7318552     84.29         NA
##   Reproducibility 0.05731359 0.3438816     39.61         NA
##     voltmeter     0.05731359 0.3438816     39.61         NA
## Part-To-Part      0.05269846 0.3161907     36.42         NA
## Total Variation   0.14470690 0.8682414    100.00         NA
## 
## $ncat
## [1] 1

7 opérateurs

setwd("D:/OneDrive - CFAI Centre/Bachelor/R&R")
dd<-read.csv("https://sjaubert.github.io/SPCR/Bachelor_RR.csv",header = T,dec = ".",sep = ";")

Représentation visuelle des données par opérateurs :

library(ggplot2)
ggplot(dd, aes(y=mesure, x=operateur,colour=operateur ,fill=operateur))+
geom_boxplot(alpha=0.5, outlier.alpha=0)+
geom_jitter(width=0.2)+
theme_classic()+geom_violin()

library(SixSigma)
gage_rr<-ss.rr(var = mesure,part = part,appr = operateur,data = dd,main = "Six Sigma Gage R&R Measure",sub = "diamètre de niveau à bulle")
## Complete model (with interaction):
## 
##                 Df  Sum Sq  Mean Sq F value   Pr(>F)
## part             9 0.02510 0.002789   1.797   0.0902
## operateur        6 0.07361 0.012269   7.905 3.91e-06
## part:operateur  54 0.08381 0.001552   0.846   0.7380
## Repeatability   70 0.12845 0.001835                 
## Total          139 0.31098                          
## 
## alpha for removing interaction: 0.05 
## 
## 
## Reduced model (without interaction):
## 
##                Df  Sum Sq  Mean Sq F value   Pr(>F)
## part            9 0.02510 0.002789   1.629    0.114
## operateur       6 0.07361 0.012269   7.167 1.41e-06
## Repeatability 124 0.21226 0.001712                 
## Total         139 0.31098                          
## 
## Gage R&R
## 
##                        VarComp %Contrib
## Total Gage R&R    2.239671e-03    96.68
##   Repeatability   1.711809e-03    73.89
##   Reproducibility 5.278619e-04    22.79
##     operateur     5.278619e-04    22.79
## Part-To-Part      7.693996e-05     3.32
## Total Variation   2.316611e-03   100.00
## 
##                        StdDev   StudyVar %StudyVar
## Total Gage R&R    0.047325159 0.28395096     98.33
##   Repeatability   0.041374011 0.24824406     85.96
##   Reproducibility 0.022975246 0.13785148     47.73
##     operateur     0.022975246 0.13785148     47.73
## Part-To-Part      0.008771543 0.05262926     18.22
## Total Variation   0.048131182 0.28878709    100.00
## 
## Number of Distinct Categories = 1