Tests non paramétriques

Vérification d'hypothèses en Python

James Chapman

Curriculum Manager, DataCamp

Tests paramétriques

  • Les tests z, t et l'ANOVA sont tous des tests paramétriques
  • Supposent une distribution normale
  • Exigent des tailles d'échantillon assez grandes
Vérification d'hypothèses en Python

Petit ensemble sur le vote républicain

print(repub_votes_small)
            state      county  repub_percent_08  repub_percent_12
80          Texas   Red River         68.507522         69.944817
84          Texas      Walker         60.707197         64.971903
33       Kentucky      Powell         57.059533         61.727293
81          Texas  Schleicher         74.386503         77.384464
93  West Virginia      Morgan         60.857614         64.068711
Vérification d'hypothèses en Python

Résultats avec pingouin.ttest()

  • 5 paires ne suffisent pas pour satisfaire la condition de taille d'échantillon du test t apparié :
  • Au moins 30 paires d'observations dans les échantillons.
alpha = 0.01

import pingouin pingouin.ttest(x=repub_votes_potus_08_12_small['repub_percent_08'], y=repub_votes_potus_08_12_small['repub_percent_12'], paired=True, alternative="less")
               T  dof alternative     p-val          CI95%   cohen-d    BF10     power
T-test -5.875753    4        less  0.002096  [-inf, -2.11]  0.500068  26.468  0.239034
Vérification d'hypothèses en Python

Tests non paramétriques

  • Les tests non paramétriques évitent les hypothèses et conditions des tests paramétriques
  • Plusieurs tests non paramétriques utilisent les rangs des données
x = [1, 15, 3, 10, 6]
from scipy.stats import rankdata
rankdata(x)
array([1., 5., 2., 4., 3.])
Vérification d'hypothèses en Python

Tests non paramétriques

  • Les tests non paramétriques sont plus fiables que les tests paramétriques pour les petits échantillons et quand les données ne sont pas normales
Vérification d'hypothèses en Python

Tests non paramétriques

  • Les tests non paramétriques sont plus fiables que les tests paramétriques pour les petits échantillons et quand les données ne sont pas normales

 

Test des rangs signés de Wilcoxon
  • Mis au point par Frank Wilcoxon en 1945
  • L'une des premières procédures non paramétriques
Vérification d'hypothèses en Python

Test des rangs signés de Wilcoxon (étape 1)

  • Porte sur les différences absolues classées entre les paires de données
repub_votes_small['diff'] = repub_votes_small['repub_percent_08'] -
                            repub_votes_small['repub_percent_12']
print(repub_votes_small)
            state      county  repub_percent_08  repub_percent_12      diff
80          Texas   Red River         68.507522         69.944817 -1.437295
84          Texas      Walker         60.707197         64.971903 -4.264705
33       Kentucky      Powell         57.059533         61.727293 -4.667760
81          Texas  Schleicher         74.386503         77.384464 -2.997961
93  West Virginia      Morgan         60.857614         64.068711 -3.211097
Vérification d'hypothèses en Python

Test des rangs signés de Wilcoxon (étape 2)

  • Porte sur les différences absolues classées entre les paires de données
repub_votes_small['abs_diff'] = repub_votes_small['diff'].abs()
print(repub_votes_small)
            state      county  repub_percent_08  repub_percent_12      diff  abs_diff
80          Texas   Red River         68.507522         69.944817 -1.437295  1.437295
84          Texas      Walker         60.707197         64.971903 -4.264705  4.264705
33       Kentucky      Powell         57.059533         61.727293 -4.667760  4.667760
81          Texas  Schleicher         74.386503         77.384464 -2.997961  2.997961
93  West Virginia      Morgan         60.857614         64.068711 -3.211097  3.211097
Vérification d'hypothèses en Python

Test des rangs signés de Wilcoxon (étape 3)

  • Porte sur les différences absolues classées entre les paires de données
from scipy.stats import rankdata
repub_votes_small['rank_abs_diff'] = rankdata(repub_votes_small['abs_diff'])
print(repub_votes_small)
            state      county  repub_percent_08  repub_percent_12      diff  abs_diff  rank_abs_diff
80          Texas   Red River         68.507522         69.944817 -1.437295  1.437295            1.0
84          Texas      Walker         60.707197         64.971903 -4.264705  4.264705            4.0
33       Kentucky      Powell         57.059533         61.727293 -4.667760  4.667760            5.0
81          Texas  Schleicher         74.386503         77.384464 -2.997961  2.997961            2.0
93  West Virginia      Morgan         60.857614         64.068711 -3.211097  3.211097            3.0
Vérification d'hypothèses en Python

Test des rangs signés de Wilcoxon (étape 4)

            state      county  repub_percent_08  repub_percent_12      diff  abs_diff  rank_abs_diff
80          Texas   Red River         68.507522         69.944817 -1.437295  1.437295            1.0
84          Texas      Walker         60.707197         64.971903 -4.264705  4.264705            4.0
33       Kentucky      Powell         57.059533         61.727293 -4.667760  4.667760            5.0
81          Texas  Schleicher         74.386503         77.384464 -2.997961  2.997961            2.0
93  West Virginia      Morgan         60.857614         64.068711 -3.211097  3.211097            3.0
  • Additionner les rangs des différences négatives et positives
T_minus = 1 + 4 + 5 + 2 + 3

T_plus = 0
W = np.min([T_minus, T_plus])
0
Vérification d'hypothèses en Python

Mise en œuvre avec pingouin.wilcoxon()

alpha = 0.01
pingouin.wilcoxon(x=repub_votes_potus_08_12_small['repub_percent_08'],
                  y=repub_votes_potus_08_12_small['repub_percent_12'],
                  alternative="less")
          W-val alternative    p-val  RBC  CLES
Wilcoxon    0.0        less  0.03125 -1.0  0.72

Ne pas rejeter $H_0$, puisque 0.03125 > 0.01

Vérification d'hypothèses en Python

Passons à la pratique !

Vérification d'hypothèses en Python

Preparing Video For Download...