cassionAnalyse de données

Leçon 4 sur 8

Unité · Ce que le plan achète

L'effet de plan, et celui qui est sorti sous un

La mise en grappes coûte de la précision, la stratification en rachète, et l'effet de plan est le solde. 1,60 pour l'insécurité alimentaire et 0,91 pour l'accès à l'eau, sur les mêmes 996 entretiens.

PythonR120 minEnquête SMARTEnquête démographique et de santé (EDS)Enquête par grappes à indicateurs multiples (MICS)

Ce que c’est

L’effet de plan est un rapport.

deff = variance under this design / variance under simple random sampling

Un effet de plan de 2 signifie que votre estimation est aussi précise que l’aurait été un sondage aléatoire simple de moitié moindre. Il convertit un échantillon de 996 en taille d’échantillon effective — le nombre d’observations indépendantes que votre enquête vaut réellement.

effective n = n / deff

C’est cette seconde quantité qu’il faut mettre dans un rapport. « 996 ménages, échantillon effectif 623 » en dit plus que chacun des deux nombres, et c’est la réponse honnête à « quelle était la taille de votre enquête ».

Pourquoi les grappes vous coûtent

Les ménages d’une même zone de dénombrement se ressemblent. Ils partagent un point d’eau, un marché, une route, une récolte. Le deuxième ménage interrogé dans une zone vous apprend donc moins que le premier, et le quatorzième très peu.

La mesure de cette ressemblance est la corrélation intra-grappe, et elle se traduit directement en pénalité.

deff_clustering = 1 + (m - 1) * ICC

avec m le nombre d’entretiens par grappe.

import pandas as pd

by_area = (
    survey.assign(insecure=survey["food_insecure"] == "true")
    .groupby("ea_id")["insecure"]
    .agg(["mean", "size"])
)

p = (survey["food_insecure"] == "true").mean()
m = by_area["size"].mean()
between = by_area["mean"].var(ddof=0)
icc = (between - p * (1 - p) / m) / (p * (1 - p))

print(f"mean cluster size {m:.1f}, ICC {icc:.3f}, "
      f"clustering deff {1 + (m - 1) * icc:.2f}")
by_area <- survey |>
  summarise(rate = mean(food_insecure == "true"), n = n(), .by = ea_id)

p <- mean(survey$food_insecure == "true")
m <- mean(by_area$n)
icc <- (var(by_area$rate) * (nrow(by_area) - 1) / nrow(by_area) -
        p * (1 - p) / m) / (p * (1 - p))

c(m = m, icc = icc, deff = 1 + (m - 1) * icc)

Sur cette enquête — 13,3 entretiens par zone, ICC de 0,11, effet de plan dû aux grappes d’environ 2,4.

Deux choses à retenir sur l’ICC.

  • C’est une propriété du résultat, pas de l’enquête. La source d’eau est très regroupée — un village a un forage ou n’en a pas. La taille du ménage l’est à peine. Un effet de plan par résultat, toujours.
  • Les valeurs publiées sont la meilleure estimation disponible. Les rapports EDS et SMART publient des effets de plan, et employer celui du tour précédent pour le même indicateur au même endroit vaut infiniment mieux que supposer 1.

Pourquoi la stratification en rachète

La stratification fait l’inverse. En forçant l’échantillon à couvrir chaque strate, elle supprime la possibilité d’un échantillon tombé surtout dans une seule — et cette possibilité fait partie de la variance d’un sondage aléatoire simple.

Le gain est grand exactement quand les strates diffèrent beaucoup sur le résultat. L’accès à une source améliorée va de 88 % en urbain à 41 % en rural reculé, et la stratification garantit que ces strates sont représentées en proportions fixes plutôt qu’au hasard.

Le solde, mesuré

Les deux forces tirent en sens inverse, donc calculez l’effet de plan sur les données plutôt que de raisonner dessus. Estimez la variance sous le plan réel et divisez par ce qu’aurait donné un sondage aléatoire simple.

import numpy as np


def design_effect(df, outcome, weight="weight"):
    p = np.average(df[outcome] == "true", weights=df[weight])
    total_w = df[weight].sum()

    variance = 0.0
    for _, stratum in df.groupby("stratum"):
        areas = stratum.groupby("ea_id").apply(
            lambda g: (g[weight] * ((g[outcome] == "true") - p)).sum()
        )
        n = len(areas)
        if n < 2:
            continue
        variance += n / (n - 1) * ((areas - areas.mean()) ** 2).sum()
    variance /= total_w**2

    srs = p * (1 - p) / len(df)
    return p, np.sqrt(variance), variance / srs


for outcome in ["food_insecure", "improved_water_source"]:
    p, se, deff = design_effect(survey, outcome)
    print(f"{outcome:24} p={p:.1%} se={se:.4f} deff={deff:.2f} "
          f"n_eff={len(survey) / deff:.0f}")
library(survey)

design <- svydesign(ids = ~ea_id, strata = ~stratum, weights = ~weight,
                    data = survey, nest = TRUE)

svymean(~I(food_insecure == "true"), design, deff = TRUE)
svymean(~I(improved_water_source == "true"), design, deff = TRUE)
Résultat Estimation Effet de plan n effectif
Insécurité alimentaire 29,1 % 1,60 623
Source d’eau améliorée 69,8 % 0,91 1 098

Celui qui est sous un

Relisez la deuxième ligne. Un effet de plan de 0,91 signifie que l’enquête est plus précise qu’un sondage aléatoire simple de même taille.

Ce n’est pas une erreur, et c’est le résultat le plus utile de cette leçon. L’accès à l’eau diffère énormément entre strates — 88 %, 62 %, 41 % — et la stratification garantit que les trois entrent dans l’estimation en proportions fixes. La variance qu’un sondage aléatoire simple porte du fait de ne pas savoir combien de ménages urbains il attrapera est entièrement supprimée, et ce gain l’emporte sur la perte due aux grappes.

L’insécurité alimentaire diffère aussi entre strates, mais sa corrélation intra-zone est plus forte, si bien que les grappes l’emportent et le solde vaut 1,60.

« Effet de plan » n’est donc pas synonyme de « pénalité ». C’est le solde de deux forces opposées, et laquelle l’emporte dépend du résultat. Un rapport d’enquête citant un effet de plan unique pour toute l’enquête a moyenné ce qui ne doit pas l’être.

Remarquez aussi que le chiffre calculé plus haut pour les seules grappes valait 2,4, et que l’effet de plan complet du même résultat vaut 1,60. La différence est ce qu’a acheté la stratification, et cela mérite d’être rapporté quand vous défendez un plan de sondage.

D’où viennent les effets de plan quand vous n’en avez pas

Il vous en faut un avant que l’enquête existe, et il n’y a pas encore de données. Par ordre de préférence.

  • Le tour précédent de la même enquête, même indicateur, même zone. Presque toujours disponible et presque toujours ignoré.
  • Un rapport d’enquête publié pour le même indicateur dans un contexte comparable. Les rapports EDS tabulent les effets de plan ; les rapports de plausibilité SMART les énoncent.
  • Une convention. Les enquêtes SMART supposent couramment 1,5 pour l’anthropométrie ; les évaluations humanitaires emploient souvent 2,0 pour les résultats au niveau ménage.
  • 1,0 n’est jamais une hypothèse défendable pour une enquête en grappes, et un protocole qui l’emploie a sous-dimensionné l’enquête de moitié.

Rapportez-le

summary = pd.DataFrame({
    "outcome": ["Food insecure", "Improved water source"],
    "estimate": ["29.1%", "69.8%"],
    "ci_95": ["25.5-32.7%", "67.0-72.5%"],
    "deff": [1.60, 0.91],
    "n": [996, 996],
    "n_effective": [623, 1098],
})
tibble::tribble(
  ~outcome,                ~estimate, ~deff, ~n_effective,
  "Food insecure",           "29.1%",  1.60,          623,
  "Improved water source",   "69.8%",  0.91,         1098
)

Cinq colonnes, une ligne par indicateur, et cela a sa place en annexe de tout rapport d’enquête. Cela permet à un lecteur de juger l’estimation, de la comparer à une autre enquête et de dimensionner le tour suivant — trois choses impossibles à partir du seul pourcentage.

La suite

Vous avez un effet de plan, donc une erreur type, donc de quoi cesser de calculer tout cela à la main. La leçon suivante déclare le plan une fois au logiciel et laisse chaque estimation en hériter — survey sous R, et l’arithmétique équivalente en Python.

Animer cette leçon

La leçon en diaporama, la prose étant reléguée dans les notes du présentateur plutôt que projetée. Produit à partir de cette page, dont il ne peut donc pas s'écarter.

Lancer le diaporamaLire les diapositives

Le PDF ne requiert aucun logiciel et se projette depuis n'importe quel poste. Le fichier PowerPoint est fait pour être modifié : appliquez la charte de votre organisation, retirez une section pour une séance plus courte, ou fusionnez deux leçons en atelier.