Décrivez un échantillon et passez à la population
Un opérateur de trottinettes électriques en libre-service annonce « 30 km d’autonomie ». Vous relevez l’autonomie réelle de 12 trottinettes dans les rues de Rennes et vous obtenez 12 nombres, tous différents. Que dire de ces 12 nombres ? Et surtout, que dire des milliers de trottinettes que vous n’avez pas mesurées ?
Ce chapitre répond à la première question (décrire) et pose le cadre de la seconde (inférer), qui occupe tout le reste du cours. Nous suivrons ces 12 trottinettes du début à la fin.
Population, échantillon, variable : le vocabulaire
Section intitulée « Population, échantillon, variable : le vocabulaire »La statistique a son vocabulaire, et il vaut la peine de le fixer tout de suite.
- La population est l’ensemble que l’on veut étudier : ici, toutes les trottinettes de l’opérateur.
- Un individu (ou unité statistique) est un élément de cette population : une trottinette.
- Un échantillon est la partie de la population réellement observée : nos 12 trottinettes. Sa taille se note .
- Une variable est une caractéristique mesurée sur chaque individu : l’autonomie, la marque de la batterie, le nombre de pannes.
Les variables n’ont pas toutes la même nature, et c’est elle qui décide des outils utilisables.
| Nature | Sous-type | Exemple chez l’opérateur | Résumés possibles |
|---|---|---|---|
| Quantitative | continue | autonomie (km) | moyenne, variance, quantiles |
| Quantitative | discrète | nombre de pannes dans l’année | moyenne, variance, diagramme en bâtons |
| Qualitative | nominale | marque de la batterie | effectifs, proportions, mode |
| Qualitative | ordinale | état (neuf, correct, usé) | effectifs, médiane de rang |
Résumer une variable quantitative par des nombres
Section intitulée « Résumer une variable quantitative par des nombres »Voici les autonomies relevées, en kilomètres :
| 31,2 | 28,5 | 33,0 | 29,8 | 35,1 | 27,4 | 30,6 | 32,3 | 26,9 | 30,0 | 34,2 | 29,0 |
|---|
Notons ces valeurs, avec .
La position : moyenne et médiane
Section intitulée « La position : moyenne et médiane »La moyenne empirique est
où se lit « x barre », est la taille de l’échantillon et la -ème observation. Ici, la somme vaut 368, donc km.
La médiane est la valeur qui coupe l’échantillon trié en deux moitiés. Pour la calculer, on range les valeurs dans l’ordre croissant. On obtient la statistique d’ordre , où est le minimum et le maximum :
Avec 12 valeurs, la médiane est la moyenne des 6e et 7e : km.
Pourquoi deux indicateurs de position ? Parce qu’ils ne réagissent pas de la même façon aux valeurs extrêmes. Imaginez qu’une 13e trottinette, à la batterie défectueuse, ne tienne que 12 km. La moyenne tombe à km, alors que la médiane passe seulement à 30,0 km. On dit que la médiane est robuste.
La dispersion : variance et écart-type
Section intitulée « La dispersion : variance et écart-type »Deux flottes peuvent avoir la même autonomie moyenne et des comportements très différents : l’une régulière, l’autre imprévisible. La variance empirique mesure l’écart quadratique moyen à la moyenne :
La seconde écriture (« moyenne des carrés moins carré de la moyenne ») se démontre en développant le carré : c’est la version empirique de l’identité que vous connaissez du cours de probabilités.
On utilise aussi très souvent la variance corrigée, qui divise par au lieu de :
Pourquoi cette correction ? Vous le démontrerez au chapitre suivant : sous-estime systématiquement la variance de la population. Pour l’instant, retenez que c’est que calculent var() en R et statistics.variance() en Python.
L’écart-type est la racine carrée de la variance. Il s’exprime dans la même unité que les données, ce qui le rend lisible.
Les quantiles et l’écart interquartile
Section intitulée « Les quantiles et l’écart interquartile »Le quartile laisse 25 % des valeurs en dessous de lui, en laisse 75 % ; la médiane est . L’écart interquartile mesure la dispersion de la moitié centrale des données, de façon robuste.
Il existe plusieurs conventions de calcul des quantiles sur un petit échantillon. Avec celle de R par défaut (et de NumPy), on trouve et , soit un écart interquartile de 3,6 km. Sur de gros échantillons, les conventions donnent des valeurs quasi identiques.
Résumer par des graphiques
Section intitulée « Résumer par des graphiques »Les nombres ne disent pas tout. Trois graphiques couvrent l’essentiel des besoins.
- L’histogramme découpe l’axe en classes et montre la forme de la distribution : symétrique, étalée à droite, bimodale.
- La boîte à moustaches (boxplot) résume la médiane, les quartiles et les valeurs atypiques. La boîte va de à ; les moustaches s’arrêtent à la dernière observation située à moins de écart interquartile de la boîte ; les points au-delà sont signalés un par un. Pour nos trottinettes, les bornes sont et : aucune valeur atypique. La trottinette à 12 km, elle, serait isolée.
- Le diagramme en bâtons représente les effectifs d’une variable qualitative ou discrète.
Pour comparer une variable quantitative entre groupes (l’autonomie selon la marque de batterie), on place les boîtes à moustaches côte à côte. C’est l’outil de base du dernier chapitre du cours, sur l’analyse de la variance.
autonomie <- c(31.2, 28.5, 33.0, 29.8, 35.1, 27.4, 30.6, 32.3, 26.9, 30.0, 34.2, 29.0)summary(autonomie) # min, quartiles, médiane, moyenne, maxvar(autonomie) # variance corrigée (division par n - 1)sd(autonomie) # écart-type corrigéboxplot(autonomie, horizontal = TRUE, main = "Autonomie (km)")import numpy as np
autonomie = np.array([31.2, 28.5, 33.0, 29.8, 35.1, 27.4, 30.6, 32.3, 26.9, 30.0, 34.2, 29.0])print(autonomie.mean(), np.median(autonomie))print(autonomie.var(ddof=0), autonomie.var(ddof=1)) # s_n^2 puis variance corrigéeprint(np.quantile(autonomie, [0.25, 0.75])) # même convention que R par défautDe la description à l’inférence
Section intitulée « De la description à l’inférence »Jusqu’ici, tout ce que nous avons dit concerne nos 12 trottinettes. C’est la statistique descriptive. Mais l’opérateur ne s’intéresse pas à ces 12-là : il veut connaître l’autonomie moyenne de toute sa flotte, que nous noterons . C’est le rôle de la statistique inférentielle : remonter de l’échantillon à la population, avec une marge d’erreur maîtrisée.
Le changement de point de vue est le suivant. Avant de faire les mesures, on ne sait pas quelles trottinettes seront tirées : l’autonomie de la -ème est une variable aléatoire . On suppose les indépendantes et de même loi (on dit i.i.d.), la loi de la population. Ce -uplet s’appelle un -échantillon. Les nombres relevés, , en sont une réalisation.
Par convention, les majuscules désignent les variables aléatoires et les minuscules leurs valeurs observées. Ainsi :
- est une variable aléatoire, qui changerait si l’on tirait d’autres trottinettes ;
- est le nombre obtenu sur notre échantillon.
Toute fonction de l’échantillon, comme , ou , s’appelle une statistique. Et puisque c’est une variable aléatoire, elle a une loi, une espérance, une variance. Toute la suite du cours repose sur cette idée : étudier la loi d’une statistique pour savoir à quel point on peut lui faire confiance.
Le cours suit alors trois grandes questions :
- Estimer : quelle valeur proposer pour , et comment juger de sa qualité ? (chapitres 2 à 4)
- Tester : les données contredisent-elles l’affirmation « km » ? (chapitres 5 à 7)
- Modéliser : comment l’autonomie dépend-elle de la température ou de la marque ? (chapitres 8 à 10)
En résumé
Section intitulée « En résumé »- Population, individu, échantillon de taille et variable : la nature de la variable (quantitative ou qualitative) détermine les outils.
- La moyenne est sensible aux valeurs extrêmes, la médiane est robuste.
- La variance empirique divise par , la variance corrigée par ; les logiciels calculent en général la seconde.
- Les quartiles, l’écart interquartile et la boîte à moustaches résument la distribution et signalent les valeurs atypiques.
- En inférence, les observations sont la réalisation d’un -échantillon i.i.d. ; toute fonction de l’échantillon est une statistique, donc une variable aléatoire.
Exercices
Section intitulée « Exercices »Exercice · Identifier la nature des variables
facileUn fichier décrit les étudiants d’une promotion : numéro d’étudiant, âge en années, moyenne générale sur 20, mention au baccalauréat (sans, assez bien, bien, très bien), département d’origine, nombre de redoublements. Donnez la nature de chaque variable.
Voir la solution
- Numéro d’étudiant : qualitative nominale. C’est un identifiant, pas une quantité, même s’il s’écrit avec des chiffres.
- Âge : quantitative discrète si on le compte en années entières (continue si on le mesure précisément).
- Moyenne générale : quantitative continue.
- Mention : qualitative ordinale, les modalités ont un ordre naturel.
- Département d’origine : qualitative nominale (le code 35 n’est pas « plus grand » que le code 29).
- Nombre de redoublements : quantitative discrète.
En code
import pandas as pd
etudiants = pd.DataFrame({ "numero": ["21004", "21017", "21123"], # identifiant : texte, pas un nombre "age": [19, 20, 22], # quantitative discrète "moyenne": [13.5, 11.2, 15.8], # quantitative continue "mention": ["bien", "sans", "très bien"], "departement": ["35", "29", "56"], # code, donc qualitatif "redoublements": [0, 1, 0], # quantitative discrète})etudiants["mention"] = pd.Categorical( etudiants["mention"], ordered=True, categories=["sans", "assez bien", "bien", "très bien"]) # ordinaleetudiants["departement"] = etudiants["departement"].astype("category") # nominaleprint(etudiants.dtypes)# numero: str, age: int64, moyenne: float64, mention: category,# departement: category, redoublements: int64print(etudiants["mention"].max()) # très bien (l'ordre a un sens)etudiants <- data.frame( numero = c("21004", "21017", "21123"), # identifiant : texte age = c(19L, 20L, 22L), # quantitative discrète moyenne = c(13.5, 11.2, 15.8), # quantitative continue mention = factor(c("bien", "sans", "très bien"), ordered = TRUE, levels = c("sans", "assez bien", "bien", "très bien")), departement = as.factor(c("35", "29", "56")), # nominale redoublements = c(0L, 1L, 0L) # quantitative discrète)str(etudiants)## numero: chr, age: int, moyenne: num, mention: Ord.factor,## departement: Factor, redoublements: intmax(etudiants$mention) # très bien (l'ordre a un sens)Exercice · Calculer des résumés à la main
moyenOn relève le temps d’attente (en minutes) d’un bus sur 6 jours : 4, 7, 2, 9, 5, 3.
- Calculez la moyenne et la médiane.
- Calculez avec les deux formules du cours, puis .
Voir la solution
- La somme vaut 30, donc minutes. Triées, les valeurs sont 2, 3, 4, 5, 7, 9 : la médiane est minutes.
- Les écarts à la moyenne sont , dont les carrés somment à . Donc . Avec l’autre formule : la somme des carrés vaut , d’où . On retrouve bien la même valeur. Enfin .
En code
import numpy as np
attente = np.array([4, 7, 2, 9, 5, 3])n = len(attente)print(attente.mean(), np.median(attente)) # 5.0 4.5print(np.sum((attente - attente.mean())**2) / n) # 5.667 (écarts à la moyenne)print(np.mean(attente**2) - attente.mean()**2) # 5.667 (moyenne des carrés - carré de la moyenne)print(attente.var(ddof=0), attente.var(ddof=1)) # 5.667 6.8attente <- c(4, 7, 2, 9, 5, 3)n <- length(attente)mean(attente); median(attente) # 5 4.5sum((attente - mean(attente))^2) / n # 5.667 (écarts à la moyenne)mean(attente^2) - mean(attente)^2 # 5.667 (moyenne des carrés - carré de la moyenne)var(attente) # 6.8 (variance corrigée)Exercice · Moyenne ou médiane ?
moyenUne start-up rennaise de 10 salariés publie « salaire moyen : 4 100 € net par mois ». Neuf salariés gagnent entre 2 000 et 2 600 €, le fondateur se verse 22 000 €. Quel indicateur décrit mieux le salaire d’un salarié typique ? Que vaut approximativement la moyenne des neuf autres ?
Voir la solution
La moyenne est tirée vers le haut par une seule valeur extrême : elle ne décrit personne. La médiane, qui se situe entre 2 000 et 2 600 €, décrit bien mieux le salarié typique, car elle est robuste.
La masse salariale totale vaut €. Sans le fondateur, il reste € pour neuf salariés, soit une moyenne d’environ €. C’est cohérent avec la fourchette annoncée, et bien loin des 4 100 € affichés.
En code
import numpy as np
masse = 10 * 4100 # masse salariale totaleprint((masse - 22000) / 9) # 2111.1 : moyenne des neuf salariés
# Neuf salaires fictifs compatibles avec l'énoncé, plus le fondateursalaires = np.array([2000, 2000, 2050, 2100, 2100, 2150, 2150, 2200, 2250, 22000])print(salaires.mean(), np.median(salaires)) # 4100.0 2125.0masse <- 10 * 4100 # masse salariale totale(masse - 22000) / 9 # 2111.1 : moyenne des neuf salariés
# Neuf salaires fictifs compatibles avec l'énoncé, plus le fondateursalaires <- c(2000, 2000, 2050, 2100, 2100, 2150, 2150, 2200, 2250, 22000)mean(salaires); median(salaires) # 4100 2125