Calcul d’estimations locales à partir d’une enquête nationale

1 Introduction

Le baromètre du numérique s’est déroulé auprès de 4 029 personnes, réparties en trois populations cibles distinctes (12 à 17 ans, 18 ans et plus, 18 ans et plus éloignés du numérique), avec des questionnaires adaptés et des quotas spécifiques, et grâce à deux types de recueil :

  • 3 235 personnes de 18 ans et plus ont été interrogées online

  • 472 personnes de 18 ans et plus éloignées du numérique (ne disposant pas, à leur domicile, d’une ligne de connexion fixe à internet) ont été interrogées par téléphone

  • 322 personnes âgées de 12 à 17 ans ont été interrogées online, après recueil de l’accord préalable de l’un des parents.

Les résultats présentés sont des résultats redressés : ils sont donc représentatifs de la population de 12 ans et plus résidant en France métropolitaine et, à ce titre, mis en regard des précédents résultats, issus d’enquêtes menées en face-à-face.

Le redressement a été mené en 3 étapes :

  • 1ère phase de redressement : un échantillon représentatif des personnes de 18 ans et plus résidant en France métropolitaine a été constitué, en fusionnant les individus interrogés online ainsi que les individus éloignés du numérique interrogés par téléphone (n=3 707). Dans cet échantillon, on recense 636 personnes non équipées en internet à domicile (472 contactées par téléphone et 186 online) Cet échantillon a été redressé grâce aux quotas suivants : âge x sexe / région / taille d’agglomération / PCS / taille du foyer / type de logement / âge x diplôme / accès à une connexion fixe dans le logement. Aux six critères de redressement classiquement utilisés dans les investigations menées précédemment en face-à-face ont donc été ajoutés deux nouveaux critères afin de tenir compte des biais de sélection induits par le recours à un panel online : le niveau de diplôme (grâce à la variable croisée âge x diplôme) ainsi que le niveau d’équipement en numérique (en prenant en compte la proportion mesurée en population générale de personnes éloignées du numérique)

  • 2ème phase de redressement : un échantillon représentatif des 12-17 ans a été constitué, redressé grâce aux critères classiques : âge x sexe, PCS de la personne de référence et taille d’agglomération (n=322)

  • 3ème phase de redressement Les deux échantillons ont été fusionnés (à due proportion de leurs poids respectifs) pour fournir un échantillon représentatif de la population de 12 ans et plus résidant en France métropolitaine (n=4 029)

Bordeaux Métropole souhaite obtenir des estimations d’indicateurs issus de l’enquête pour :

  • Bordeaux Métropole
  • Les communes de Bordeaux Métropole
  • Les grands quartiers de Bordeaux

2 Méthodologie

L’idée générale est de mettre en œuvre un redressement local pour chaque commune de Bordeaux Métropole et pour chaque grand quartier de Bordeaux. Ce redressement devra être mis en œuvre de la façon la plus proche possible de celle de l’enquête nationale, mais en prenant pour cible du redressement, les valeurs des critères pour chaque commune.

L’objectif de ce document est de présenter les résultats obtenus pour Bordeaux Métropole. Ensuite, les résultats seront à produire pour 41 territoires supplémentaires (ensemble des communes de Bordeaux Métropole + Grands Quartiers de Bordeaux.)

Il faudra donc :

  • récupérer les données INSEE nécessaires au redressement pour chaque entité
  • préparer les données de l’enquête pour rapprocher les données présentes des données disponibles pour le redressement
  • mettre en oeuvre le redressement
  • calculer les indicateurs redressés.

3 Récupération des données INSEE nécessaires et rapprochement avec les données de l’enquête

Elles ont été récupérées avec l’aide de Bordeaux Métropole. Elles sont issues des données du recensement de la population et notamment des données infra-communales.

Sont nécessaires pour la phase 1 du redressement :

  • Age
  • Sexe
  • Type de logement
  • PCS
  • Diplôme
  • Taille du foyer

L’accès à une connexion fixe dans le logement n’est pas disponible.

Sont nécessaires pour la phase 2 du redressement :

  • Age
  • Sexe
  • PCS de la personne de référence

3.1 Données Insee pour la phase 1

Les tableaux INSEE ont été travaillé afin d’obtenir les effectifs pour chaque variable et pour chaque entité géographique.

3.1.1 Age

Les données INSEE sont reprises dans le tableau suivant :

setwd("D:/Dropbox/1-Nicolas/Bordeaux Metropole/Données redressement/pop générale")
#setwd("C:/Users/nicol/Dropbox/1-Nicolas/Bordeaux Metropole/Données redressement/pop générale")


donnee <- readxl::read_excel("barometre-du-numerique-2020.xlsx",sheet = "barometre-du-numerique-2020")

### fabrication de variable

donnee$age_red <- cut(donnee$AGE, c(0, 24, 39, 54, 64,79,100))
donnee$sexe_red<-donnee$SEXE
donnee$logement_red<-donnee$typlog2
donnee$DIPLOME2 <- if_else(donnee$DIPLOME == "Aucun diplôme","Aucun diplôme ou CEP",
                   if_else(donnee$DIPLOME == "Certificat d'études primaires","Aucun diplôme ou CEP",
                   if_else(donnee$DIPLOME == "Bac + 2 (Deug, IUT, DUT, BTS)","Bac + 2 (Deug, IUT, DUT, BTS)",
                   if_else(donnee$DIPLOME == "Bac + 3 et supérieur","Bac + 3 et supérieur",
                   if_else(donnee$DIPLOME == "Bac (généraliste, techno. ou prof.)","Bac (généraliste, techno. ou prof.)",
                   if_else(donnee$DIPLOME == "Diplôme professionnel court (CAP, BEP)","Diplôme professionnel court (CAP, BEP)","BEPC, brevet des collèges"))))))

donnee$diplome_red<-donnee$DIPLOME2
donnee$CSP_red <- if_else(donnee$SITUEMP == "Retraité, retiré des affaires","Retraité",
                          if_else(donnee$PCS8EGO == "Personne au foyer","Autre inactif",donnee$PCS8EGO))
donnee$enfant_red<-donnee$NBENFANTS

donnee$agesexe_red <- paste(donnee$SEXE, donnee$AGE, sep = " ", collapse = NULL)

####base phase 1 et 2
adulte<-donnee[donnee$DIPL5!="12-17 ans",]
jeune<-donnee[donnee$DIPL5=="12-17 ans",]


age <- readxl::read_excel("age_quartier.xlsx")
sexe <- readxl::read_excel("sexe_quartier.xlsx")
logement <- readxl::read_excel("logement_quartier.xlsx")
diplome <- readxl::read_excel("diplome_quartier.xlsx")
CSP <- readxl::read_excel("CSP_quartier.xlsx")
enfant <- readxl::read_excel("foyer_quartier.xlsx")


####marges pour pondération
margesBM <- readxl::read_excel("marges_bordeauxmetropole2.xlsx")
margesBM<-as.matrix(margesBM)

######marges en proportion pour verif
margesBMP<- readxl::read_excel("marges_bordeauxmetropole.xlsx")

datatable(data=age,options = list(pageLength = 42),rownames = FALSE)

Dans l’enquête, l’âge est une variable numérique. Elle a été recodée en classes identiques à celle de l’INSEE.

adulte %>% tbl_summary(include = "age_red",
                         label = age_red ~ "") %>%
                          modify_header(label ~ "**Age**")
Age N = 3,7071
(0,24] 216 (5.8%)
(24,39] 676 (18%)
(39,54] 998 (27%)
(54,64] 752 (20%)
(64,79] 903 (24%)
(79,100] 162 (4.4%)

1 n (%)

3.1.2 Sexe

Les données INSEE sont reprises dans le tableau suivant :

datatable(data=sexe,options = list(pageLength = 42),rownames = FALSE)

Dans l’enquête, les effectifs sont :

adulte %>% tbl_summary(include = "sexe_red",
                         label = sexe_red ~ "") %>%
                          modify_header(label ~ "**Sexe**")
Sexe N = 3,7071
Femme 2,040 (55%)
Homme 1,667 (45%)

1 n (%)

3.1.3 Type de logement

Les données INSEE sont reprises dans le tableau suivant :

datatable(data=logement,options = list(pageLength = 42),rownames = FALSE)

Dans l’enquête, les effectifs sont :

adulte %>% tbl_summary(include = "logement_red",
                         label = logement_red ~ "") %>%
                          modify_header(label ~ "**Logement**")
Logement N = 3,7071
Logement collectif 1,518 (41%)
Maison individuelle 2,189 (59%)

1 n (%)

3.1.4 Diplôme

Les données INSEE sont reprises dans le tableau suivant :

datatable(data=diplome,options = list(pageLength = 42),rownames = FALSE)

Dans l’enquête, les modalités de la variable DIPLOME ont été recodées :

adulte %>% tbl_summary(include = "diplome_red",
                         label = diplome_red ~ "") %>%
                          modify_header(label ~ "**Diplôme**")
Diplôme N = 3,7071
Aucun diplôme ou CEP 366 (9.9%)
Bac (généraliste, techno. ou prof.) 792 (21%)
Bac + 2 (Deug, IUT, DUT, BTS) 682 (18%)
Bac + 3 et supérieur 834 (22%)
BEPC, brevet des collèges 217 (5.9%)
Diplôme professionnel court (CAP, BEP) 816 (22%)

1 n (%)

3.1.5 PCS

Dans l’enquête, les modalités de la variable DIPLOME ont été recodées :

datatable(data=CSP,options = list(pageLength = 42),rownames = FALSE)

Dans l’enquête, une varaible PCS a été crée à partir des variables SITUEMP et PCS8EGO :

###transformation de variable pour redressement

                        

adulte %>% tbl_summary(include = "CSP_red",
                         label = CSP_red ~ "") %>%
                          modify_header(label ~ "**PCS**")
PCS N = 3,7071
Agri. exploitant, artisan, commerçant, chef d'entreprise 107 (2.9%)
Autre inactif 526 (14%)
Cadre et profession intellectuelle supérieure 279 (7.5%)
Employé 723 (20%)
Ouvrier 271 (7.3%)
Profession Intermédiaire 494 (13%)
Retraité 1,307 (35%)

1 n (%)

3.1.6 Taille du foyer

En ce qui concerne la taille du foyer, le nombre d’enfants de moins de 25 ans a été retenu au vu du sujet de l’étude et des possibilités de rapprochement avec l’enquête nationale.

datatable(data=enfant,options = list(pageLength = 42),rownames = FALSE)

Dans l’enquête, une variable nombre d’enfants à été construites à partir des données d’âge des différentes personnes du foyer :

adulte %>% tbl_summary(include = "enfant_red",
                         label = enfant_red ~ "") %>%
                          modify_header(label ~ "**Nombre d'enfants**")
Nombre d'enfants N = 3,7071
0 2,515 (68%)
1 599 (16%)
2 440 (12%)
3 112 (3.0%)
4 41 (1.1%)

1 n (%)

3.2 Données Insee pour la phase 2

La deuxième phase du redressement concerne la poulation 12-17 ans.

Dans la méthodologie, il est dit que le redressement est effectué sur l’âge, le sexe et la PCS de la personne de référence. Ici le redressement sera mené sur l’âge et le sexe car l’information de la PCS dans la base de l’enquête n’est pas disponible.

3.2.1 L’Age et le Sexe

A partir des données INSEE d’âge détaillé, on peut construire le tableau pour toutes les communes de Bordeaux Métropole et pour l’ensemble du territoire de Bordeaux Métropole. Il est à noté que les données infra-communales n’ont pas pu être disponibles.

setwd("D:/Dropbox/1-Nicolas/Bordeaux Metropole/Données redressement/jeunes")

agesexejeunes<- readxl::read_excel("agesexe_commune.xlsx")


####marges pour pondération
margesBMjeune <- readxl::read_excel("agesexe_commune_red_BM.xlsx")
margesBMjeune<-as.matrix(margesBMjeune)

######marges en proportion pour verif
margesBMjeuneP<- readxl::read_excel("agesexe_commune_BM_prop.xlsx")

datatable(data=agesexejeunes,options = list(pageLength = 42),rownames = FALSE)

Pour pouvoir redresser en même temps sur l’Age et le Sexe, on crée une variable à partir de la concatenation du sexe et de l’Age.

jeune %>% tbl_summary(include = "agesexe_red",
                         label = agesexe_red ~ "") %>%
                          modify_header(label ~ "**Sexe/Age**")
Sexe/Age N = 3221
Femme 12 21 (6.5%)
Femme 13 25 (7.8%)
Femme 14 32 (9.9%)
Femme 15 26 (8.1%)
Femme 16 30 (9.3%)
Femme 17 24 (7.5%)
Homme 12 22 (6.8%)
Homme 13 26 (8.1%)
Homme 14 22 (6.8%)
Homme 15 35 (11%)
Homme 16 27 (8.4%)
Homme 17 32 (9.9%)

1 n (%)

4 Mise en oeuvre du redressement pour Bordeaux Métropole

Le redressement étant multi-critères une technique de calage sur marge est utilisée.

Le calage sur marges, introduit par Deville et Särndal en 1992 est depuis largement utilisé en production en statistique publique et par les instituts de sondage. L’utilisation du calage en statistique publique permet de présenter des estimations cohérentes entre différentes sources, mais aussi d’augmenter la précision des estimations si le calage est effectué sur des variables bien liées aux variables d’enquête.

4.1 Phase 1

Afin de pouvoir utiliser la package Icarus du logiciel R, les données de référence doivent être présentée de la façon suivante :

  • dans un même tableau, une variable par ligne
  • le nom de la variable dans le tableau de données
  • le nombre de modalité de chaque variable doit être indiqué
  • les modalités doivent être présentées dans l’ordre alphanumérique
  • les modalités doivent être décrite par les effectifs que l’on devrait trouver si la taille de l’entité était celle de l’enquête (cela revient à utiliser les proportions)
  • être présentée comme une matrice carrée en comblant avec des zéros

Pour Bordeaux Métropole, cela donne le tableau suivant :

datatable(data=margesBM,options = list(pageLength = 42),rownames = FALSE)

La première étape est le calcul des poids par calage sur marges.

adulte$poids<-1
adulte$poids <- calibration(data=adulte, marginMatrix=margesBM,
                     colWeights="poids", method="logit", bounds=c(0.1,5),description=FALSE)

La calibration converge et trouve une solution avec les bornes. Les poids sont compris entre 0.1 et 5, ce qui est raisonnable.

g1<-ggplot(adulte,aes(y=pond))+
         geom_boxplot()+
          ylim(0,5)+
         labs(title="Analyse de la pondération",y="Poids initiaux")+ 
          theme(axis.text.x = element_blank())


g2<-ggplot(adulte,aes(y=poids))+
         geom_boxplot()+
  ylim(0,5)+
         labs(title="Analyse de la pondération",y="Poids calculés")+ 
          theme(axis.text.x = element_blank())


grid.arrange(g1, g2, ncol=2, nrow = 1)

L’échantillon n’ayant pas été construit pour nos quotas, il est normal que les poids se répartissent dans un espace un peu plus grand.

4.2 Vérification de la convergence des poids de phase 1

Ici, il s’agit de vérifier si cibles de redressement sont atteintes, en comparant les effectifs redréssés aux effectifs cibles.

dw <- svydesign(ids = ~1, data = adulte, weights = ~poids)

margesBMP<-data.frame(t(margesBMP))

Age

#############Résultat du redressement pour Age

age<-data.frame(prop.table(table(donnee$age_red)))
tab <- svytable(~age_red, dw)
age2<-data.frame(freq(tab, total = FALSE))
res_age<-data.frame("Age"=age[,1],
                     "Origine"=age[,2],
                     "Effectifs redressés"=age2[,1],
                     "Pourcentage redressé"=age2[,2],
                     "Pourcentage Cible"=margesBMP[3:8,1])
res_age$Origine<-res_age$Origine*100
datatable(res_age)

Sexe

#############Résultat du redressement pour Sexe

sexe<-data.frame(prop.table(table(adulte$sexe_red)))
tab <- svytable(~sexe_red, dw)
sexe2<-data.frame(freq(tab, total = FALSE))
res_sexe<-data.frame("Sexe"=sexe[,1],
                     "Origine"=sexe[,2],
                     "Effectifs redressés"=sexe2[,1],
                     "Pourcentage redressé"=sexe2[,2],
                     "Pourcentage Cible"=margesBMP[3:4,6])
res_sexe$Origine<-res_sexe$Origine*100
datatable(res_sexe)

Type de logement

############Résultat du redressement pour logement

logement<-data.frame(prop.table(table(adulte$logement_red)))
tab <- svytable(~logement_red, dw)
logement2<-data.frame(freq(tab, total = FALSE))
res_logement<-data.frame("Logement"=logement[,1],
                        "Origine"=logement[,2],
                        "Effectifs redressés"=logement2[,1],
                        "Pourcentage redressé"=logement2[,2],
                        "Pourcentage Cible"=margesBMP[3:4,5])
res_logement$Origine<-res_logement$Origine*100
datatable(res_logement)

Diplome

#############Résultat du redressement pour diplome

diplome<-data.frame(prop.table(table(adulte$diplome_red)))
tab <- svytable(~diplome_red, dw)
diplome2<-data.frame(freq(tab, total = FALSE))
res_diplome<-data.frame("Diplôme"=diplome[,1],
                       "Origine"=diplome[,2],
                       "Effectifs redressés"=diplome2[,1],
                       "Pourcentage redressé"=diplome2[,2],
                       "Pourcentage Cible"=margesBMP[3:8,3])
res_diplome$Origine<-res_diplome$Origine*100
datatable(res_diplome)

PCS

############Résultat du redressement pour CSP

CSP<-data.frame(prop.table(table(adulte$CSP_red)))
tab <- svytable(~CSP_red, dw)
CSP2<-data.frame(freq(tab, total = FALSE))
res_CSP<-data.frame("PCS"=CSP[,1],
                         "Origine"=CSP[,2],
                         "Effectifs redressés"=CSP2[,1],
                         "Pourcentage redressé"=CSP2[,2],
                         "Pourcentage Cible"=margesBMP[3:9,2])
res_CSP$Origine<-res_CSP$Origine*100
datatable(res_CSP)

Taille du foyer

#############Résultat du redressement pour enfant

enfant<-data.frame(prop.table(table(adulte$enfant_red)))
tab <- svytable(~enfant_red, dw)
enfant2<-data.frame(freq(tab, total = FALSE))
res_enfant<-data.frame("Enfant"=enfant[,1],
                    "Origine"=enfant[,2],
                    "Effectifs redressés"=enfant2[,1],
                    "Pourcentage redressé"=enfant2[,2],
                    "Pourcentage Cible"=margesBMP[3:7,4])
res_enfant$Origine<-res_enfant$Origine*100
datatable(res_enfant)

Le redressement est impeccable.

4.3 Phase 2

La première étape est le calcul des poids par calage sur marges.

jeune$poids<-1
jeune$poids <- calibration(data=jeune, marginMatrix=margesBMjeune,
                     colWeights="poids", method="logit", bounds=c(0.1,5),description=FALSE)

La calibration converge et trouve une solution avec les bornes. Les poids sont compris entre 0.1 et 5, ce qui est raisonnable.

g1<-ggplot(jeune,aes(y=pond))+
         geom_boxplot()+
          ylim(0,5)+
         labs(title="Analyse de la pondération",y="Poids initiaux")+ 
          theme(axis.text.x = element_blank())


g2<-ggplot(jeune,aes(y=poids))+
         geom_boxplot()+
  ylim(0,5)+
         labs(title="Analyse de la pondération",y="Poids calculés")+ 
          theme(axis.text.x = element_blank())


grid.arrange(g1, g2, ncol=2, nrow = 1)

Le redressement est assez faible et ressemble au redressement précédent.

4.4 Vérification de la convergence des poids de phase 2

Ici, il s’agit de vérifier si cibles de redressement sont atteintes, en comparant les effectifs redréssés aux effectifs cibles.

dw2 <- svydesign(ids = ~1, data = jeune, weights = ~poids)

margesBMPjeune<-data.frame(t(margesBMjeuneP))

Sexe et Age

#############Résultat du redressement pour Age

sexeage<-data.frame(prop.table(table(jeune$agesexe_red)))
tab <- svytable(~agesexe_red, dw2)
sexeage2<-data.frame(freq(tab, total = FALSE))
res_sexeage<-data.frame("Age"=sexeage[,1],
                     "Origine"=sexeage[,2],
                     "Effectifs redressés"=sexeage2[,1],
                     "Pourcentage redressé"=sexeage2[,2],
                     "Pourcentage Cible"=margesBMPjeune[4:15,1])
res_sexeage$Origine<-res_sexeage$Origine*100
datatable(res_sexeage)

Le redressement est impeccable.

5 Phase 3 : intégration des bases adultes et jeunes

Les deux échantillons doivent être fusionnés (à due proportion de leurs poids respectifs) pour fournir des estimations représentatives de la population de 12 ans et plus.

Pour Bordeaux Métropole, le pourcentage que représente les jeunes de 12 à 17 ans sur la population totale est de 6,495%.

Un coefficient de proportionnalité permet de corriger les poids de l’enquête jeune pour les ramener à la bonne proportion, sans changer le rapport entre les poids dans l’enquête jeune.

##calcul rapport des poids
rapportenquete<- sum(jeune$poids)/sum(adulte$poids)

##proportion dans le dur à changer pour boucle

rapportcible<-0.06495

coef<-rapportcible/rapportenquete

jeune$poids<-jeune$poids*coef

Une fois les poids de l’enquête jeune corrigés, il suffit de fusionner les deux bases.

fusion<-rbind(adulte,jeune)

6 Calcul d’un indicateur

basé sure la variable ability

Pourcentage non redressé et redressé aves les poids initiaux

fusion<-rbind(adulte,jeune)
dw3 <- svydesign(ids = ~1, data = fusion, weights = ~pond)
dw4 <- svydesign(ids = ~1, data = fusion, weights = ~poids)
############Résultat du redressement pour enfant

ABILITY<-data.frame(prop.table(table(fusion$ABILITY)))
tab <- svytable(~ABILITY, dw3)
ABILITY2<-data.frame(freq(tab, total = FALSE))
tab2 <- svytable(~ABILITY, dw4)
ABILITY3<-data.frame(freq(tab2, total = FALSE))
res_ABILITY<-data.frame("ABILITY"=ABILITY[,1],
                    "Origine"=ABILITY[,2],
                    "Effectifs redressés"=ABILITY2[,1],
                    "Pourcentage redressé"=ABILITY2[,2],
                    "Effectifs redressés BM"=ABILITY3[,1],
                    "Pourcentage redressé BM"=ABILITY3[,2]
                    )
res_ABILITY$Origine<-res_ABILITY$Origine*100
datatable(res_ABILITY)