cassionAnalyse de données

Retour à la leçonLeçon 7 sur 8Ce que le rapport affirme

r = 0,039, et tout le monde attendait 0,5

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 / 29

    Ce que couvre cette leçon

    • La corrélation qui n'y est pas
    • Un intervalle sur une corrélation
    • La corrélation qui y est et ne dit rien
    • Élevez-la au carré avant de la décrire
    • Pearson, Spearman, et onze mauvaises lignes
    • Corrélés parce qu'autre chose a bougé les deux
    • Et le regroupement de la leçon précédente
    • Écrivez la phrase
    • Rapportez-le en entier
    • La suite
    Notes du présentateur
    La présence et la littératie de fin d'année corrèlent à 0,039 sur 659 élèves — un intervalle de −0,04 à +0,12, ce qui est aussi proche de rien qu'un jeu de données peut l'être. La corrélation que tout le monde suppose présente dans le registre n'y est pas, et le rapporter est le constat.
  2. Diapositive 2 / 29

    La corrélation qui n'y est pas — En Python (suite)

    import pandas as pd
    import numpy as np
    
    assessment = pd.read_csv("learning-assessment-2024.v1.csv")
    attendance = pd.read_csv("school-attendance-2024.v1.csv")
    roster = pd.read_csv("school-roster-2024.v1.csv")
    
    MARKS = {"true": True, "Y": True, "false": False, "N": False}
    marked = attendance[attendance["present"].isin(MARKS)].copy()
    marked["attended"] = marked["present"].map(MARKS)
    rate = marked.groupby("student_id")["attended"].mean().rename("attendance")
    
    endline = (assessment[assessment["assessment_round"] == "endline"]
               .pivot_table(index="student_id", columns="domain", values="raw_score"))
    joined = endline.join(rate, how="inner").join(roster.set_index("student_id"))
    
  3. Diapositive 3 / 29

    La corrélation qui n'y est pas — En Python (suite)

    print(joined[["literacy", "numeracy", "attendance"]].corr().round(3))
  4. Diapositive 4 / 29

    La corrélation qui n'y est pas — En R

    library(dplyr)
    
    joined |> select(literacy, numeracy, attendance) |> cor(use = "complete.obs")
  5. Diapositive 5 / 29

    La corrélation qui n'y est pas

    Pairern
    Présence et littératie de fin d'année0,039659
    Présence et numératie de fin d'année−0,006659
    Littératie et numératie0,849659
  6. Diapositive 6 / 29

    La corrélation qui n'y est pas

    • La présence et la littératie corrèlent à 0,039 — Chaque document de programme éducatif suppose cette relation et la…
    Notes du présentateur
    La présence et la littératie corrèlent à 0,039. Chaque document de programme éducatif suppose cette relation et la plupart en citent un chiffre. Dans ce registre elle est absente. C'est un résultat, et il lui faut un intervalle avant d'en être un.
  7. Diapositive 7 / 29

    Un intervalle sur une corrélation — En Python

    def fisher_ci(r, n, z=1.96):
        zr = np.arctanh(r)
        se = 1 / np.sqrt(n - 3)
        return np.tanh(zr - z * se), np.tanh(zr + z * se)
    
    for label, r, n in [("attendance vs literacy", 0.039, 659),
                        ("literacy vs numeracy", 0.849, 659)]:
        lo, hi = fisher_ci(r, n)
        print(f"{label:24} r = {r:+.3f}  95% CI [{lo:+.3f}, {hi:+.3f}]")
  8. Diapositive 8 / 29

    Un intervalle sur une corrélation — En R

    cor.test(joined$attendance, joined$literacy)
  9. Diapositive 9 / 29

    Un intervalle sur une corrélation

    • r = 0,039, IC à 95 % −0,037 à +0,115 — L'intervalle contient zéro et toute valeur qu'il contient est négligeable ; ce…
    • Une corrélation sans intervalle est le même défaut qu'une proportion sans le sien — et cor.test le donne gratuitement
    Notes du présentateur
    r = 0,039, IC à 95 % −0,037 à +0,115. L'intervalle contient zéro et toute valeur qu'il contient est négligeable ; ce n'est donc pas un résultat nul par manque de puissance — 659 élèves suffisent à dire que si une relation existe, elle est trop petite pour compter. Comparez le même intervalle sur la seconde paire : r = 0,849, IC 0,826 à 0,869, où l'intervalle entier est grand. Une corrélation sans intervalle est le même défaut qu'une proportion sans le sien, et cor.test le donne gratuitement.
  10. Diapositive 10 / 29

    La corrélation qui y est et ne dit rien

    • C'est un enfant, un jour d'épreuve, deux copies de quarante items — Un enfant malade, à jeun, incapable de lire les…
    • Demandez ce qu'il faudrait pour que la corrélation soit nulle — Ici la réponse est « le même enfant devrait réussir…
    • Une corrélation n'est informative que si son absence était plausible — et c'est un jugement sur le monde plutôt que sur…
    Notes du présentateur
    La littératie et la numératie corrèlent à 0,849, ce qui est le plus grand r de ce cours et le moins intéressant. C'est un enfant, un jour d'épreuve, deux copies de quarante items. Un enfant malade, à jeun, incapable de lire les consignes, ou simplement bon élève, obtient des scores voisins aux deux. La corrélation est une propriété de la mesure, non une découverte sur la littératie et la numératie. Demandez ce qu'il faudrait pour que la corrélation soit nulle. Ici la réponse est « le même enfant devrait réussir indépendamment deux copies passées à une demi-heure d'intervalle », ce que personne ne croit — donc un r élevé ne porte aucune information. Une corrélation n'est informative que si son absence était plausible, et c'est un jugement sur le monde plutôt que sur les données.
  11. Diapositive 11 / 29

    Élevez-la au carré avant de la décrire — En Python

    for label, r in [("attendance vs literacy", 0.039),
                     ("attendance vs literacy, school level", 0.199),
                     ("literacy vs numeracy", 0.849)]:
        print(f"{label:38} r = {r:+.3f}   r-squared = {r**2:.3f}")
  12. Diapositive 12 / 29

    Élevez-la au carré avant de la décrire — En R

    # r^2 is the share of variance, and it is much smaller than r looks.
  13. Diapositive 13 / 29

    Élevez-la au carré avant de la décrire

    Pairerr²Se lit
    Présence et littératie0,0390,002Deux dixièmes de un pour cent
    Présence et littératie, niveau école0,1990,040Quatre pour cent
    Littératie et numératie0,8490,721Soixante-douze pour cent
  14. Diapositive 14 / 29

    Élevez-la au carré avant de la décrire

    • Un r de 0,199 sonne comme une relation et explique quatre pour cent de la variation — Élever au carré est la défense la…
    Notes du présentateur
    Un r de 0,199 sonne comme une relation et explique quatre pour cent de la variation. Élever au carré est la défense la moins chère contre la surlecture d'une corrélation moyenne, et le nombre à mettre dans un rapport est généralement r² plutôt que r.
  15. Diapositive 15 / 29

    Pearson, Spearman, et onze mauvaises lignes — En Python

    wash = pd.read_csv("wash-household-survey-2024.v1.csv")
    pair = wash.dropna(subset=["round_trip_minutes", "litres_per_person_day"])
    clean = pair[pair["litres_per_person_day"] <= 80]
    
    for label, frame in [("all rows", pair), ("11 rows removed", clean)]:
        p = frame["round_trip_minutes"].corr(frame["litres_per_person_day"])
        s = frame["round_trip_minutes"].corr(frame["litres_per_person_day"],
                                             method="spearman")
        print(f"{label:18} n = {len(frame):5}  Pearson {p:+.3f}  Spearman {s:+.3f}")
    Notes du présentateur
    La leçon 1 a trouvé onze ménages dont la consommation totale avait été saisie dans une colonne par personne. Regardez ce que ces onze lignes font à une corrélation.
  16. Diapositive 16 / 29

    Pearson, Spearman, et onze mauvaises lignes — En R

    cor(pair$round_trip_minutes, pair$litres_per_person_day)                    # Pearson
    cor(pair$round_trip_minutes, pair$litres_per_person_day, method = "spearman")
  17. Diapositive 17 / 29

    Pearson, Spearman, et onze mauvaises lignes

    LignesnPearsonSpearman
    Toutes2 403−0,185−0,285
    Onze retirées2 392−0,293−0,287
  18. Diapositive 18 / 29

    Pearson, Spearman, et onze mauvaises lignes

    • Onze lignes sur 2 403 amputent Pearson de plus d'un tiers. Spearman n'a pas bougé
    • Rapportez Spearman quand l'une des deux variables est asymétrique ou porte des valeurs extrêmes que vous n'avez pas…
    • La réponse corrigée est celle qui sert — des trajets plus longs vont avec moins d'eau consommée, r = −0,29 sur 2 392…
    Notes du présentateur
    Onze lignes sur 2 403 amputent Pearson de plus d'un tiers. Spearman n'a pas bougé. Pearson emploie les valeurs, si bien qu'un ménage enregistré à 277 litres par personne tire fort sur le coefficient. Spearman emploie les rangs, si bien qu'une mauvaise valeur qui reste la plus grande ne change rien. Rapportez Spearman quand l'une des deux variables est asymétrique ou porte des valeurs extrêmes que vous n'avez pas résolues, et Pearson quand les deux sont à peu près symétriques et propres. Un grand écart entre les deux est un signal pour aller regarder les extrêmes — le même usage qu'avait la statistique d'asymétrie à la leçon 1. La réponse corrigée est celle qui sert : des trajets plus longs vont avec moins d'eau consommée, r = −0,29 sur 2 392 ménages, ce qui est la relation que le cours EAH prédisait et que le fichier non corrigé sous-estimait.
  19. Diapositive 19 / 29

    Corrélés parce qu'autre chose a bougé les deux — En Python

    prices = pd.read_csv("market-prices-2024.v1.csv")
    wide = prices.pivot_table(index="period", columns="commodity",
                              values="price_htg", aggfunc="mean").sort_index()
    
    print(f"beans and maize, levels:            {wide['beans-black'].corr(wide['maize']):.3f}")
    changes = wide.diff().dropna()
    print(f"beans and maize, month-on-month:    {changes['beans-black'].corr(changes['maize']):.3f}")
  20. Diapositive 20 / 29

    Corrélés parce qu'autre chose a bougé les deux — En R

    cor(wide$`beans-black`, wide$maize)
    cor(diff(wide$`beans-black`), diff(wide$maize))
  21. Diapositive 21 / 29

    Corrélés parce qu'autre chose a bougé les deux

    • Le haricot et le maïs corrèlent à 0,986 en niveaux et à 0,876 en variations mensuelles — Aucun des deux nombres ne…
    • Corréler deux séries dans le temps donnera presque toujours un grand nombre — parce que presque tout suit une tendance
    Notes du présentateur
    Le haricot et le maïs corrèlent à 0,986 en niveaux et à 0,876 en variations mensuelles. Aucun des deux nombres ne signifie que le prix du haricot déplace celui du maïs. Les deux séries portent la même inflation annuelle et le même choc de soudure, et la corrélation mesure le choc. Corréler deux séries dans le temps donnera presque toujours un grand nombre, parce que presque tout suit une tendance. Différencier retire la tendance partagée et ce qui survit est le choc partagé — qui est une cause commune, et toujours pas un lien causal entre les deux produits. Le cours d'épidémiologie faisait ce point avec la confusion. Le coefficient de corrélation n'a aucun moyen de l'exprimer, et c'est pourquoi la phrase en dessous doit le faire.
  22. Diapositive 22 / 29

    Et le regroupement de la leçon précédente — En Python

    by_school = joined.groupby("school_id")[["attendance", "literacy"]].mean()
    print(f"student level  r = {joined['attendance'].corr(joined['literacy']):.3f}  n = {len(joined)}")
    print(f"school level   r = {by_school['attendance'].corr(by_school['literacy']):.3f}  n = {len(by_school)}")
  23. Diapositive 23 / 29

    Et le regroupement de la leçon précédente — En R

    # Same two variables, two units of analysis, two answers.
  24. Diapositive 24 / 29

    Et le regroupement de la leçon précédente

    • 0,039 sur 659 élèves et 0,199 sur 24 écoles — Le chiffre au niveau école a un intervalle de −0,22 à +0,56 sur 24…
    • Dites entre quelles unités porte la corrélation — à chaque fois
    Notes du présentateur
    0,039 sur 659 élèves et 0,199 sur 24 écoles. Le chiffre au niveau école a un intervalle de −0,22 à +0,56 sur 24 points, donc il n'établit rien non plus — mais il est cinq fois plus grand, et un analyste qui aurait agrégé d'abord et rapporté r sans n aurait écrit une autre phrase. Dites entre quelles unités porte la corrélation, à chaque fois. « La présence corrèle avec la littératie à 0,20 » est illisible sans savoir si les lignes sont des enfants ou des écoles.
  25. Diapositive 25 / 29

    Écrivez la phrase

    • Pas ceci — « La présence est corrélée aux résultats de littératie
    • Ni ceci — « Il n'y a aucune relation entre présence et littératie
    • Ceci — « Sur 659 élèves, la présence du trimestre février-avril ne montre aucune association avec la littératie de fin…
    • La troisième phrase est celle à copier — Elle énonce le constat, l'intervalle, ce qu'il signifie pour le programme, et…
    Notes du présentateur
    Le coefficient est un nombre et la phrase en dessous est l'endroit où l'analyse est honnête ou ne l'est pas. Pas ceci : « La présence est corrélée aux résultats de littératie. » Vrai au niveau école, faux au niveau élève, et infalsifiable tel quel. Ni ceci : « Il n'y a aucune relation entre présence et littératie. » Plus fort que ce que portent les données ; l'intervalle atteint +0,12. Ceci : « Sur 659 élèves, la présence du trimestre février-avril ne montre aucune association avec la littératie de fin d'année (r = 0,04, IC à 95 % −0,04 à +0,12). Le registre ne peut pas soutenir l'hypothèse que la présence porte l'apprentissage dans cette cohorte. Notez que la présence varie peu — la moitié centrale des élèves se situe entre 86,7 % et 97,8 % — de sorte que cette analyse détecte mal une relation aux faibles présences, là où on l'attendrait. » La troisième phrase est celle à copier. Elle énonce le constat, l'intervalle, ce qu'il signifie pour le programme, et la raison pour laquelle l'analyse pourrait avoir manqué quelque chose de réel — et elle tient en quatre lignes.
  26. Diapositive 26 / 29

    Rapportez-le en entier — Exemple

    Attendance and learning outcomes, endline 2024
    
      Attendance vs endline literacy   r = 0.04   95% CI -0.04 to +0.12   n = 659
      Attendance vs endline numeracy   r = -0.01  95% CI -0.08 to +0.07   n = 659
    
      Between students within the term. No association at student level.
      Aggregated to the 24 schools, r = 0.20 (95% CI -0.22 to +0.56), which is
      also consistent with no relationship.
    
      Attendance is compressed: the interquartile range is 86.7% to 97.8%, so
      students with the low attendance that a learning effect would show up at
      are rare in this cohort. This is a null result about the range observed,
      not about attendance in general.
  27. Diapositive 27 / 29

    Rapportez-le en entier

    • Le dernier paragraphe est ce qui empêche de surlire le résultat nul — et c'est le pendant de la phrase « sous-puissant,…
    Notes du présentateur
    Le dernier paragraphe est ce qui empêche de surlire le résultat nul, et c'est le pendant de la phrase « sous-puissant, non nul » de la leçon 4. Une corrélation nulle sur une plage étroite ne dit rien de ce qui se passe en dehors.
  28. Diapositive 28 / 29

    La suite

    • La dernière leçon assemble tout cela en une section statistique de rapport — ce qui y entre, ce qui reste en annexe, et ce qu'un relecteur demandera et que ce cours a déjà calculé.
    Notes du présentateur
    La dernière leçon assemble tout cela en une section statistique de rapport — ce qui y entre, ce qui reste en annexe, et ce qu'un relecteur demandera et que ce cours a déjà calculé.
  29. Diapositive 29 / 29

    La suite

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