SciPy
Objectifs de la section
2-2 Bibliothèques du langage qui permet de manipuler des fonctions statistiques.
Temps requis
10 minutes
La librairie SciPy (pour Scientific Python) est une boîte à outils scientifique très puissante construite sur NumPy. Elle offre des fonctions avancées pour les statistiques, l’optimisation, l’algèbre linéaire, les intégrales, la transformation de Fourier, etc.
SciPy comporte plusieurs modules, dont un dédié aux statistiques qui présente des fonctions liées aux statistiques descriptives, aux tests d’hypothèses, à la corrélation, et à l’analyse de distribution.
Importer SciPy
Fonctions de statistiques descriptives de scipy.stats
Voici un aperçu des fonctions fréquemment utilisées pour l’analyse statistique.
Fonction | Description | Exemple |
---|---|---|
mode |
Mode (valeur la plus fréquente) | stats.mode(donnees) |
variation |
Coefficient de variation (rapport entre l'écart-type et la moyenne) | `stats.variation(donnees) |
median |
Médiane | stats.median(donnees) |
iqr |
Écart interquartile (Q3 - Q1) | stats.iqr(donnees) |
describe |
Résumé statistique complet d’un ensemble de données | stats.describe(donnees) |
Philosophie de SciPy
Les développeurs de SciPy évitent de refaire des fonctions qui sont disponibles dans d'autres paquets dont Pandas et NumPy. Par exemple, il n'y a pas de fonction pour calculer la moyenne dans SciPy, car Pandas et NumPy en définissent déjà une. Donc si vous ne trouvez pas une fonction dans SciPy pensez à regarder dans d'autres paquets.
Exemple — Analyse descriptive | |
---|---|
Tests d'hypothèses
On trouve souvent dans une étude de statistiques des tests d'hypothèses servant à mesurer la significativité statistique d'un phénomène : autrement dit la probabilité que les conclusions observées sur l'échantillon soient dues à un échantillonnage particulier et qu'il soit peu vraissemblable d'inférer les conclusions à la population. On appelle cette probabilité (la probabilité que l'observation ait été obtenue en raison d'un échantillonnage particulier) p-value. La plupart des fonctions de tests d'yhypothèse présentent la p-value comme outil de décision.
Test d'hypothèse d'une moyenne et intervalle de confiance
La fonction pour effectuer un test sur une moyenne est ttest_1samp
. Ce test utilise toujours la loi de Student (jamais l'approximation par la loi normale), donc il est valide pour n'importe quelle échantillon.
Paramètre | Valeur par défaut | Symbole statistique | Fonctionnement |
---|---|---|---|
a | Aucune | Permet de calculer \(\bar{x}\) | Une liste ou une série qui contient les observations de l'échantillon |
popmean | Aucune | \(\mu_0\) | La moyenne de la population (\(H_0 : \mu = \mu_0\)) |
alternative | two-sided | L'hypothèse alternative (\(H_1\)) | two-sided pour \(H_1 : \mu \neq \mu_0\), less pour \(H_1 : \mu < \mu_0\) et greater pour \(H_1 : \mu > \mu_0\) |
Intervalle de confiance pour une moyenne
Pour générer l'intervalle de confiance pour la moyenne, il faut appeler la méthode confidence_interval
sur le résultat du T-test. Cette méthode accepte un paramètre : le niveau de confiance auquel calculer l'intervalle, qui est de 0.95 par défaut (équivalent à 95%)
Test d'hypothèse pour deux moyennes
Pour le test de deux moyennes, il existe deux fonctions dans SciPy :
ttest_ind
pour tester deux échantillons indépendants;ttest_rel
pour tester deux échantillons dépendants.
Les deux fonctions ont les même paramètres, c'est simplement la façon dont le calcul est réalisé qui diffère.
Paramètre | Valeur par défaut | Symbole statistique | Fonctionnement |
---|---|---|---|
a | Aucune | Permet de calculer \(\bar{x_1}\) | Une liste ou une série qui contient les observations de l'échantillon 1 |
b | Aucune | Permet de calculer \(\bar{x_2}\) | Une liste ou une série qui contient les observations de l'échantillon 2 |
alternative | two-sided | L'hypothèse alternative (\(H_1\)) | two-sided pour \(H_1 : \mu_1 \neq \mu_2\), less pour \(H_1 : \mu_1 < \mu_2\) et greater pour \(H_1 : \mu_1 > \mu_2\) |
Tout comme pour un échantillon, on peut calculer une intervalle de confiance sur le résultat des fonctions. Cette intervalle est calculée pour la différence entre les échantillons.
Autres tests d'hypothèses
Plusieurs autres tests (comme ceux pour les variances) sont définis dans SciPy Référez-vous à la documentation pour les utiliser. Ils ont tous un mode de fonctionnement similaire.
Mesures et tests d'association
On peut quantifier l'association entre deux variables de plusieurs façons. On en présente deux ici :
- Coefficient de corrélation linéaire (Pearson) : utilisé pour quantifier un lien linéaire entre deux variables continues
- Test du \(\chi^2\) : utilisé pour tester la dépendances entre deux variables discrètes
Coefficient de corrélation linéaire
La corrélation entre deux variables varie de -1 à 1. Une corrélation près -1 ou de 1 indique une association linéaire forte entre les variables, alors qu'une corrélation près de 0 indique une absence d'association (ou une association faible) entre les variables. Une valeur positive indique que les deux échantillons varient proportionnellement (si l'une des valeurs augmentent pour un échantillon, elle augmentera proportionnellement dans l'autre), tandis qu'une valeur négative de corréaltion indique que les échantillons varient inversement (si l'une des valeurs augmentent pour un échantillon, elle diminuera proportionnellement dans l'autre), La fonction pour faire un test de corrélation est stats.pearsonr
.
Paramètre | Valeur par défaut | Symbole statistique | Fonctionnement |
---|---|---|---|
x | Aucune | Permet de calculer \(\bar{x_1}\) | Une liste ou une série qui contient les observations de l'échantillon 1 |
y | Aucune | Permet de calculer \(\bar{x_2}\) | Une liste ou une série qui contient les observations de l'échantillon 2 |
alternative | two-sided | L'hypothèse alternative (\(H_1\)) | two-sided pour \(H_1 : \rho \neq 0\), less pour $H_1 : \rho < 0 et greater pour \(H_1 : \rho > 0\) |
L'objet retourné par cette fonction contient deux attributs :
statistic
: le coefficient de corrélation entre les échantillonspvalue
: la p-value du test de corrélation
Test d'association du X2
Le test d'association du \(\chi^2\) permet de calculer l'association entre deux variables discrètes en comparant leur distribution observée à l'hypothèse de distribution indépendante. Pour réaliser ce test, il faut d'abord former un tableau de contingence (appelé crosstable) avec les données. Pour ce faire, la fonction crosstab
de Pandas peut être utilisée.
La fonction crosstab
Il existe aussi une fonction nommée crosstab dans SciPy, mais son fonctionnement est différent de celui présenté ici. Nous choisissons d'utiliser celle de Pandas, car sa forme est plus simple à partir d'un DataFrame
.
Attention, selon la façon dont l'importation se fait, vous pouvez causer des collisions de noms (deux fonctions qui portent le même nom existent dans le même espace de code... Python n'aime pas cela...)
La fonction crosstab
forme un tableau de contigence à partir de deux séries (soit deux colonnes d'un DataFrame
). Ensuite la fonction chi2_contingency
de SciPy accepte un seul paramètre : le tableau de contingence, et retourne un objet qui comporte les attributs suivants :
statistic
: la statistique du \(\chi^2\) du test;pvalue
: la p-value obtenue pour le test;dof
: le nombre de degrés de liberté avec lequel la statistique est évaluée. Correspond à \((\text{nombre de lignes} - 1) \times (\text{nombre de colonnes} - 1)\);expected_freq
: un tableau de contigence avec les fréquences théoriques (sous l'hypothèse d'indépendance).
Régression linéaire
La régression linéaire permet d'exprimer, sous forme d'une équation affine (\(y = b_1x + b_0\)), le lien entre deux variables. La régression fournit également une équation pour prédire, à partir d'une variable, une autre variable. Il existe deux indicateurs pour évaluer la qualité de la régression :
- Le coefficient de détermination \(r^2\);
- Le test d'hypothèse sur la significativité de la pente (\(H_0 : \beta_1 = 0\)).
La fonction linregress
calcule la régression à partir de deux séries de données
Paramètre | Valeur par défaut | Symbole statistique | Fonctionnement |
---|---|---|---|
x | Aucune | Permet de calculer \(\bar{x_1}\) | Une liste ou une série qui contient les observations de la variable indépendante |
y | Aucune | Permet de calculer \(\bar{x_2}\) | Une liste ou une série qui contient les observations de la variable dépendante |
alternative | two-sided | L'hypothèse alternative (\(H_1\)) | two-sided pour \(H_1 : \beta_1 \neq 0\), less pour $H_1 : \beta_1 < 0 et greater pour \(H_1 : \beta_1 > 0\) |
L'objet retourné par la fonction comporte les attributs suivants :
slope
: la pente (\(b_1\)) de l'équation de régression.intercept
: l'ordonnée à l'origine (\(b_0\)) de l'équation de régression.rvalue
: le coefficient de corrélation de Pearson entre les deux variables. L'élever au carré pour avoir le coefficient de détermination.pvalue
: la p-value du test de significativité de la pente. Une pente non significative mène à une régression éronnée et qui ne devrait pas être utilisée.
Pour aller plus loin
La documentation complète de SciPy est disponible en ligne :
https://docs.scipy.org/doc/scipy/