CommencerCommencez gratuitement

Problème des comparaisons multiples

Le problème des comparaisons multiples survient lorsqu’un·e chercheur·se teste à répétition différentes variables/échantillons les uns contre les autres pour en vérifier la significativité. Par simple hasard, on s’attend à trouver occasionnellement un résultat statistiquement significatif.

Dans cet exercice, vous allez travailler sur des données de salaires des employé·e·s de la ville d’Austin (Texas). Vous comparerez leurs salaires à des données générées aléatoirement. Vous verrez à quelle fréquence ces données aléatoires sont « significatives » pour expliquer les salaires des employé·e·s. Une telle « significativité » serait évidemment fallacieuse, car des nombres aléatoires n’aident pas vraiment à expliquer quoi que ce soit !

Un DataFrame des salaires des agents de police (police_salaries_df) a été chargé pour vous, de même que les packages pandas sous pd, NumPy sous np, Matplotlib sous plt, et stats depuis SciPy.

Cet exercice fait partie du cours

<cours>Fondements de l’inférence en Python</cours>
Voir le cours

Instructions de l’exercice

  • Stockez le nombre de personnes dans l’ensemble de données dans n_rows (chaque ligne correspond à une personne), et initialisez le nombre de résultats significatifs, n_significant, à zéro.
  • Écrivez une boucle for qui s’exécute 1000 fois et génère n_rows nombres aléatoires.
  • Calculez le R de Pearson et la p-valeur associée entre ces nombres générés aléatoirement et les salaires des policiers.
  • Si la p-valeur est significative à 5 %, ajoutez 1 à n_significant avec l’opérateur +=.

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

# Compute number of rows and initialize n_significant
n_rows = ____
n_significant = ____

# For loop which generates n_rows random numbers 1000 times
for i in ____:
  random_nums = np.random.uniform(size=____)
  # Compute correlation between random_nums and police salaries
  r, p_value = stats.____(____, random_nums)
  # If the p-value is significant at 5%, increment n_significant
  if ____ < ____:
    ____ += 1
    
print(n_significant)
Modifier et exécuter le code