Tout calculer, et tout vérifier, en Python
Exercice de TD · niveau 3 (difficile) · mathématiques complémentaires (terminale), chapitre 10 — Statistique à deux variables quantitatives
Énoncé
Tout calculer, et tout vérifier, en Python.
Écrire un programme qui, à partir de deux listes de même longueur, calcule , , la covariance, les coefficients et de la droite des moindres carrés, le coefficient et les résidus — puis vérifie les deux propriétés du cours. L'appliquer à la série de tailles de l'enfant.
Corrigé
- Des fonctions courtes, une par notion. On suit exactement les définitions du cours, sans bibliothèque, pour que chaque ligne soit relisible.
from math import sqrt
def moyenne(v):
return sum(v) / len(v)
def covariance(x, y):
xb, yb = moyenne(x), moyenne(y)
n = len(x)
return sum((x[i] - xb) * (y[i] - yb) for i in range(n)) / n
def variance(v):
vb = moyenne(v)
return sum((t - vb) ** 2 for t in v) / len(v)
def ajustement(x, y):
a = covariance(x, y) / variance(x)
b = moyenne(y) - a * moyenne(x)
return a, b
def correlation(x, y):
return covariance(x, y) / sqrt(variance(x) * variance(y))
- Les deux contrôles, écrits comme des contrôles. Un
assertne coûte rien et interdit de publier un résultat faux.
def bilan(x, y):
a, b = ajustement(x, y)
residus = [y[i] - (a * x[i] + b) for i in range(len(x))]
# Controle 1 : la droite passe par le point moyen.
assert abs(a * moyenne(x) + b - moyenne(y)) < 1e-9
# Controle 2 : la somme des residus est nulle.
assert abs(sum(residus)) < 1e-9
return a, b, correlation(x, y), residus
age = [2, 4, 6, 8, 10]
taille = [88, 103, 116, 129, 139]
a, b, r, e = bilan(age, taille)
print(round(a, 4), round(b, 4)) # 6.4 76.6
print(round(r, 4)) # 0.9977
print([round(t, 4) for t in e]) # [-1.4, 0.8, 1.0, 1.2, -1.6]
- Lecture. Le programme retrouve exactement les valeurs calculées à la main : , , et des résidus de somme nulle. Les deux
assertpassent — s'ils échouaient, ce serait le signe d'une liste mal saisie ou de deux listes de longueurs différentes.
Le même travail se fait en deux lignes avec numpy.polyfit et numpy.corrcoef ; écrire les fonctions une fois soi-même reste le meilleur moyen de savoir ce que ces deux lignes calculent.
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.