Chapitre 8 Masse du blanc d’oeuf
La démarche sera la même que celle des chapitres précédents. Il se peut qu’il y ait moins de commentaires.
Même jeu de données oeuf.csv
qui contient différentes mesures dont les masses des blancs d’oeuf mesurées en 5 séances. Mêmes traitements (régimes).
La question est de savoir si les différents régimes induisent des masses de blanc d’oeuf significativement différentes avec le temps. Mais chaque traitement n’ayant pas été appliqué sur chaque groupe d’oiseaux, l’ANOVA à mesures répétées ne pourrait pas être appliquée. Nous comparerons les effets des traitements séance par séance, puis à l’aide d’une figure on appréciera s’il y a une évolution en fonction du temps.
8.1 Les données
mb <- read_csv("data/oeuf.csv")
mb <- mb %>%
select(seance, regime, no_oeuf, masse_blanc) %>%
mutate(id = rep(1:30, 5), .before = 1,
id = factor(id),
seance = factor(seance),
regime = factor(regime))
Le tableau a été préalablement structuré en format long en Excel. J’ai ajouté un identifiant (id
) pour les échantillons des séances.
## Rows: 150
## Columns: 5
## $ id <fct> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,~
## $ seance <fct> seance 1, seance 1, seance 1, seance 1, seance 1, seance 1~
## $ regime <fct> "Ba 0,25", "Ba 0,25", "Ba 0,25", "Ba 0,50", "Ba 0,50", "Ba~
## $ no_oeuf <dbl> 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2~
## $ masse_blanc <dbl> 6.096, 6.043, 5.873, 5.774, 5.839, 5.629, 6.680, 6.997, 6.~
8.2 Visualisation boxplots
bxp <- ggplot(mb, aes(x = regime, y = masse_blanc, fill = regime)) +
geom_boxplot() +
facet_grid(seance ~ .) +
theme(axis.text.x = element_text(angle = 90, color = "black", vjust = 0.5, hjust = 1)) +
theme_bw()
bxp
Difficile d’apprécier les variations entre les traitements et entre les séances.
8.3 Détection des valeurs aberrantes extrêmes
## [1] seance regime id no_oeuf masse_blanc is.outlier
## [7] is.extreme
## <0 rows> (or 0-length row.names)
=> Pas de valeurs aberrantes extrêmes pour toutes les séances.
8.4 Conditions de l’ANOVA
8.4.1 Normalité
Si les données sont normalement distribuées, la p-value de Shapiro-Wilk doit être supérieure à 0,05 pour chaque régime.
## # A tibble: 5 x 4
## seance variable statistic p
## <fct> <chr> <dbl> <dbl>
## 1 seance 1 masse_blanc 0.932 5.44e- 2
## 2 seance 2 masse_blanc 0.510 6.90e- 9
## 3 seance 3 masse_blanc 0.955 2.33e- 1
## 4 seance 4 masse_blanc 0.951 1.84e- 1
## 5 seance 5 masse_blanc 0.312 8.96e-11
=> Normalité confirmée pour toutes les séances sauf les 2 et 5.
Créer des QQ-plots pour chaque point par séance
Tous les points se situent approximativement le long de la ligne de référence. Mais on voit bien les extrêmes en 2 et 5.
8.4.2 Homogénéité des variances
mb %>%
select(seance, regime, masse_blanc) %>%
group_by(seance) %>%
levene_test(masse_blanc ~ regime)
## # A tibble: 5 x 5
## seance df1 df2 statistic p
## <fct> <int> <int> <dbl> <dbl>
## 1 seance 1 9 20 0.758 0.655
## 2 seance 2 9 20 1.05 0.438
## 3 seance 3 9 20 0.664 0.731
## 4 seance 4 9 20 0.850 0.582
## 5 seance 5 9 20 1.00 0.471
=> Toutes les valeurs p sont > 0.05 => toutes les variances sont homogènes.
Les conditions de la validité d’une ANOVA étant remplies, les interprétations seront donc valides. Les cas des séances 2 et 5 veront une vérification supplémentaire.
8.5 ANOVA à 1 facteur séance par séance
8.5.1 Séance 1
8.5.1.1 Le modèle
## Anova Table (Type II tests)
##
## Response: masse_blanc
## Sum Sq Df F value Pr(>F)
## regime 9.829 9 5.694 0.0005954 ***
## Residuals 3.836 20
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
La p-value < 0.01 => différence très significative entre les effets d’au moins 2 régimes sur la masse du blanc d’oeuf à la séance 1.
8.5.1.2 Comparaisons par paires
Comparaisons des moyennes par paires, Student - Newman - Keuls.
cm1 <- (SNK.test(lm1, "regime", group = TRUE))$groups %>%
mutate(regime = rownames(.)) %>%
select(regime, masse_blanc, groups) %>%
as_tibble()
cm1
## # A tibble: 10 x 3
## regime masse_blanc groups
## <chr> <dbl> <chr>
## 1 Ba 10 7.00 a
## 2 Ba 0,75 6.84 ab
## 3 Ba 1 6.13 abc
## 4 YC 6.09 abc
## 5 WC 6.05 abc
## 6 Ba 0,25 6.00 abc
## 7 Ba 2,5 5.92 abc
## 8 Ba 0,50 5.75 bcd
## 9 Ba 5 5.47 cd
## 10 Ba 7,5 4.90 d
8.5.1.3 Visualisation des groupes, bareplots avec labels
ggplot(data = cm1, mapping = aes(x = regime, y = masse_blanc)) +
geom_bar(stat = "identity", color = "blue", fill = "grey", width = 0.6) +
geom_text(aes(label = groups), vjust = -0.5, size = 4) +
ylim(0, 7.5) +
xlab("Régimes") + ylab("Masse du blanc d'oeuf (g)") +
theme(axis.text.x = element_text(angle = 45, color = "black", vjust = 1, hjust = 1)) +
theme_bw()
8.5.2 Séance 2
8.5.2.1 Le modèle
## # A tibble: 2 x 7
## id seance regime no_oeuf masse_blanc is.outlier is.extreme
## <fct> <fct> <fct> <dbl> <dbl> <lgl> <lgl>
## 1 15 seance 2 Ba 2,5 3 7.68 TRUE FALSE
## 2 16 seance 2 Ba 5 1 15.7 TRUE TRUE
## Anova Table (Type II tests)
##
## Response: log(masse_blanc)
## Sum Sq Df F value Pr(>F)
## regime 0.24654 9 2.8469 0.02626 *
## Residuals 0.18282 19
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
La p-value est < 0.05 => Différence significative entre les effetes d’au moins 2 régimes.
## # A tibble: 1 x 3
## variable statistic p.value
## <chr> <dbl> <dbl>
## 1 residuals(lm2) 0.936 0.0786
=> La transformation log après l’exclusion de la valeur extrême améliore la distribution.
8.5.2.2 Comparaisons par paires
cm2 <- (SNK.test(lm2, "regime", group = TRUE))$groups %>%
mutate(regime = rownames(.))
colnames(cm2)[1] <- "masse_blanc"
cm2
## masse_blanc groups regime
## Ba 0,75 1.924077 a Ba 0,75
## Ba 5 1.828731 ab Ba 5
## YC 1.798098 ab YC
## Ba 2,5 1.796606 ab Ba 2,5
## Ba 1 1.760307 ab Ba 1
## Ba 0,25 1.713838 ab Ba 0,25
## Ba 10 1.690466 ab Ba 10
## WC 1.680419 ab WC
## Ba 0,50 1.659057 ab Ba 0,50
## Ba 7,5 1.588909 b Ba 7,5
8.5.2.3 Visualisation des groupes
ggplot(data = cm2, mapping = aes(x = regime, y = masse_blanc)) +
geom_bar(stat = "identity", color = "blue", fill = "grey", width = 0.6) +
ylim(0, 2) +
geom_text(aes(label = groups), vjust = -0.5, size = 4) +
xlab("Régimes") + ylab("Log(Masse du blanc d'oeuf) (g)") +
theme(axis.text.x = element_text(angle = 45, color = "black", vjust = 1, hjust = 1)) +
theme_bw()
8.5.3 Séance 3
8.5.3.1 Le modèle
## Anova Table (Type II tests)
##
## Response: masse_blanc
## Sum Sq Df F value Pr(>F)
## regime 16.2669 9 7.4607 9.802e-05 ***
## Residuals 4.8452 20
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
La p-value < 0.01 => Différence très significative entre les effetes d’au moins 2 régimes.
8.5.3.2 Comparaisons par paires
cm3 <- (SNK.test(lm3, "regime", group = TRUE))$groups %>%
mutate(regime = rownames(.)) %>%
select(regime, masse_blanc, groups) %>%
as_tibble()
cm3
## # A tibble: 10 x 3
## regime masse_blanc groups
## <chr> <dbl> <chr>
## 1 WC 7.15 a
## 2 Ba 0,75 6.50 ab
## 3 Ba 1 6.42 ab
## 4 Ba 0,25 6.27 ab
## 5 YC 6.23 ab
## 6 Ba 10 5.89 ab
## 7 Ba 7,5 5.81 b
## 8 Ba 2,5 5.52 b
## 9 Ba 0,50 5.25 b
## 10 Ba 5 4.34 c
8.5.3.3 Visualisation des groupes
ggplot(data = cm3, mapping = aes(x = regime, y = masse_blanc)) +
geom_bar(stat = "identity", color = "blue", fill = "grey", width = 0.6) +
geom_text(aes(label = groups), vjust = -0.5, size = 4) +
ylim(0, 7.5) +
xlab("Régimes") + ylab("Masse du blanc d'oeuf (g)") +
theme(axis.text.x = element_text(angle = 45, color = "black", vjust = 1, hjust = 1)) +
theme_bw()
8.5.4 Séance 4
8.5.4.1 Le modèle
## Anova Table (Type II tests)
##
## Response: masse_blanc
## Sum Sq Df F value Pr(>F)
## regime 5.9597 9 3.6007 0.008156 **
## Residuals 3.6781 20
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
La p-value < 0.01 => Différence très significative entre les effets d’au moins 2 régimes.
8.5.4.2 Comparaisons par paires, séance 4
cm4 <- (SNK.test(lm4, "regime", group = TRUE))$groups %>%
mutate(regime = rownames(.)) %>%
select(regime, masse_blanc, groups) %>%
as_tibble()
cm4
## # A tibble: 10 x 3
## regime masse_blanc groups
## <chr> <dbl> <chr>
## 1 Ba 2,5 6.39 a
## 2 YC 6.38 a
## 3 Ba 0,75 6.08 a
## 4 Ba 1 6.04 a
## 5 Ba 5 5.86 a
## 6 Ba 10 5.82 a
## 7 WC 5.79 a
## 8 Ba 0,50 5.72 a
## 9 Ba 0,25 5.61 a
## 10 Ba 7,5 4.73 b
8.5.4.3 Visualisation des groupes
ggplot(data = cm4, mapping = aes(x = regime, y = masse_blanc)) +
geom_bar(stat = "identity", color = "blue", fill = "grey", width = 0.6) +
ylim(0, 6.5) +
geom_text(aes(label = groups), vjust = -0.5, size = 4) +
xlab("Régimes") + ylab("Masse du blanc d'oeuf (g)") +
theme(axis.text.x = element_text(angle = 45, color = "black", vjust = 1, hjust = 1)) +
theme_bw()
8.5.5 Séance 5
8.5.5.1 Le modèle
## # A tibble: 1 x 7
## id seance regime no_oeuf masse_blanc is.outlier is.extreme
## <fct> <fct> <fct> <dbl> <dbl> <lgl> <lgl>
## 1 5 seance 5 Ba 0,50 2 -20.6 TRUE TRUE
## Anova Table (Type II tests)
##
## Response: masse_blanc
## Sum Sq Df F value Pr(>F)
## regime 6.7484 9 1.2283 0.3352
## Residuals 11.5987 19
La p-value est > 0.05 => Pas de différence significative entre les effetes des régimes.
## # A tibble: 1 x 3
## variable statistic p.value
## <chr> <dbl> <dbl>
## 1 residuals(lm5) 0.957 0.276
=> Normalité Okay après l’exclusion de l’observation extrême. On poursuivra avec ce modèle.
8.5.5.2 Comparaisons par paires
cm5 <- (SNK.test(lm5, "regime", group = TRUE))$groups %>%
mutate(regime = rownames(.)) %>%
select(regime, masse_blanc, groups) %>%
as_tibble()
cm5
## # A tibble: 10 x 3
## regime masse_blanc groups
## <chr> <dbl> <chr>
## 1 Ba 10 7.00 a
## 2 YC 6.46 a
## 3 Ba 1 6.15 a
## 4 Ba 0,25 6.00 a
## 5 Ba 2,5 5.95 a
## 6 Ba 0,50 5.89 a
## 7 WC 5.74 a
## 8 Ba 0,75 5.66 a
## 9 Ba 7,5 5.49 a
## 10 Ba 5 5.23 a
8.5.5.3 Visualisation
ggplot(data = cm5, mapping = aes(x = regime, y = masse_blanc)) +
geom_bar(stat = "identity", color = "blue", fill = "grey", width = 0.6) +
ylim(0, 7) +
geom_text(aes(label = groups), vjust = -0.5, size = 4) +
xlab("Régimes") + ylab("Masse du blanc d'oeuf (g)") +
theme(axis.text.x = element_text(angle = 45, color = "black", vjust = 1, hjust = 1)) +
theme_bw()
8.6 Évolution de la masse du blanc d’oeuf par régime au cours du temps
8.6.1 Sommaire
mb_ic <- summarySE(mb,
measurevar = "masse_blanc",
groupvars = c("seance", "regime"),
na.rm = TRUE)
mb_ic
## seance regime N masse_blanc sd se ci
## 1 seance 1 Ba 0,25 3 6.004000 0.116503219 0.067263165 0.2894100
## 2 seance 1 Ba 0,50 3 5.747333 0.107509689 0.062070748 0.2670689
## 3 seance 1 Ba 0,75 3 6.838667 0.158500263 0.091510169 0.3937365
## 4 seance 1 Ba 1 3 6.127667 0.193453698 0.111690545 0.4805656
## 5 seance 1 Ba 10 3 6.998000 0.000000000 0.000000000 0.0000000
## 6 seance 1 Ba 2,5 3 5.917667 0.356793124 0.205994606 0.8863233
## 7 seance 1 Ba 5 3 5.472667 0.742875719 0.428899496 1.8454056
## 8 seance 1 Ba 7,5 3 4.902667 0.116216752 0.067097773 0.2886984
## 9 seance 1 WC 3 6.048000 1.060072167 0.612032951 2.6333652
## 10 seance 1 YC 3 6.087000 0.117847359 0.068039204 0.2927491
## 11 seance 2 Ba 0,25 3 5.561333 0.424726186 0.245215778 1.0550783
## 12 seance 2 Ba 0,50 3 5.271000 0.509842132 0.294357492 1.2665181
## 13 seance 2 Ba 0,75 3 6.856333 0.388721408 0.224428410 0.9656375
## 14 seance 2 Ba 1 3 5.819000 0.285930061 0.165081798 0.7102896
## 15 seance 2 Ba 10 3 5.427333 0.292753024 0.169021037 0.7272388
## 16 seance 2 Ba 2,5 3 6.126333 1.376029191 0.794450824 3.4182460
## 17 seance 2 Ba 5 3 9.385333 5.464184508 3.154748396 13.5737868
## 18 seance 2 Ba 7,5 3 4.909333 0.396237723 0.228767956 0.9843091
## 19 seance 2 WC 3 5.383333 0.495768427 0.286232035 1.2315570
## 20 seance 2 YC 3 6.039000 0.124012096 0.071598417 0.3080631
## 21 seance 3 Ba 0,25 3 6.272667 0.873538971 0.504337960 2.1699911
## 22 seance 3 Ba 0,50 3 5.245667 0.364019688 0.210166865 0.9042750
## 23 seance 3 Ba 0,75 3 6.505000 0.657340855 0.379515920 1.6329252
## 24 seance 3 Ba 1 3 6.418667 0.745284733 0.430290341 1.8513899
## 25 seance 3 Ba 10 3 5.890000 0.000000000 0.000000000 0.0000000
## 26 seance 3 Ba 2,5 3 5.519000 0.046000000 0.026558112 0.1142703
## 27 seance 3 Ba 5 3 4.344000 0.273000000 0.157616623 0.6781696
## 28 seance 3 Ba 7,5 3 5.814667 0.641529682 0.370387335 1.5936481
## 29 seance 3 WC 3 7.146000 0.000000000 0.000000000 0.0000000
## 30 seance 3 YC 3 6.230000 0.226435421 0.130732551 0.5624968
## 31 seance 4 Ba 0,25 3 5.611000 0.100164864 0.057830211 0.2488233
## 32 seance 4 Ba 0,50 3 5.716667 0.382735331 0.220972346 0.9507673
## 33 seance 4 Ba 0,75 3 6.080333 0.594879259 0.343453701 1.4777620
## 34 seance 4 Ba 1 3 6.041667 0.416269544 0.240333333 1.0340709
## 35 seance 4 Ba 10 3 5.815000 0.369622781 0.213401812 0.9181939
## 36 seance 4 Ba 2,5 3 6.385333 0.711684153 0.410891037 1.7679214
## 37 seance 4 Ba 5 3 5.865000 0.000000000 0.000000000 0.0000000
## 38 seance 4 Ba 7,5 3 4.734000 0.599693255 0.346233062 1.4897206
## 39 seance 4 WC 3 5.788000 0.390580337 0.225501663 0.9702553
## 40 seance 4 YC 3 6.384000 0.009165151 0.005291503 0.0227675
## 41 seance 5 Ba 0,25 3 5.997667 1.125959295 0.650072902 2.7970379
## 42 seance 5 Ba 0,50 3 -2.947667 15.317445914 8.843531522 38.0506450
## 43 seance 5 Ba 0,75 3 5.658000 0.939014377 0.542140203 2.3326410
## 44 seance 5 Ba 1 3 6.147667 0.680638916 0.392967061 1.6908008
## 45 seance 5 Ba 10 3 6.996000 0.000000000 0.000000000 0.0000000
## 46 seance 5 Ba 2,5 3 5.946000 0.994073941 0.573928857 2.4694166
## 47 seance 5 Ba 5 3 5.232667 0.713030387 0.411668286 1.7712657
## 48 seance 5 Ba 7,5 3 5.490333 0.843692084 0.487105852 2.0958473
## 49 seance 5 WC 3 5.742333 0.550222076 0.317670864 1.3668274
## 50 seance 5 YC 3 6.458000 0.646000000 0.372968274 1.6047530
8.6.2 Visualisation
ggplot(mb_ic, aes(x = seance, y = masse_blanc, colour = regime, group = regime)) +
geom_line(size = 1) +
geom_point(size = 2) +
ylab("Masse du blanc d'oeuf (g)") +
theme_bw()
Il ne semble pas se dégager une tendance concrète entre les différentes séances, ou difficile à exploiter. Vous jugerez. La masse du blanc semble demeurer constante. Notez l’observation extrême de la séance 5.
Nous savons par les analyses pour chaque séance plus haut, que
- séance 1 : il existe des différences d’effet entre les régimes
- séance 2 : il existe des différences d’effet entre les régimes (1 exclusion et transformation log)
- séance 3 : il existe des différences d’effet entre les régimes
- séance 4 : pas de différences signicatives d’effet entre les régimes
- séance 5 : pas de différences signicatives d’effet entre les régimes (1 excluion)
Puisque les données ne répondent pas aux conditions pour évaluer les effets des régimes au cours du temps, on négligera l’effet des régimes pour évaluer globalement l’effet du temps sur les masses des blancs d’oeuf.
On pourrait se demander si les masses des blancs mesurées sur l’ensemble des sujets sont significativement différentes d’une séance à l’autre (c’est-à-dire avec le temps).
8.6.3 Effet du temps
8.6.3.1 boxplots, facteur temps
8.6.3.2 Valeurs aberrantes, facteur temps
mb <- mb %>% mutate(id2 = 1:nrow(.), .before = 1)
mb_out <- mb %>%
group_by(seance) %>%
identify_outliers(masse_blanc)
mb_out
## # A tibble: 4 x 8
## seance id2 id regime no_oeuf masse_blanc is.outlier is.extreme
## <fct> <int> <fct> <fct> <dbl> <dbl> <lgl> <lgl>
## 1 seance 2 45 15 Ba 2,5 3 7.68 TRUE FALSE
## 2 seance 2 46 16 Ba 5 1 15.7 TRUE TRUE
## 3 seance 4 110 20 Ba 7,5 2 4.16 TRUE FALSE
## 4 seance 5 125 5 Ba 0,50 2 -20.6 TRUE TRUE
=> 2 observations aberrantes extrêmes pour les séances 2 et 5 ; une par séance. On pourrait les exclure. Mais je les ai conservé pour la suite.
8.6.3.3 Homogénéité des variances et ANOVA, facteur temps
Les autres conditions ont déjà été vérifiées. La fonction anova_test()
réalise également le test de sphéricité de Mauchly.
## ANOVA Table (type III tests)
##
## Effect DFn DFd F p p<.05 ges
## 1 seance 1.42 41.22 0.9 0.383 0.023
=> C’est la p-value qui nous intéresse et elle est > 0.05 => Pas de différence significative entre les séances.
8.6.3.4 Comparaisons par paires, facteur temps
tph <- mb %>%
pairwise_t_test(masse_blanc ~ seance,
paired = TRUE,
p.adjust.method = "bonferroni")
tph %>%
select(group1, group2, p, p.adj, p.adj.signif)
## # A tibble: 10 x 5
## group1 group2 p p.adj p.adj.signif
## <chr> <chr> <dbl> <dbl> <chr>
## 1 seance 1 seance 2 0.864 1 ns
## 2 seance 1 seance 3 0.655 1 ns
## 3 seance 1 seance 4 0.21 1 ns
## 4 seance 1 seance 5 0.301 1 ns
## 5 seance 2 seance 3 0.745 1 ns
## 6 seance 2 seance 4 0.512 1 ns
## 7 seance 2 seance 5 0.293 1 ns
## 8 seance 3 seance 4 0.615 1 ns
## 9 seance 3 seance 5 0.329 1 ns
## 10 seance 4 seance 5 0.389 1 ns