From 0742ad39e6b27fd179009ec17140c5b97261ee6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20MARQUET?= Date: Fri, 7 Mar 2025 10:44:08 +0100 Subject: [PATCH] feat: add confidence interval calculations for mean and variance in statistical analysis --- TP_estimateurs/Exercice1.R | 58 +++++++++++++++++++++++++++++++++-- TP_estimateurs/Exercice2.R | 4 +++ TP_estimateurs/Exercice3.R | 62 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 121 insertions(+), 3 deletions(-) create mode 100644 TP_estimateurs/Exercice3.R diff --git a/TP_estimateurs/Exercice1.R b/TP_estimateurs/Exercice1.R index 34474e6..88aa2dc 100644 --- a/TP_estimateurs/Exercice1.R +++ b/TP_estimateurs/Exercice1.R @@ -1,3 +1,5 @@ +# https://github.com/BreizhHardware/TD-R/tree/main/TP_estimateurs + # Création du vecteur de données poids <- c(0.64, 0.65, 0.73, 0.60, 0.65, 0.77, 0.82, 0.64, 0.66, 0.72, 0.87, 0.84, 0.66, 0.76, 0.63, 0.52, 0.66, 0.45, 0.74, 0.79) @@ -8,6 +10,10 @@ par(mfrow=c(1,2)) # 1. Représenter graphiquement les données pour un le modèle gaussien semble-t-il pertinent ? +# Calcul du nombre de classes pour l'histogramme +n <- length(poids) +k <- sqrt(n) + # Création de l'histogramme avec courbe de densité hist(poids, probability = TRUE, @@ -15,7 +21,9 @@ hist(poids, xlab = "Poids (g)", ylab = "Densité", col = "lightblue", - breaks = "FD") + breaks = k) + +lines(density(poids), col="green", lwd=2) # Ajout de la courbe de densité normale curve(dnorm(x, mean=mean(poids), sd=sd(poids)), @@ -40,7 +48,7 @@ summary(poids) #  du modèle gaussien en foncƟon de ces données. Superposer la courbe obtenue et conclure. # Calcul des estimateurs -moyenne <- mean(poids) +moyenne <- 1/n * sum(poids) variance <- var(poids) ecart_type <- sqrt(variance) @@ -68,4 +76,48 @@ curve(dnorm(x, mean = moyenne, sd = ecart_type), legend("topright", legend = c("Densité normale estimée"), col = "red", - lwd = 2) \ No newline at end of file + lwd = 2) + +# Données les intervalles de confiance à 95% et 90% pour la moyenne et la variance + +# Calcul des intervalles de confiance à 95% +alpha <- 0.05 +z <- qnorm(1 - alpha / 2) + +# Intervalle de confiance pour la moyenne +borne_inf_moyenne <- moyenne - z * ecart_type / sqrt(n) +borne_sup_moyenne <- moyenne + z * ecart_type / sqrt(n) + +# Intervalle de confiance pour la variance +borne_inf_variance <- (n - 1) * variance / qchisq(1 - alpha / 2, df = n - 1) +borne_sup_variance <- (n - 1) * variance / qchisq(alpha / 2, df = n - 1) + +# Affichage des intervalles de confiance +cat("\nIntervalle de confiance à 95% pour la moyenne (μ): [", + round(borne_inf_moyenne, 4), ",", + round(borne_sup_moyenne, 4), "] g\n") + +cat("Intervalle de confiance à 95% pour la variance (σ²): [", + round(borne_inf_variance, 6), ",", + round(borne_sup_variance, 6), "] g²\n") + +# Calcul des intervalles de confiance à 90% +alpha <- 0.10 +z <- qnorm(1 - alpha / 2) + +# Intervalle de confiance pour la moyenne +borne_inf_moyenne <- moyenne - z * ecart_type / sqrt(n) +borne_sup_moyenne <- moyenne + z * ecart_type / sqrt(n) + +# Intervalle de confiance pour la variance +borne_inf_variance <- (n - 1) * variance / qchisq(1 - alpha / 2, df = n - 1) +borne_sup_variance <- (n - 1) * variance / qchisq(alpha / 2, df = n - 1) + +# Affichage des intervalles de confiance +cat("\nIntervalle de confiance à 90% pour la moyenne (μ): [", + round(borne_inf_moyenne, 4), ",", + round(borne_sup_moyenne, 4), "] g\n") + +cat("Intervalle de confiance à 90% pour la variance (σ²): [", + round(borne_inf_variance, 6), ",", + round(borne_sup_variance, 6), "] g²\n") diff --git a/TP_estimateurs/Exercice2.R b/TP_estimateurs/Exercice2.R index 08c532a..af7b244 100644 --- a/TP_estimateurs/Exercice2.R +++ b/TP_estimateurs/Exercice2.R @@ -1,3 +1,5 @@ +# https://github.com/BreizhHardware/TD-R/tree/main/TP_estimateurs + # Création du tableau de contingence donnees <- matrix( c(33, 93, 55, 20, 16, 9, @@ -6,6 +8,8 @@ donnees <- matrix( nrow = 3, byrow = TRUE ) +n <- length(donnees) + # Ajout des noms de lignes et colonnes rownames(donnees) <- c("Moins de 30 ans", "Entre 30 et 60 ans", "Plus de 60 ans") colnames(donnees) <- c("0", "1", "2", "3", "4", "5") diff --git a/TP_estimateurs/Exercice3.R b/TP_estimateurs/Exercice3.R new file mode 100644 index 0000000..23314e8 --- /dev/null +++ b/TP_estimateurs/Exercice3.R @@ -0,0 +1,62 @@ +# https://github.com/BreizhHardware/TD-R/tree/main/TP_estimateurs + +# 1. Quelle est la loi de F et montrer qu'elle peut être approchée par une loi normale dont on donnera les paramètres + +# Paramètres +n <- 50 # taille de l'échantillon +p <- 0.13 # proportion de gauchers + +# Loi exacte : Binomiale(n,p) +# F ~ B(50, 0.13) + +cat("Loi de F : F ~ B(50, 0.13)\n") + +# Paramètres de l'approximation normale +mu <- n * p # moyenne +sigma <- sqrt(n * p * (1-p)) # écart-type + +cat("Paramètres de l'approximation normale :\n") +cat("μ =", round(mu, 2), "\n") +cat("σ =", round(sigma, 2), "\n") + +# Visualisation de la comparaison +x <- 0:15 +plot(x, dbinom(x, n, p), + type = "h", + lwd = 2, + col = "blue", + main = "Comparaison Binomiale vs Normal", + xlab = "Nombre de gauchers", + ylab = "Densité de probabilité") + +# Superposition de la courbe normale +curve(dnorm(x, mean = mu, sd = sigma), + add = TRUE, + col = "red", + lwd = 2) + +legend("topright", + legend = c("Binomiale", "Normale"), + col = c("blue", "red"), + lwd = 2) + +# 2. Calculer la probabilité d'observer plus de 5 gauchers dans l'échanƟllon de façon exacte puis +# approchée. + +# Paramètres +n <- 50 +p <- 0.13 +mu <- n * p +sigma <- sqrt(n * p * (1-p)) + +# Calcul exact avec la loi binomiale +# P(F > 5) = 1 - P(F ≤ 5) +proba_exacte <- 1 - pbinom(5, n, p) + +# Calcul approché avec la loi normale +# Avec correction de continuité : P(F > 5) = P(F ≥ 6) = P(F > 5.5) +proba_approx <- 1 - pnorm(5.5, mu, sigma) + +# Affichage des résultats +cat("Probabilité exacte P(F > 5):", round(proba_exacte, 4), "\n") +cat("Probabilité approchée P(F > 5):", round(proba_approx, 4), "\n") \ No newline at end of file