Adloun

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.

Corrigé

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.

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 .

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.


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 strate

Les 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.