Stratifier, et voir la pente s'inverser
Exercice de TD · niveau 3 (difficile) · mathématiques complémentaires (terminale), chapitre 19 — Thème 9 — Corrélation et causalité
Énoncé
Stratifier, et voir la pente s'inverser.
On reprend les douze groupes de patients de la section sec:t9strat : dose en mg, mortalité en %, et trois niveaux de gravité de quatre groupes chacun.
- Ajuster en sur les douze points. Vérifier les deux contrôles du chapitre 10 et calculer .
- Ajuster en dans chaque strate. Vérifier de même.
- Que valent les résidus de l'ajustement global ? Que trahissent-ils ?
- Quelle pente répond à la question « faut-il augmenter la dose ? »
Corrigé
- Ajustement global. On a
puis, par le calcul détaillé en Python ci-dessous,
D'où
Contrôles : , la droite passe par ; et la somme des résidus, calculée à la question 3, est nulle. Enfin
Voilà un ajustement irréprochable, avec une pente franchement positive.
- Ajustement par strate. Prenons les cas légers : , , et
d'où et . Les valeurs prédites sont ; ; ; , donc les résidus valent ; ; ; , de somme nulle.
Les deux autres strates donnent exactement la même pente :
avec des résidus ; ; ; puis ; ; ; , tous de somme nulle, et des droites qui passent par et .
- Les résidus globaux. Ils valent, dans l'ordre des douze groupes,
Leur somme est nulle, comme il se doit — mais ils ne sont pas répartis au hasard : à l'intérieur de chaque strate ils décroissent régulièrement, puis remontent brutalement au passage à la strate suivante. Ce motif en dents de scie est la signature d'une variable oubliée. Le coefficient ne l'a pas vu : il mesure la dispersion, pas la structure.
- La pente qui répond. Celle des strates, . La question « faut-il augmenter la dose ? » est une question d'intervention : elle porte sur un patient donné, dont la gravité est ce qu'elle est. C'est donc à gravité fixée qu'il faut comparer — et à gravité fixée, augmenter la dose fait baisser la mortalité de point par milligramme. La pente globale répond, elle, à la question d'observation : « si l'on m'annonce une dose de mg, que dois-je craindre ? » — et la réponse, le pire, est juste : cette dose signale un cas grave.
def moyenne(v):
return sum(v) / len(v)
def ajustement(x, y):
xb, yb = moyenne(x), moyenne(y)
sxy = sum((x[i] - xb) * (y[i] - yb) for i in range(len(x)))
sxx = sum((t - xb) ** 2 for t in x)
a = sxy / sxx
b = yb - a * xb
residus = [y[i] - (a * x[i] + b) for i in range(len(x))]
assert abs(a * xb + b - yb) < 1e-9 # passe par le point moyen
assert abs(sum(residus)) < 1e-9 # residus de somme nulle
return a, b, residus
strates = [([10, 12, 14, 16], [8.0, 6.9, 6.2, 4.9]),
([20, 22, 24, 26], [19.9, 19.3, 17.7, 17.1]),
([30, 32, 34, 36], [32.2, 30.8, 29.8, 29.2])]
for x, y in strates:
a, b, e = ajustement(x, y)
print(round(a, 6), round(b, 4)) # -0.5 13.0 / -0.5 30.0 / -0.5 47.0
xg = [t for x, y in strates for t in x]
yg = [t for x, y in strates for t in y]
a, b, e = ajustement(xg, yg)
print(round(a, 6), round(b, 4)) # 1.081395 -6.3721
print([round(t, 2) for t in e]) # motif decroissant dans chaque strateLes autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.