library(readxl)
## Warning: le package 'readxl' a été compilé avec la version R 4.4.2
data <- read_excel("C:/Bureau/BUT2/BUT1 - BUT2/SAE 202/Donnees seances 1 et 2/data.xlsx")
La population de référence est l’ensemble des clients de la banque.
Valeur exacte du paramètre p à estimer :
ACTIFS = data$ACTIFS
ACTIFS = as.factor(ACTIFS)
table(ACTIFS)
## ACTIFS
## A D F H
## 130 386 120 300
prop.table(table(ACTIFS))
## ACTIFS
## A D F H
## 0.1388889 0.4123932 0.1282051 0.3205128
p=0.4124
echantillon <- sample(ACTIFS, 50)
Parametres à utiliser :
#proportion estimée de D dans la population
table(echantillon)
## echantillon
## A D F H
## 7 20 6 17
proportions_ech = prop.table(table(echantillon))
p_estime = as.numeric(proportions_ech["D"])
#proportion estimée du reste de la population
q_estime = 1 - p_estime
#nombre d'individus de l'echantillon
n=50
Calcul de l’IC à 95%
#1.96=U_alpha pour un IC de 95% (quantile de la loi normale centrée et réduite pour la proba 1-alpha/2)
Marge_d_erreur_IC95 = 1.96 * sqrt((p_estime*q_estime)/n)
IC 95% = 42% (+ ou -) 13.7%
prop=0
for (i in 1:50) {
echantillons = sample(ACTIFS, 50)
proportions_ech = prop.table(table(echantillons))
p_estime = as.numeric(proportions_ech["D"])
q_estime = 1 - p_estime
n=50
Marge_erreur_IC95 = 1.96 * sqrt((p_estime*q_estime)/n)
borne_infe = p_estime - Marge_erreur_IC95
borne_supe = p_estime + Marge_erreur_IC95
if (p <= borne_supe & p>=borne_infe) {
prop=prop+1
}
}
prop=prop/50
La proportion d’échantillons tirés contenant la valeur exacte de p est de 96% ce qui correspond bien au niveau de confiance recherché (95%).
Ces intervalles de confiance sont informatifs pour trouver la vraie valeur de p mais pas assez tout de même. La marge d’erreur est beaucoup trop élevée pour trouver.
Les deux éléments permettant de déterminer l’amplitude d’un intervalle de confiance sont le U_alpha et le nombre d’individus tirés pour l’échantillon. Pour rendre ces intervalles de confiance de taille plus réduite, on pourrait soit tirer un échantillon plus grand soit diminuer le niveau de confiance de l’intervalle (diminue le U_alpha).
Pour avoir un intervalle de confiance entre 0.1 et 0.15, il nous faut une marge d’erreur entre 0.05 et 0.075.
1ere piste : tirer un échantillon plus grand
Pour diviser l’intervalle par 2, nous devons multiplier n par 4.
echantillon2 <- sample(ACTIFS, 200)
proportions_ech2 = prop.table(table(echantillon2))
p_estime2 = as.numeric(proportions_ech2["D"])
#proportion estimée du reste de la population
q_estime2 = 1 - p_estime2
#nombre d'individus de l'echantillon
n=200
Marge_d_erreur_IC95_2 = 1.96 * sqrt((p_estime2*q_estime2)/n)
Ici, notre marge d’erreur est de 0,069, ce qui correspond bien à une intervalle entre 0.1 et 0.15 (intervalle = 0.138).
2eme piste : diminuer le niveau de confiance de l’intervalle
Ici, on souhaite aussi diviser la marge d’erreur par 2. Pour cela on peut d’abord essayé de calculer une intervalle de confiance de 70%
echantillon3 <- sample(ACTIFS, 50)
proportions_ech3 = prop.table(table(echantillon3))
p_estime3 = as.numeric(proportions_ech3["D"])
#proportion estimée du reste de la population
q_estime3 = 1 - p_estime3
#nombre d'individus de l'echantillon
n=50
Marge_d_erreur_IC95_3 = 1.0364 * sqrt((p_estime3*q_estime3)/n)
Ici, notre marge d’erreur est d’environs 0.71 ce qui correspond bien à une intervalle de confiance entre 0.1 et 0.15 (intervalle=0.142).
data_bretagne <- read_excel("C:/Bureau/BUT2/BUT1 - BUT2/SAE 202/Donnees seances 3 et 4/data_bretagne.xlsx")
La population de référence de notre étude est l’ensemble des communes de la Bretagne.
Population totale de la Bretagne :
Pop_totale = sum(data_bretagne$Pop)
Pop_totale
## [1] 3217767
#echantillon et paramètres
echantillon_bretagne <- sample(data_bretagne$Pop, 100)
n=100
x_barre = mean(echantillon_bretagne, na.rm = TRUE)
s_chapeau = sd(echantillon_bretagne, na.rm = TRUE)
Nous voulons travailler sur la population moyenne :
σ_chapeau_moy = s_chapeau / sqrt(n)
#intervalle de confiance
U_alpha = qnorm(0.975)
borne_inf = round(x_barre - U_alpha * σ_chapeau_moy, 2)
borne_sup = round(x_barre + U_alpha * σ_chapeau_moy, 2)
borne_inf
## [1] 1649.06
borne_sup
## [1] 2874.94
La population totale vaut n fois la population moyenne avec n le nombre de communes.
borne_inf_totale = borne_inf * 1232
borne_sup_totale = borne_sup * 1232
borne_inf_totale
## [1] 2031642
borne_sup_totale
## [1] 3541926
prop=0
for (i in 1:50) {
echantillon_bretagne2 <- sample(data_bretagne$Pop, 100)
n=100
x_barre2 = mean(echantillon_bretagne2, na.rm = TRUE)
s_chapeau2 = sd(echantillon_bretagne2, na.rm = TRUE)
σ_chapeau_moy2 = s_chapeau2 / sqrt(n)
U_alpha2 = qnorm(0.975)
borne_inf2 = x_barre2 - U_alpha2 * σ_chapeau_moy2
borne_sup2 = x_barre2 + U_alpha2 * σ_chapeau_moy2
borne_inf_totale2 = borne_inf2 * 1232
borne_sup_totale2 = borne_sup2 * 1232
if (Pop_totale>=borne_inf_totale2 & Pop_totale<=borne_sup_totale2) {
prop=prop+1
}
}
prop= prop/50
prop
## [1] 0.66
Moins de 80% desz intervalles de confiance calculées contiennent la vraie valeur de la population totale ce qui est inférieur au résultat attendu (95%).
Cela peut être du à la taille de l’échantillon tiré qui est trop petit.
plot(sort(data_bretagne$Pop, decreasing = TRUE))
Ce graphique montre que quelques communes bretonnes concentrent la majorité de la population et que les autres ont une population minime à côté. Cela expliquerait pourquoi tirer des échantillons aléatoires peut fausser le résultat.
categories_pop <- cut(
data_bretagne$Pop,
breaks = c(0, 3000, 30000, max(data_bretagne$Pop) + 1),
labels = c("Moins de 3 000 habitants", "Entre 3 000 et 30 000 habitants", "Plus de 30 000 habitants"),
right = FALSE
)
prop.table(table(categories_pop))
## categories_pop
## Moins de 3 000 habitants Entre 3 000 et 30 000 habitants
## 0.791396104 0.202922078
## Plus de 30 000 habitants
## 0.005681818
# Déterminer le nombre d’individus à tirer dans chaque strate
n=100
n_moins_3000 = 0.79 *n
n_entre_3000_et_30000 = 0.20 *n
n_plus_30000 = 0.01 * n
# Effectuer dans chaque strate le tirage correspondant
moins_3000 = sample(data_bretagne$Pop[which(data_bretagne$Pop<3000)], n_moins_3000)
entre_3000_et_30000 = sample(data_bretagne$Pop[which(data_bretagne$Pop>3000 & data_bretagne$Pop<30000)], n_entre_3000_et_30000)
plus_30000 = sample(data_bretagne$Pop[which(data_bretagne$Pop>30000)], n_plus_30000)
# Concaténer les trois tirages pour aboutir à l’échantillon final
echantillon_strates = c(moins_3000, entre_3000_et_30000, plus_30000)