Antoine Rebecq
INSEE
1. L'écosystème R - calage sur marges
2. Calage sur marges avec Icarus
3. Variantes du calage sur marges
Le calage permet de proposer un estimateur avec de bonnes propriétés statistiques vérifiant les contraintes de calage :
Praticiens du calage : statistique officielle et non officielle, recherche en épidémiologie, biologie, sociologie, etc.
Objectif de Icarus (Icarus CAle et Redresse les Unités en Sondages) : proposer un package avec des fonctionnalités spécifiquement dédiées au calage, avec une interface proche de Calmar.
Pour installer le package :
install.packages("icarus")
Ou pour avoir la dernière version à jour du package (nécessite le package devtools)
install.packages("devtools")
library(devtools)
install_github("haroine/icarus")
Page github du package Icarus : code, historique, wiki, issues
On considère une population de taille 300 (salariés d'une entreprise). On veut mesurer la fréquentation mensuelle des cinémas par les salariés. On dispose des structures pour les variables catégorielles et des totaux pour les variables quantitatives suivantes :
library(icarus)
N <- 300 ## Taille de la population
data_ex2 ## Données d'enquête
id | service | categ | sexe | salaire | cinema | poids | |
---|---|---|---|---|---|---|---|
1 | a01 | 1 | 1 | 1 | 1000 | 1 | 10 |
2 | a02 | 1 | 2 | 2 | 1100 | 2 | 10 |
3 | a03 | 2 | 2 | 2 | 1500 | 4 | 10 |
4 | a04 | 2 | 3 | 1 | 2300 | 15 | 10 |
5 | a05 | 2 | 1 | 1 | 1000 | 2 | 10 |
6 | a06 | 1 | 1 | 2 | 500 | 3 | 10 |
7 | a07 | 2 | 2 | 2 | 1000 | 1 | 10 |
8 | b01 | 1 | 3 | 2 | 2000 | 0 | 20 |
9 | b02 | 1 | 1 | 1 | 2100 | 0 | 20 |
10 | b03 | 2 | 2 | 1 | 2000 | 3 | 20 |
11 | b04 | 2 | 1 | 2 | 3200 | 6 | 20 |
12 | b05 | 1 | 1 | 2 | 1800 | 0 | 20 |
13 | b06 | 1 | 2 | 1 | 2800 | 0 | 20 |
14 | b07 | 1 | 3 | 1 | 1100 | 1 | 20 |
15 | b08 | 2 | 1 | 2 | 2500 | 1 | 20 |
La table des marges de calage possède un format proche de celle de Calmar. On indique :
mar1 <- c("categ",3,80,90,60)
mar2 <- c("sexe",2,140,90,0)
mar3 <- c("service",2,100,130,0)
mar4 <- c("salaire",0,470000,0,0)
margins <- rbind(mar1, mar2, mar3, mar4)
1 | 2 | 3 | 4 | 5 | |
---|---|---|---|---|---|
mar1 | categ | 3 | 80 | 90 | 60 |
mar2 | sexe | 2 | 140 | 90 | 0 |
mar3 | service | 2 | 100 | 130 | 0 |
mar4 | salaire | 0 | 470000 | 0 | 0 |
wCalesRaking <- calibration(data=data_ex2, marginMatrix=margins,
colWeights="poids", method="raking",
popTotal = 230)
##
## ################### Summary of before/after weight ratios ###################
## Calibration method : raking
## Mean : 0.9852
## 0% 1% 10% 25% 50% 75% 90% 99% 100%
## 0.2792 0.2980 0.4528 0.6389 0.8833 1.0450 1.7080 2.3755 2.4514
##
## ################### Comparison Margins Before/After calibration ###################
## $Total
## Before calibration After Calibration Margin
## 230 230 230
##
##
##
##
## $categ
## Before calibration After Calibration Margin
## 1 47.83 34.78 34.78
## 2 30.43 39.13 39.13
## 3 21.74 26.09 26.09
##
## $sexe
## Before calibration After Calibration Margin
## 1 47.83 60.87 60.87
## 2 52.17 39.13 39.13
##
## $service
## Before calibration After Calibration Margin
## 1 56.52 43.48 43.48
## 2 43.48 56.52 56.52
##
## $salaire
## Before calibration After Calibration Margin
## 434000 470000 470000
wCalesLogit <- calibration(data=data_ex2, marginMatrix=margins,
colWeights="poids", method="logit",
bounds=c(0.4,2.2), popTotal = 230)
##
## ################### Summary of before/after weight ratios ###################
## Calibration method : logit
## L bound : 0.4
## U bound : 2.2
## Mean : 0.9701
## 0% 1% 10% 25% 50% 75% 90% 99% 100%
## 0.4026 0.4042 0.4193 0.5186 0.8564 1.1952 1.7807 2.1475 2.1707
##
## ################### Comparison Margins Before/After calibration ###################
## $Total
## Before calibration After Calibration Margin
## 230 230 230
##
## $categ
## Before calibration After Calibration Margin
## 1 47.83 34.78 34.78
## 2 30.43 39.13 39.13
## 3 21.74 26.09 26.09
##
## $sexe
## Before calibration After Calibration Margin
## 1 47.83 60.87 60.87
## 2 52.17 39.13 39.13
##
## $service
## Before calibration After Calibration Margin
## 1 56.52 43.48 43.48
## 2 43.48 56.52 56.52
##
## $salaire
## Before calibration After Calibration Margin
## 434000 470000 470000
wLogitSerres <- calibration(data=data_ex2, marginMatrix=margins,
colWeights="poids", method="logit",
bounds=c(0.6,2.0), popTotal = 230)
## Warning in calibAlgorithm(Xs, d, total, q, inverseDistance,
## updateParameters, : No convergence
Le calage pénalisé (Bocci and Beaumont (2008)) permet de relâcher la contrainte d'exactitude sur les estimateurs pour les variables de calage. Un paramètre supplémentaire apparaît : le gap, qui spécifie l'étendue de la distribution des poids souhaitée (similaire à la méthode logit).
Utilité :
Applications à l'INSEE : présentation donnée le 15 mars
costs <- c(1,1,1,Inf)
wPenalise <- calibration(data=data_ex2, marginMatrix=margins,
colWeights="poids", costs=costs,
gap=1.4, popTotal=230)
## ################### Summary of before/after weight ratios ###################
## Calibration method : linear
## Mean : 0.9661
## 0% 1% 10% 25% 50% 75% 90% 99% 100%
## 0.1950 0.2435 0.5774 0.7713 0.9579 1.1268 1.4663 1.5818 1.5949
##
## ################### Comparison Margins Before/After calibration ###################
## Careful, calibration may not be exact
## $Total
## Before calibration After Calibration Margin
## 230 230 230
##
## $categ
## Before calibration After Calibration Margin
## 1 47.83 40.34 34.78
## 2 30.43 36.55 39.13
## 3 21.74 23.11 26.09
##
##
##
##
##
## $sexe
## Before calibration After Calibration Margin
## 1 47.83 56.04 60.87
## 2 52.17 43.96 39.13
##
## $service
## Before calibration After Calibration Margin
## 1 56.52 47.89 43.48
## 2 43.48 52.11 56.52
##
## $salaire
## Before calibration After Calibration Margin
## 434000 470000 470000
wCalMin <- calibration(data=data_ex2, marginMatrix=margins,
colWeights="poids", method="min", popTotal=230)
## Solution found for calibration on minimal bounds:
## L = 0.334476843910806
## U = 1.65866209262436
##
## ################### Summary of before/after weight ratios ###################
## Calibration method : min
## Mean : 0.9693
## 0% 1% 10% 25% 50% 75% 90% 99% 100%
## 0.3344 0.3344 0.3344 0.3345 0.6451 1.6587 1.6587 1.6587 1.6587
##
## ################### Comparison Margins Before/After calibration ###################
## $Total
## Before calibration After Calibration Margin
## 230 230 230
##
## $categ
## Before calibration After Calibration Margin
## 1 47.83 34.78 34.78
## 2 30.43 39.13 39.13
## 3 21.74 26.09 26.09
##
## $sexe
## Before calibration After Calibration Margin
## 1 47.83 60.87 60.87
## 2 52.17 39.13 39.13
##
## $service
## Before calibration After Calibration Margin
## 1 56.52 43.48 43.48
## 2 43.48 56.52 56.52
##
## $salaire
## Before calibration After Calibration Margin
## 434000 470000 470000
[1] J. Bocci and C. Beaumont. "Another look at ridge calibration". In: Metron 66.1 (2008), pp. 5-20.
[2] J. Le Guennec and O. Sautory. "Calmar 2: Une nouvelle version de la macro calmar de redressement d’échantillon par calage". In: Journées de Méthodologie Statistique, Paris. INSEE (2002).
[3] T. Lumley. survey: analysis of complex survey samples. R package version 3.31-2. 2016.
[4] O. Sautory. "La macro Calmar. Redressement d’un échantillon par calage sur marges". In: Document F9310, DSDS, INSEE (1993).
[5] Y. Tillé and A. Matei. sampling: Survey Sampling. R package
version 2.7. 2015.