Chapitre 10 Indice A
de l’intérieur de la coquille
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 l’ évaluation de la couleur de l’intérieur de la coquille (Greennish index) - indice A , mesurée en 5 séances. Mêmes traitements (régimes).
La question est de savoir si les différents régimes induisent des indices de coloration verte à l’intérieur de la coquille d’oeuf significativement différents avec le temps.
Mais chaque traitement n’ayant pas été appliqué sur tous les groupes 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 de cet indice en fonction du temps.
10.1 Les données
aic <- read_csv("data/oeuf.csv")
aic <- aic %>%
select(seance, regime, no_oeuf, indaic) %>%
mutate(id = rep(1:30, 5), .before = 1) %>%
convert_as_factor(id, seance, 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, 18,~
## $ seance <fct> seance 1, seance 1, seance 1, seance 1, seance 1, seance 1, se~
## $ regime <fct> "Ba 0,25", "Ba 0,25", "Ba 0,25", "Ba 0,50", "Ba 0,50", "Ba 0,5~
## $ no_oeuf <dbl> 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3,~
## $ indaic <dbl> -3.42, -3.78, -2.60, -2.70, -9.10, -12.13, -2.41, -2.85, -2.63~
10.2 Visualisation boxplots
bxp <- ggplot(aic, aes(x = regime, y = indaic, fill = regime)) +
geom_boxplot() +
facet_grid(seance ~ .) +
theme(axis.text.x = element_text(angle = 90, color = "baick", vjust = 0.5, hjust = 1)) +
ylab("Egg shell greennish index") +
theme_bw()
bxp
=> Variations notables entre les traitements pour certaines séances.
10.3 Détection des valeurs aberrantes extrêmes
## [1] seance regime id no_oeuf indaic is.outlier is.extreme
## <0 rows> (or 0-length row.names)
=> Pas de valeurs aberrantes extrêmes pour toutes les séances.
10.4 Conditions de l’ANOVA
10.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 indaic 0.868 0.00151
## 2 seance 2 indaic 0.915 0.0196
## 3 seance 3 indaic 0.800 0.0000646
## 4 seance 4 indaic 0.984 0.922
## 5 seance 5 indaic 0.959 0.288
=> Normalité seulement pour les séances 4 et 5.
Créer des QQ-plots pour chaque point par séance
On explorera les données séances par séance pour palier au problème de normalité.
10.4.2 Homogénéité des variances
## # A tibble: 5 x 5
## seance df1 df2 statistic p
## <fct> <int> <int> <dbl> <dbl>
## 1 seance 1 9 20 1.02 0.456
## 2 seance 2 9 20 0.661 0.733
## 3 seance 3 9 20 0.715 0.689
## 4 seance 4 9 20 0.973 0.490
## 5 seance 5 9 20 0.901 0.542
=> Toutes les valeurs p sont > 0.05 => toutes les variances sont homogènes.
10.5 ANOVA à 1 facteur séance par séance
10.5.1 Séance 1
## # A tibble: 1 x 7
## id seance regime no_oeuf indaic is.outlier is.extreme
## <fct> <fct> <fct> <dbl> <dbl> <lgl> <lgl>
## 1 28 seance 1 WC 1 3.44 TRUE FALSE
=> 1 observation aberrante mais pas extrême.
10.5.1.1 Le modèle
## Anova Table (Type II tests)
##
## Response: indaic
## Sum Sq Df F value Pr(>F)
## regime 121.40 9 2.1922 0.06903 .
## Residuals 123.07 20
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
La p-value > 0.05 => Pas de différence significative entre les effets des régimes sur cet indice à la séance 1.
## # A tibble: 1 x 3
## variable statistic p.value
## <chr> <dbl> <dbl>
## 1 residuals(lm1) 0.940 0.0916
=> Normalité Okay !
10.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, indaic, groups) %>%
as_tibble()
cm1
## # A tibble: 10 x 3
## regime indaic groups
## <chr> <dbl> <chr>
## 1 WC -0.887 a
## 2 Ba 0,75 -2.63 a
## 3 Ba 7,5 -2.80 a
## 4 Ba 0,25 -3.27 a
## 5 Ba 5 -3.77 a
## 6 YC -4.78 a
## 7 Ba 2,5 -4.98 a
## 8 Ba 1 -5.10 a
## 9 Ba 10 -7.05 a
## 10 Ba 0,50 -7.98 a
=> Étonnant en regardant les moyennes !
10.5.2 Séance 2
10.5.2.1 Le modèle
## [1] id seance regime no_oeuf indaic is.outlier is.extreme
## <0 rows> (or 0-length row.names)
=> Pas d’observation supossée extrême
## Anova Table (Type II tests)
##
## Response: indaic
## Sum Sq Df F value Pr(>F)
## regime 152.134 9 5.5385 0.0007089 ***
## Residuals 61.041 20
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
La p-value est < 0.01 => Différence très 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.962 0.352
=> Normalité Okay.
10.5.2.2 Comparaisons par paires
cm2 <- (SNK.test(lm2, "regime", group = TRUE))$groups %>%
mutate(regime = rownames(.)) %>%
select(regime, indaic, groups) %>%
as_tibble()
cm2
## # A tibble: 10 x 3
## regime indaic groups
## <chr> <dbl> <chr>
## 1 Ba 0,75 -1.08 a
## 2 Ba 0,25 -1.25 a
## 3 Ba 1 -1.64 ab
## 4 Ba 0,50 -2.35 abc
## 5 WC -3.82 abcd
## 6 Ba 10 -5.14 abcd
## 7 Ba 5 -5.80 bcd
## 8 Ba 2,5 -6.07 bcd
## 9 Ba 7,5 -6.69 cd
## 10 YC -7.22 d
10.5.2.3 Visualisation des groupes
ggplot(data = cm2, mapping = aes(x = regime, y = indaic)) +
geom_bar(stat = "identity", color = "blue", fill = "grey", width = 0.6) +
#ylim(-7, 0) +
geom_text(aes(label = groups), vjust = -0.5, size = 4) +
xlab("Régimes") + ylab("Egg shell greennish index") +
theme(axis.text.x = element_text(angle = 45, color = "baick", vjust = 1, hjust = 1)) +
theme_bw()
10.5.3 Séance 3
## # A tibble: 6 x 7
## id seance regime no_oeuf indaic is.outlier is.extreme
## <fct> <fct> <fct> <dbl> <dbl> <lgl> <lgl>
## 1 25 seance 3 YC 1 -0.93 TRUE FALSE
## 2 26 seance 3 YC 2 -1.3 TRUE FALSE
## 3 27 seance 3 YC 3 -2.24 TRUE FALSE
## 4 28 seance 3 WC 1 -1.53 TRUE FALSE
## 5 29 seance 3 WC 2 -1.53 TRUE FALSE
## 6 30 seance 3 WC 3 -1.53 TRUE FALSE
=> Pas d’observations aberrantes extrêmes.
10.5.3.1 Le modèle
## Anova Table (Type II tests)
##
## Response: indaic
## Sum Sq Df F value Pr(>F)
## regime 89.660 9 24.724 6.061e-09 ***
## Residuals 8.059 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.
## # A tibble: 1 x 3
## variable statistic p.value
## <chr> <dbl> <dbl>
## 1 residuals(lm3) 0.936 0.0723
=> Normalité satisfaite.
Les transformations log()
ou Boxcox
ne résolvent également pas ce problème.
=> Alternative non paramétrique
## # A tibble: 1 x 6
## .y. n statistic df p method
## * <chr> <int> <dbl> <int> <dbl> <chr>
## 1 indaic 30 20.3 9 0.0159 Kruskal-Wallis
=> Différence significative entre les effetes d’au moins 2 régimes. En comparant 2 à 2 les régimes avec cette alternative :
10.5.3.2 Comparaisons par paires
cm3 <- (SNK.test(lm3, "regime", group = TRUE))$groups %>%
mutate(regime = rownames(.)) %>%
select(regime, indaic, groups) %>%
as_tibble()
cm3
## # A tibble: 10 x 3
## regime indaic groups
## <chr> <dbl> <chr>
## 1 YC -1.49 a
## 2 WC -1.53 a
## 3 Ba 0,50 -4.89 b
## 4 Ba 10 -5.45 b
## 5 Ba 0,25 -5.48 b
## 6 Ba 5 -5.65 b
## 7 Ba 0,75 -5.72 b
## 8 Ba 1 -6.04 b
## 9 Ba 7,5 -6.21 b
## 10 Ba 2,5 -6.32 b
… Et la visualisation graphique :
ggplot(data = cm3, mapping = aes(x = regime, y = indaic)) +
geom_bar(stat = "identity", color = "blue", fill = "grey", width = 0.6) +
geom_text(aes(label = groups), vjust = -0.5, size = 4) +
#ylim(0, 90) +
xlab("Régimes") + ylab("Egg shell greennish index") +
theme(axis.text.x = element_text(angle = 45, color = "baick", vjust = 1, hjust = 1)) +
theme_bw()
10.5.4 Séance 4
10.5.4.1 Le modèle
## Anova Table (Type II tests)
##
## Response: indaic
## Sum Sq Df F value Pr(>F)
## regime 8.4366 9 0.7005 0.7014
## Residuals 26.7645 20
La p-value > 0.05 => Pas de différence significative entre les effets des régimes.
10.5.4.2 Comparaisons par paires
cm4 <- (SNK.test(lm4, "regime", group = TRUE))$groups %>%
mutate(regime = rownames(.)) %>%
select(regime, indaic, groups) %>%
as_tibble()
cm4
## # A tibble: 10 x 3
## regime indaic groups
## <chr> <dbl> <chr>
## 1 Ba 1 -1.9 a
## 2 YC -2.34 a
## 3 Ba 0,75 -2.48 a
## 4 Ba 10 -2.87 a
## 5 WC -2.96 a
## 6 Ba 0,50 -3.04 a
## 7 Ba 5 -3.27 a
## 8 Ba 7,5 -3.36 a
## 9 Ba 2,5 -3.48 a
## 10 Ba 0,25 -3.70 a
10.5.4.3 Visualisation des groupes
ggplot(data = cm4, mapping = aes(x = regime, y = indaic)) +
geom_bar(stat = "identity", color = "blue", fill = "grey", width = 0.6) +
#ylim(0, 90) +
geom_text(aes(label = groups), vjust = -0.5, size = 4) +
xlab("Régimes") + ylab("Egg shell greennish index") +
theme(axis.text.x = element_text(angle = 45, color = "baick", vjust = 1, hjust = 1)) +
theme_bw()
10.5.5 Séance 5
## [1] id seance regime no_oeuf indaic is.outlier is.extreme
## <0 rows> (or 0-length row.names)
10.5.5.1 Le modèle
## Anova Table (Type II tests)
##
## Response: indaic
## Sum Sq Df F value Pr(>F)
## regime 21.254 9 1.2293 0.3322
## Residuals 38.421 20
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.979 0.791
=> Normalité Okay.
10.5.5.2 Comparaisons par paires
cm5 <- (SNK.test(lm5, "regime", group = TRUE))$groups %>%
mutate(regime = rownames(.)) %>%
select(regime, indaic, groups) %>%
as_tibble()
cm5
## # A tibble: 10 x 3
## regime indaic groups
## <chr> <dbl> <chr>
## 1 YC -1.52 a
## 2 Ba 1 -1.63 a
## 3 WC -1.72 a
## 4 Ba 0,50 -2.66 a
## 5 Ba 5 -2.75 a
## 6 Ba 7,5 -3.09 a
## 7 Ba 0,75 -3.22 a
## 8 Ba 0,25 -3.39 a
## 9 Ba 2,5 -3.63 a
## 10 Ba 10 -4.06 a
10.5.5.3 Visualisation
ggplot(data = cm5, mapping = aes(x = regime, y = indaic)) +
geom_bar(stat = "identity", color = "blue", fill = "grey", width = 0.6) +
#ylim(0, 90) +
geom_text(aes(label = groups), vjust = -0.5, size = 4) +
xlab("Régimes") + ylab("Egg shell greennish index") +
theme(axis.text.x = element_text(angle = 45, color = "baick", vjust = 1, hjust = 1)) +
theme_bw()
10.6 Évolution de l’indice A de l’intérieur de la coquille par régime au cours du temps
10.6.1 Sommaire
aic_ic <- summarySE(aic,
measurevar = "indaic",
groupvars = c("seance", "regime"),
na.rm = TRUE)
aic_ic
## seance regime N indaic sd se ci
## 1 seance 1 Ba 0,25 3 -3.2666667 0.6047589 0.34915772 1.5023044
## 2 seance 1 Ba 0,50 3 -7.9766667 4.8143155 2.77954633 11.9594226
## 3 seance 1 Ba 0,75 3 -2.6300000 0.2200000 0.12701706 0.5465103
## 4 seance 1 Ba 1 3 -5.1033333 2.6676644 1.54017676 6.6268457
## 5 seance 1 Ba 10 3 -7.0500000 0.0000000 0.00000000 0.0000000
## 6 seance 1 Ba 2,5 3 -4.9800000 3.4019406 1.96411133 8.4508890
## 7 seance 1 Ba 5 3 -3.7666667 0.4392418 0.25359635 1.0911370
## 8 seance 1 Ba 7,5 3 -2.7966667 0.4645787 0.26822462 1.1540774
## 9 seance 1 WC 3 -0.8866667 3.7857144 2.18568321 9.4042358
## 10 seance 1 YC 3 -4.7833333 2.1241783 1.22639490 5.2767514
## 11 seance 2 Ba 0,25 3 -1.2533333 0.8150051 0.47054342 2.0245849
## 12 seance 2 Ba 0,50 3 -2.3500000 0.6928925 0.40004166 1.7212404
## 13 seance 2 Ba 0,75 3 -1.0833333 0.6001111 0.34647431 1.4907586
## 14 seance 2 Ba 1 3 -1.6366667 0.9450044 0.54559855 2.3475211
## 15 seance 2 Ba 10 3 -5.1400000 3.4013674 1.96378037 8.4494650
## 16 seance 2 Ba 2,5 3 -6.0700000 2.7266646 1.57424056 6.7734104
## 17 seance 2 Ba 5 3 -5.7966667 1.6895068 0.97543722 4.1969676
## 18 seance 2 Ba 7,5 3 -6.6933333 0.9555278 0.55167422 2.3736626
## 19 seance 2 WC 3 -3.8233333 1.2408599 0.71641081 3.0824669
## 20 seance 2 YC 3 -7.2200000 1.9523319 1.12717937 4.8498614
## 21 seance 3 Ba 0,25 3 -5.4850000 0.6550000 0.37816443 1.6271102
## 22 seance 3 Ba 0,50 3 -4.8866667 0.1327906 0.07666667 0.3298700
## 23 seance 3 Ba 0,75 3 -5.7166667 1.2208330 0.70484829 3.0327174
## 24 seance 3 Ba 1 3 -6.0400000 0.5655970 0.32654760 1.4050209
## 25 seance 3 Ba 10 3 -5.4500000 0.0000000 0.00000000 0.0000000
## 26 seance 3 Ba 2,5 3 -6.3200000 0.2800000 0.16165808 0.6955586
## 27 seance 3 Ba 5 3 -5.6500000 0.8100000 0.46765372 2.0121515
## 28 seance 3 Ba 7,5 3 -6.2100000 0.7626926 0.44034078 1.8946334
## 29 seance 3 WC 3 -1.5300000 0.0000000 0.00000000 0.0000000
## 30 seance 3 YC 3 -1.4900000 0.6753518 0.38991452 1.6776668
## 31 seance 4 Ba 0,25 3 -3.6966667 0.3010537 0.17381344 0.7478589
## 32 seance 4 Ba 0,50 3 -3.0366667 1.3366500 0.77171526 3.3204228
## 33 seance 4 Ba 0,75 3 -2.4766667 1.0807559 0.62397471 2.6847465
## 34 seance 4 Ba 1 3 -1.9000000 0.9472592 0.54690036 2.3531223
## 35 seance 4 Ba 10 3 -2.8733333 2.1238016 1.22617744 5.2758157
## 36 seance 4 Ba 2,5 3 -3.4766667 0.7748763 0.44737506 1.9248995
## 37 seance 4 Ba 5 3 -3.2700000 0.0000000 0.00000000 0.0000000
## 38 seance 4 Ba 7,5 3 -3.3600000 1.4157683 0.81739423 3.5169635
## 39 seance 4 WC 3 -2.9566667 1.4996777 0.86583935 3.7254060
## 40 seance 4 YC 3 -2.3433333 0.2742870 0.15835965 0.6813666
## 41 seance 5 Ba 0,25 3 -3.3900000 0.7186098 0.41488954 1.7851256
## 42 seance 5 Ba 0,50 3 -2.6633333 0.2318045 0.13383240 0.5758343
## 43 seance 5 Ba 0,75 3 -3.2166667 2.5258728 1.45831333 6.2746158
## 44 seance 5 Ba 1 3 -1.6300000 1.8597580 1.07373181 4.6198951
## 45 seance 5 Ba 10 3 -4.0600000 0.0000000 0.00000000 0.0000000
## 46 seance 5 Ba 2,5 3 -3.6333333 1.2025944 0.69431821 2.9874101
## 47 seance 5 Ba 5 3 -2.7466667 1.4291723 0.82513299 3.5502607
## 48 seance 5 Ba 7,5 3 -3.0900000 1.9458417 1.12343224 4.8337388
## 49 seance 5 WC 3 -1.7200000 0.6898551 0.39828800 1.7136950
## 50 seance 5 YC 3 -1.5150000 1.0250000 0.59178403 2.5462412
10.6.2 Visualisation
ggplot(aic_ic, aes(x = seance, y = indaic, colour = regime, group = regime)) +
geom_line(size = 1) +
geom_point(size = 2) +
ylab("Egg shell greennish index") +
theme_bw()
Il ne semble pas se dégager une tendance concrète entre les différentes séances, ou difficile à exploiter. Vous jugerez.
Nous savons par les analyses pour chaque séance plus haut, que
- séance 1 : pas de différences signicatives d’effet entre les régimes
- séance 2 : il existe des différences d’effet entre les régimes
- 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
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 cet indice.
On pourrait se demander si les indices A mesurés sur l’ensemble des sujets sont significativement différentes d’une séance à l’autre (c’est-à-dire avec le temps).
10.6.3 Effet du temps
10.6.3.1 boxplots, facteur temps
10.6.3.2 Valeurs aberrantes, facteur temps
aic <- aic %>% mutate(id2 = 1:nrow(.), .before = 1)
aic_out <- aic %>%
group_by(seance) %>%
identify_outliers(indaic)
aic_out
## # A tibble: 7 x 8
## seance id2 id regime no_oeuf indaic is.outlier is.extreme
## <fct> <int> <fct> <fct> <dbl> <dbl> <lgl> <lgl>
## 1 seance 1 28 28 WC 1 3.44 TRUE FALSE
## 2 seance 3 85 25 YC 1 -0.93 TRUE FALSE
## 3 seance 3 86 26 YC 2 -1.3 TRUE FALSE
## 4 seance 3 87 27 YC 3 -2.24 TRUE FALSE
## 5 seance 3 88 28 WC 1 -1.53 TRUE FALSE
## 6 seance 3 89 29 WC 2 -1.53 TRUE FALSE
## 7 seance 3 90 30 WC 3 -1.53 TRUE FALSE
=> Pas d’observation aberrante extrême.
10.6.3.3 Homogénéité des variances et ANOVA, facteur temps
Les autres conditions ont déjà été vérifiées.
## ANOVA Table (type III tests)
##
## Effect DFn DFd F p p<.05 ges
## 1 seance 2.73 79.07 5.566 0.002 * 0.134
=> C’est la p-value qui nous intéresse et elle est < 0.05 => Différence significative entre certaines séances.
10.6.3.4 Comparaisons par paires, facteur temps
tph <- aic %>%
pairwise_t_test(indaic ~ 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.773 1 ns
## 2 seance 1 seance 3 0.337 1 ns
## 3 seance 1 seance 4 0.038 0.375 ns
## 4 seance 1 seance 5 0.014 0.137 ns
## 5 seance 2 seance 3 0.236 1 ns
## 6 seance 2 seance 4 0.04 0.403 ns
## 7 seance 2 seance 5 0.024 0.243 ns
## 8 seance 3 seance 4 0.00000991 0.0000991 ****
## 9 seance 3 seance 5 0.00000188 0.0000188 ****
## 10 seance 4 seance 5 0.565 1 ns