Une anova avec modèle mixte comme VARCOMP dans SAS
Créons d’abord un jeu de données. On souhaite déterminer la précision et la répétabilité d’une analyse. Pour cela, la mesure est effectuée par 2 techniciens différents, sur des concentrations de produits différents sur 3 jours différents et avec 2 réplicats.
library(dplyr)
set.seed(42)
data <- tibble(
concentration = rep(c(10, 30, 50, 80), 3*2),
technicien = rep(c("A", "B"), each = 3*2*2),
jour = rep(rep(1:3, each = 2*2), 2),
replicat = rep(1:2, times = 2*3*2)) %>%
mutate(mesure = ifelse(
technicien == "A",
0.2 * concentration + rnorm(12, sd = 3),
0.2 * concentration + rnorm(12, sd = 2)))
data
# A tibble: 24 x 5
concentration technicien jour replicat mesure
<dbl> <chr> <int> <int> <dbl>
1 10 A 1 1 7.69
2 30 A 1 2 4.71
3 50 A 1 1 9.23
5 10 A 2 1 3.38
6 30 A 2 2 4.08
9 10 A 3 1 5.11
10 30 A 3 2 4.17
# ... with 14 more rows
Avec un effet aléatoire sur le jour, l’anova peut se faire avec la fonction anovaVCA
du package {VCA}. Cette fonction, avec les paramètres par défaut, réalise exactement la même Avona Type-I que la fonction PROC VARCOMP
dans SAS.
library(VCA)
# Result Variance Component Analysis
res <- anovaVCA(mesure ~ (technicien)/jour,
Data = as.data.frame(data))
res
Result Variance Component Analysis:
-----------------------------------
Name DF SS MS
1 total 17.345664
2 technicien 1 65.789545 65.789545
3 technicien:jour 4 27.371049 6.842762
4 error 18 969.992448 53.888469
VC %Total SD CV[%]
1 58.800701 100 7.668162 84.168816
2 4.912232 8.354036 2.216356 24.327607
3 0* 0* 0* 0*
4 53.888469 91.645964 7.340877 80.576405
Mean: 9.110454 (N = 24)
Experimental Design: balanced | Method: ANOVA | * VC set to 0 | adapted MS used for total DF