cassionAnalyse de données

Retour à la leçonLeçon 4 sur 8Quand personne n'a randomisé

Un meilleur équilibre, six écoles en moins

Le même diaporama que les téléchargements, rendu sous forme de page. Lancez le diaporama pour le présenter en plein écran — les flèches ou un clic avancent d'une diapositive, Échap quitte.

Diapositives · PDFDiapositives · PowerPoint

  1. Diapositive 1 / 25

    Ce que couvre cette leçon

    • L'appariement, en un paragraphe
    • Appariez les écoles
    • Quelles six écoles sont parties, et pourquoi cela compte
    • Ce que « lui ressemble » devrait signifier
    • Vérifiez le recouvrement avant d'apparier, pas après
    • Quatre choses à rapporter, toujours
    • Ce que l'appariement ne peut pas faire
    • Rapportez-le en entier
    • La suite
    Notes du présentateur
    L'appariement ramène le déséquilibre initial de 3,35 points à 1,41 et donne une estimation de −0,71 au lieu de −0,96. Il y parvient en écartant six des quinze écoles du programme — les six aux scores initiaux les plus élevés — si bien que la réponse porte désormais sur d'autres écoles que la question.
  2. Diapositive 2 / 25

    L'appariement, en un paragraphe

    • Trouvez, pour chaque unité traitée, une unité non traitée qui lui ressemble ; ne comparez que les paires — Tout le…
    Notes du présentateur
    Trouvez, pour chaque unité traitée, une unité non traitée qui lui ressemble ; ne comparez que les paires. Tout le reste de la méthode est un choix sur « qui lui ressemble » et sur ce qu'il faut faire quand aucune telle unité n'existe. L'attrait est de rendre la comparaison explicite. Le coût est que la seconde moitié de cette phrase — que les paires — change la population dont parle la réponse, et elle le fait discrètement.
  3. Diapositive 3 / 25

    Appariez les écoles — En Python (suite)

    import pandas as pd
    import numpy as np
    
    treated = schools[schools["feeding_programme"]].sort_values("baseline")
    control = schools[~schools["feeding_programme"]].sort_values("baseline")
    
    used, pairs = set(), []
    for _, c in control.iterrows():
        available = treated[~treated["school_id"].isin(used)]
        nearest = (available["baseline"] - c["baseline"]).abs().idxmin()
        used.add(treated.loc[nearest, "school_id"])
        pairs.append({"control": c["school_id"],
                      "treated": treated.loc[nearest, "school_id"],
                      "base_c": c["baseline"], "base_t": treated.loc[nearest, "baseline"],
                      "gain_c": c["gain"], "gain_t": treated.loc[nearest, "gain"]})
    
  4. Diapositive 4 / 25

    Appariez les écoles — En Python (suite)

    matched = pd.DataFrame(pairs)
    print(f"{len(matched)} pairs from {len(treated)} treated and {len(control)} control")
  5. Diapositive 5 / 25

    Appariez les écoles — En R

    library(MatchIt)
    
    m <- matchit(feeding_programme ~ baseline, data = schools,
                 method = "nearest", ratio = 1)
    summary(m)
  6. Diapositive 6 / 25

    Appariez les écoles

    • Neuf paires à partir de quinze écoles traitées et neuf témoins — L'appariement un pour un sans remise ne peut produire…
    Notes du présentateur
    Neuf paires à partir de quinze écoles traitées et neuf témoins. L'appariement un pour un sans remise ne peut produire au plus qu'autant de paires que le plus petit groupe a d'unités, si bien que six écoles traitées n'ont pas de partenaire et quittent l'analyse.
  7. Diapositive 7 / 25

    Appariez les écoles

    Avant appariementAprès
    Écoles traitées159
    Écoles témoins99
    Écart initial+3,35 pts+1,41 pt
    Estimation−0,96 pt−0,71 pt
    Erreur-type1,291,22
  8. Diapositive 8 / 25

    Appariez les écoles

    • L'équilibre s'est amélioré et l'estimation a à peine bougé — ce qui est le résultat qu'on espère : cela dit que les…
    Notes du présentateur
    L'équilibre s'est amélioré et l'estimation a à peine bougé, ce qui est le résultat qu'on espère : cela dit que les différences de différences n'étaient pas portées par l'écart initial.
  9. Diapositive 9 / 25

    Quelles six écoles sont parties, et pourquoi cela compte — En Python

    dropped = treated[~treated["school_id"].isin(used)]
    print(dropped[["school_id", "baseline", "gain"]].round(4))
    print(f"dropped mean baseline: {dropped['baseline'].mean():.4f}")
    print(f"kept mean baseline:    {matched['base_t'].mean():.4f}")
  10. Diapositive 10 / 25

    Quelles six écoles sont parties, et pourquoi cela compte — En R

    # Which units matching threw away is the first table to print, not the last.
  11. Diapositive 11 / 25

    Quelles six écoles sont parties, et pourquoi cela compte

    • Les six écoles écartées sont les six aux plus hauts scores initiaux de littératie — de 53,9 % à 65,5 %, contre une…
    • Ce n'est pas un défaut de l'appariement ; c'est l'appariement qui vous dit quelque chose de vrai — Les neuf écoles…
    • Mais cela change l'affirmation — L'estimation appariée répond à « parmi les écoles dont la littératie initiale est…
    Notes du présentateur
    Les six écoles écartées sont les six aux plus hauts scores initiaux de littératie — de 53,9 % à 65,5 %, contre une moyenne de 55,8 % pour les écoles traitées appariées. Elles ont été écartées parce que le groupe témoin ne contient aucune école ayant obtenu un score aussi élevé : il n'y a rien à quoi les comparer. Ce n'est pas un défaut de l'appariement ; c'est l'appariement qui vous dit quelque chose de vrai. Les neuf écoles témoins ne peuvent pas parler pour les écoles du programme les plus performantes, parce qu'aucune école témoin de ce niveau n'existe. Mais cela change l'affirmation. L'estimation appariée répond à « parmi les écoles dont la littératie initiale est inférieure à environ 60 %, qu'a fait le programme ? » — et c'est une question plus étroite que celle que le rapport se proposait de traiter.
  12. Diapositive 12 / 25

    Ce que « lui ressemble » devrait signifier

    ApprocheApparier surÀ employer quand
    ExacteDes valeurs identiques de quelques variables catégoriellesPeu de covariables, grands échantillons
    Plus proche voisin sur un score de propensionLa probabilité prédite d'être traitéBeaucoup de covariables
    Exacte grossièreDes valeurs regroupées en classesVous voulez un niveau d'équilibre garanti
    Notes du présentateur
    Apparier sur une seule variable est une simplification pédagogique. En pratique le choix se fait entre trois approches.
  13. Diapositive 13 / 25

    Ce que « lui ressemble » devrait signifier — En Python

    import statsmodels.formula.api as smf
    
    ps = smf.logit("feeding_programme ~ baseline + size + district",
                   data=schools).fit(disp=0)
    schools["pscore"] = ps.predict(schools)
    print(schools.groupby("feeding_programme")["pscore"].describe()[
        ["min", "mean", "max"]].round(3))
  14. Diapositive 14 / 25

    Ce que « lui ressemble » devrait signifier — En R

    glm(feeding_programme ~ baseline + size + district, data = schools,
        family = binomial())
  15. Diapositive 15 / 25

    Ce que « lui ressemble » devrait signifier

    • Un score de propension est un nombre unique résumant de nombreuses covariables — et apparier dessus équivaut à apparier…
    • Ce n'est pas un moyen d'obtenir plus de données — Le score réduit la dimensionnalité ; il ne crée pas de comparateurs…
    Notes du présentateur
    Un score de propension est un nombre unique résumant de nombreuses covariables, et apparier dessus équivaut à apparier sur toutes à la fois — ce qui le rend utile quand il y a plus de covariables qu'un petit échantillon ne peut en apparier exactement. Ce n'est pas un moyen d'obtenir plus de données. Le score réduit la dimensionnalité ; il ne crée pas de comparateurs là où il n'y en a pas.
  16. Diapositive 16 / 25

    Vérifiez le recouvrement avant d'apparier, pas après — En Python

    t = schools[schools["feeding_programme"]]["pscore"]
    c = schools[~schools["feeding_programme"]]["pscore"]
    print(f"treated range {t.min():.3f}–{t.max():.3f}")
    print(f"control range {c.min():.3f}–{c.max():.3f}")
    print(f"treated units above the control maximum: {(t > c.max()).sum()}")
    Notes du présentateur
    C'est la vérification que l'exercice du cours de régression a découverte à ses dépens sur les deux programmes PCIMA, et elle s'applique ici sans changement.
  17. Diapositive 17 / 25

    Vérifiez le recouvrement avant d'apparier, pas après — En R

    # Plot the two propensity score distributions. The tails are the whole story.
  18. Diapositive 18 / 25

    Vérifiez le recouvrement avant d'apparier, pas après

    • Les unités hors de la plage de l'autre groupe n'ont pas de contrefactuel dans les données — L'appariement les écarte,…
    Notes du présentateur
    Les unités hors de la plage de l'autre groupe n'ont pas de contrefactuel dans les données. L'appariement les écarte, ce qui est honnête ; l'ajustement par régression les garde et extrapole, ce qui ne l'est pas. C'est la vraie différence entre les deux méthodes, et c'est une meilleure raison de préférer l'appariement que n'importe quelle affirmation sur le biais.
  19. Diapositive 19 / 25

    Quatre choses à rapporter, toujours

    • Combien d'unités ont été écartées, et lesquelles — Le premier tableau, non une note de bas de page
    • L'équilibre avant et après — Les différences standardisées sur chaque covariable, les deux colonnes, pour qu'un lecteur…
    • Quelle population l'estimation décrit désormais — Une phrase, dans les mots qu'emploie un responsable de programme — «…
    • L'estimation non appariée également — Si l'appariement a sensiblement changé la réponse, c'est en soi un constat sur le…
    Notes du présentateur
    Combien d'unités ont été écartées, et lesquelles. Le premier tableau, non une note de bas de page. L'équilibre avant et après. Les différences standardisées sur chaque covariable, les deux colonnes, pour qu'un lecteur voie ce que l'appariement a acheté. Quelle population l'estimation décrit désormais. Une phrase, dans les mots qu'emploie un responsable de programme — « les écoles dont la littératie initiale est sous 60 % », non « la région de support commun ». L'estimation non appariée également. Si l'appariement a sensiblement changé la réponse, c'est en soi un constat sur le degré auquel la comparaison dépendait des unités qu'il a écartées.
  20. Diapositive 20 / 25

    Ce que l'appariement ne peut pas faire

    • Il ne peut pas corriger un facteur de confusion non mesuré — Deux écoles aux scores initiaux identiques peuvent encore…
    • Il ne peut pas créer un groupe témoin — Si les unités non traitées sont systématiquement différentes, l'appariement…
    • Il ne supprime pas le besoin d'un protocole — Appariement plus point de départ font des différences de différences sur…
    Notes du présentateur
    Il ne peut pas corriger un facteur de confusion non mesuré. Deux écoles aux scores initiaux identiques peuvent encore différer par la raison pour laquelle l'une a été sélectionnée. L'appariement équilibre ce sur quoi vous avez apparié et rien d'autre — ce qui est exactement la limite de l'ajustement par régression, atteinte par un autre chemin. Il ne peut pas créer un groupe témoin. Si les unités non traitées sont systématiquement différentes, l'appariement rapportera un excellent équilibre sur une poignée de paires et gardera le silence sur tous les autres. Il ne supprime pas le besoin d'un protocole. Appariement plus point de départ font des différences de différences sur un sous-ensemble ; l'appariement seul est une coupe transversale mieux élevée. L'estimation ci-dessus est le premier cas, et combiner les deux est généralement plus solide que l'un ou l'autre.
  21. Diapositive 21 / 25

    Rapportez-le en entier — Exemple (suite)

    School feeding and literacy, matched difference-in-differences
    
      Nearest-neighbour matching on baseline literacy, 1:1 without replacement.
      9 matched pairs from 15 treated and 9 control schools.
    
      6 of 15 programme schools were discarded: SCH05, SCH12, SCH14, SCH15,
      SCH19, SCH21. Their mean baseline literacy is 60.7% against 55.8% for the
      matched treated schools; no control school scored high enough to match
      them.
    
      Baseline imbalance   +3.35 points before matching, +1.41 after.
      Estimate             -0.71 points, SE 1.22, on 9 pairs.
      Unmatched estimate   -0.96 points, 95% CI -3.48 to +1.56.
    
      The matched estimate describes schools with baseline literacy below about
      60%. It does not describe the six highest-performing programme schools,
  22. Diapositive 22 / 25

    Rapportez-le en entier — Exemple (suite)

      which have no comparator in this data.
    
      Matching balances the covariates it was given. It does not address why
      these schools were selected for the programme.
  23. Diapositive 23 / 25

    Rapportez-le en entier

    • La liste nommée des écoles écartées est ce qui rend ceci rapportable — Un lecteur peut vérifier si les six parties sont…
    Notes du présentateur
    La liste nommée des écoles écartées est ce qui rend ceci rapportable. Un lecteur peut vérifier si les six parties sont les six qui intéressent le plus le programme, et aucune statistique de résumé ne le lui dira.
  24. Diapositive 24 / 25

    La suite

    • L'appariement et les différences de différences bâtissent tous deux un groupe de comparaison à partir d'unités qui n'ont pas été affectées par une règle.
    Notes du présentateur
    L'appariement et les différences de différences bâtissent tous deux un groupe de comparaison à partir d'unités qui n'ont pas été affectées par une règle. La leçon suivante prend le cas inverse — un programme où une règle a tout décidé, nettement, à un nombre — et constate que deux des trois choses qu'exige un tel protocole sont déjà dans les données.
  25. Diapositive 25 / 25

    La suite

    Lire la leçon complète, avec le code exécutable Retour à la leçon