On étudie l’impact de la température extérieure (facteur qualitatif à 4 modalités : 0, 22.5, 37.5, 60°C) sur la durabilité d’une peinture. L’objectif est de maximiser cette durabilité.
# Saisie des données
temperature <- factor(rep(c(0, 22.5, 37.5, 60), each = 5))
durabilite <- c(
79.48, 65.60, 67.70, 67.64, 75.69, # T = 0
155.43, 139.27, 148.45, 148.26, 142.79, # T = 22.5
136.91, 140.90, 149.6, 146.32, 153.10, # T = 37.5
74.12, 79.07, 86.72, 67.62, 73.54 # T = 60
)
donnees <- data.frame(temperature = temperature, durabilite = durabilite)
# Aperçu des données
print(donnees)
## temperature durabilite
## 1 0 79.48
## 2 0 65.60
## 3 0 67.70
## 4 0 67.64
## 5 0 75.69
## 6 22.5 155.43
## 7 22.5 139.27
## 8 22.5 148.45
## 9 22.5 148.26
## 10 22.5 142.79
## 11 37.5 136.91
## 12 37.5 140.90
## 13 37.5 149.60
## 14 37.5 146.32
## 15 37.5 153.10
## 16 60 74.12
## 17 60 79.07
## 18 60 86.72
## 19 60 67.62
## 20 60 73.54
# Statistiques descriptives par modalité
tapply(durabilite, temperature, summary)
## $`0`
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 65.60 67.64 67.70 71.22 75.69 79.48
##
## $`22.5`
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 139.3 142.8 148.3 146.8 148.4 155.4
##
## $`37.5`
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 136.9 140.9 146.3 145.4 149.6 153.1
##
## $`60`
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 67.62 73.54 74.12 76.21 79.07 86.72
# Moyennes par groupe
moyennes <- tapply(durabilite, temperature, mean)
cat("\nMoyennes par température :\n")
##
## Moyennes par température :
print(round(moyennes, 3))
## 0 22.5 37.5 60
## 71.222 146.840 145.366 76.214
# Écarts-types par groupe
ecart_types <- tapply(durabilite, temperature, sd)
cat("\nÉcarts-types par température :\n")
##
## Écarts-types par température :
print(round(ecart_types, 3))
## 0 22.5 37.5 60
## 6.021 6.167 6.521 7.140
# Visualisation
boxplot(durabilite ~ temperature,
data = donnees,
xlab = "Température (°C)",
ylab = "Durabilité",
main = "Durabilité de la peinture selon la température",
col = c("lightblue", "lightgreen", "lightyellow", "lightsalmon"))
# Ajout des moyennes
points(1:4, moyennes, pch = 18, col = "red", cex = 1.5)
legend("topright", legend = "Moyenne", pch = 18, col = "red")
Boxplot de la durabilité par température
Observation : Le boxplot révèle des différences visuelles marquées entre les groupes. Les températures de 22.5°C et 37.5°C semblent associées à une durabilité nettement supérieure aux températures extrêmes (0°C et 60°C).
On réalise une ANOVA à un facteur (facteur traité comme qualitatif).
Modèle : \(Y_{ij} = \mu + \alpha_i + \varepsilon_{ij}\) avec \(\varepsilon_{ij} \sim \mathcal{N}(0, \sigma^2)\)
Hypothèses du test : - \(\mathcal{H}_0\) : \(\alpha_i = 0\) pour tout \(i\) (pas d’effet de la température) - \(\mathcal{H}_1\) : Au moins un \(\alpha_i \neq 0\) (au moins une température a un effet différent)
# ANOVA à un facteur
an_var <- aov(durabilite ~ temperature, data = donnees)
summary(an_var)
## Df Sum Sq Mean Sq F value Pr(>F)
## temperature 3 26266 8755 208.7 4.9e-13 ***
## Residuals 16 671 42
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
res_anova <- summary(an_var)[[1]]
F_obs <- res_anova["temperature", "F value"]
p_val <- res_anova["temperature", "Pr(>F)"]
cat("Statistique F observée :", round(F_obs, 4), "\n")
## Statistique F observée : 208.7282
cat("p-valeur :", format(p_val, scientific = TRUE), "\n")
## p-valeur : 4.9019e-13
Interprétation : La p-valeur est très largement inférieure à 0.05 (seuil classique). On rejette \(\mathcal{H}_0\) : le facteur température a un effet significatif sur la durabilité de la peinture. Les différences observées entre les groupes ne sont pas dues au hasard.
# Moyennes par groupe
cat("Moyennes par température :\n")
## Moyennes par température :
print(round(moyennes, 3))
## 0 22.5 37.5 60
## 71.222 146.840 145.366 76.214
# Identification de la meilleure modalité
meilleure_temp <- names(which.max(moyennes))
meilleure_moy <- max(moyennes)
cat("\nTemperature optimale :", meilleure_temp, "°C\n")
##
## Temperature optimale : 22.5 °C
cat("Durabilité moyenne optimale :", round(meilleure_moy, 3), "\n")
## Durabilité moyenne optimale : 146.84
# Intervalle de confiance pour la moyenne de la modalité optimale
n_i <- 5 # nombre de répétitions par modalité
MSE <- res_anova["Residuals", "Mean Sq"]
ddl_res <- res_anova["Residuals", "Df"]
alpha <- 0.05
t_crit <- qt(1 - alpha/2, df = ddl_res)
marge <- t_crit * sqrt(MSE / n_i)
IC_inf <- meilleure_moy - marge
IC_sup <- meilleure_moy + marge
cat("\nIntervalle de confiance à 95% pour la durabilité optimale :\n")
##
## Intervalle de confiance à 95% pour la durabilité optimale :
cat("[", round(IC_inf, 3), ";", round(IC_sup, 3), "]\n")
## [ 140.7 ; 152.98 ]
Interprétation : La température de 22.5°C est celle qui maximise la durabilité moyenne de la peinture, avec une durabilité moyenne estimée à 146.84. On peut espérer, avec 95% de confiance, une durabilité optimale comprise entre 140.7 et 152.98.
# L'estimation de sigma² est la Carré Moyen des Résidus (MSE)
MSE <- res_anova["Residuals", "Mean Sq"]
ddl_res <- res_anova["Residuals", "Df"]
cat("Estimation de sigma² (MSE) :", round(MSE, 4), "\n")
## Estimation de sigma² (MSE) : 41.9456
cat("Degrés de liberté des résidus :", ddl_res, "\n")
## Degrés de liberté des résidus : 16
cat("Estimation de sigma (écart-type résiduel) :", round(sqrt(MSE), 4), "\n")
## Estimation de sigma (écart-type résiduel) : 6.4765
Interprétation : L’estimation de la variance résiduelle \(\hat{\sigma}^2\) (carré moyen des résidus) est de 41.946. Cette valeur représente la variabilité intra-groupe non expliquée par le facteur température. L’écart-type résiduel est $ = $ 6.477.
par(mfrow = c(2, 2))
plot(an_var)
Diagnostic des résidus
par(mfrow = c(1, 1))
# Test de normalité des résidus (Shapiro-Wilk)
shapiro.test(residuals(an_var))
##
## Shapiro-Wilk normality test
##
## data: residuals(an_var)
## W = 0.94644, p-value = 0.3163
# Test d'homogénéité des variances (Bartlett)
bartlett.test(durabilite ~ temperature, data = donnees)
##
## Bartlett test of homogeneity of variances
##
## data: durabilite by temperature
## Bartlett's K-squared = 0.12763, df = 3, p-value = 0.9883
Interprétation des tests : Les résidus suivent une loi normale (test de Shapiro-Wilk non significatif) et les variances sont homogènes entre les groupes (test de Bartlett non significatif). Les conditions d’application de l’ANOVA sont vérifiées, ce qui valide l’estimation de \(\sigma^2\).
On effectue un test de Tukey HSD (Honest Significant Difference) pour identifier les paires de températures dont les durabilités moyennes sont significativement différentes.
Pour chaque paire \((i, j)\) avec \(i \neq j\) : - \(\mathcal{H}_0\) : \(\mu_i = \mu_j\) - \(\mathcal{H}_1\) : \(\mu_i \neq \mu_j\)
# Test de Tukey HSD
tukey <- TukeyHSD(an_var)
print(tukey)
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = durabilite ~ temperature, data = donnees)
##
## $temperature
## diff lwr upr p adj
## 22.5-0 75.618 63.898909 87.33709 0.0000000
## 37.5-0 74.144 62.424909 85.86309 0.0000000
## 60-0 4.992 -6.727091 16.71109 0.6244359
## 37.5-22.5 -1.474 -13.193091 10.24509 0.9834641
## 60-22.5 -70.626 -82.345091 -58.90691 0.0000000
## 60-37.5 -69.152 -80.871091 -57.43291 0.0000000
plot(tukey, las = 1)
Intervalles de confiance simultanés - Test de Tukey
# Extraction des résultats significatifs
res_tukey <- tukey$temperature
sig_paires <- res_tukey[res_tukey[, "p adj"] < 0.05, ]
cat("Paires significativement différentes (alpha = 5%) :\n")
## Paires significativement différentes (alpha = 5%) :
print(round(sig_paires, 4))
## diff lwr upr p adj
## 22.5-0 75.618 63.8989 87.3371 0
## 37.5-0 74.144 62.4249 85.8631 0
## 60-22.5 -70.626 -82.3451 -58.9069 0
## 60-37.5 -69.152 -80.8711 -57.4329 0
cat("\nPaires NON significativement différentes :\n")
##
## Paires NON significativement différentes :
non_sig <- res_tukey[res_tukey[, "p adj"] >= 0.05, ]
print(round(non_sig, 4))
## diff lwr upr p adj
## 60-0 4.992 -6.7271 16.7111 0.6244
## 37.5-22.5 -1.474 -13.1931 10.2451 0.9835
# Résumé des groupes homogènes
cat("Récapitulatif des moyennes :\n")
## Récapitulatif des moyennes :
df_moyennes <- data.frame(
Temperature = names(moyennes),
Moyenne = round(moyennes, 2)
)
print(df_moyennes[order(-df_moyennes$Moyenne), ])
## Temperature Moyenne
## 22.5 22.5 146.84
## 37.5 37.5 145.37
## 60 60 76.21
## 0 0 71.22
Interprétation :
Le test de Tukey précise et affine la relation mise en évidence par l’ANOVA. On identifie que la relation entre température et durabilité n’est pas monotone : il existe des températures intermédiaires (22.5°C et 37.5°C) qui optimisent la durabilité, tandis que les températures extrêmes (0°C et 60°C) sont toutes deux défavorables. L’ANOVA seule ne permettait que de conclure à l’existence d’un effet global ; le test de Tukey permet de localiser précisément les différences.
Le test de Tukey confirme que 22.5°C et 37.5°C sont statistiquement équivalentes pour la durabilité. Il n’est donc pas possible de choisir de façon statistiquement fondée entre ces deux températures sur la seule base de la durabilité. Pour optimiser, on retiendrait 22.5°C (légèrement supérieure en moyenne), mais la différence avec 37.5°C n’étant pas significative, d’autres critères (coût, faisabilité, etc.) pourraient guider le choix final.
L’analyse ANOVA à un facteur (température traitée comme qualitative) montre que :