paint-brush
Tales of the Undead Salmon : Exploration de la correction de Bonferroni dans les tests d'hypothèses multiplespar@igorkhomyanin
2,112 lectures
2,112 lectures

Tales of the Undead Salmon : Exploration de la correction de Bonferroni dans les tests d'hypothèses multiples

par Igor Khomyanin10m2023/05/24
Read on Terminal Reader

Trop long; Pour lire

Cet article explique le problème de tester plusieurs hypothèses sans ajustements appropriés. Il introduit la correction de Bonferroni comme solution pour contrôler les résultats faussement positifs. La simulation démontre l'efficacité de la correction. Comprendre et appliquer des corrections dans les tests d'hypothèses multiples est essentiel pour une analyse des données et une prise de décision précises.
featured image - Tales of the Undead Salmon : Exploration de la correction de Bonferroni dans les tests d'hypothèses multiples
Igor Khomyanin HackerNoon profile picture
0-item


L'inférence statistique est un outil puissant pour tirer des conclusions et faire des prédictions sur des populations basées sur des données d'échantillon. Cela nous permet de prendre des décisions éclairées et de comprendre l'efficacité des différentes options. Une application populaire de l'inférence statistique est le test A/B , où nous comparons deux versions ou traitements pour déterminer celui qui est le plus performant. Cependant, que se passe-t-il lorsque nous introduisons d'autres versions ou traitements dans le test ?


Il peut sembler que l'introduction de versions supplémentaires dans une expérience est l'occasion de prendre des décisions encore meilleures. Malheureusement , s'il n'est pas géré correctement, le nombre accru d'hypothèses vérifiables peut conduire à des résultats trompeurs et à des décisions incorrectes . Ce défi est connu sous le nom de problème des comparaisons multiples .


Dans cet article, j'explique le concept de test d'hypothèses multiples, son écueil potentiel, et je donne une solution possible prise en charge par une simulation Python.


Qu'est-ce qu'un test d'hypothèses multiples ?

Pour comprendre les tests d'hypothèses multiples, commençons par examiner les concepts fondamentaux d'un test A/B simple impliquant deux variantes .


Dans un test A/B, on commence par formuler deux hypothèses concurrentes : l' hypothèse nulle , qui représente l'absence de différence entre les variantes, et l' hypothèse alternative , qui suggère la présence d'une différence.


Ensuite, nous avons défini un niveau de signification noté alpha . Ce seuil détermine la quantité de preuves requises pour rejeter l'hypothèse nulle . Les niveaux de signification couramment utilisés sont 0,05 (5 %) et 0,01 (1 %), indiquant la probabilité d' observer les données si l'hypothèse nulle était vraie.


Après avoir exécuté l'expérience et collecté les données, nous calculons les valeurs de p . La valeur de p représente la probabilité d'obtenir un résultat aussi extrême ou plus extrême que les données observées si l'hypothèse nulle était vraie . Si la valeur de p est inférieure au niveau de signification alpha , nous rejetons l'hypothèse nulle en faveur de l'hypothèse alternative.


Il est important de noter qu'une faible valeur de p suggère des preuves solides contre l'hypothèse nulle, indiquant que les données observées ne sont pas susceptibles de se produire uniquement par hasard. Cependant, cela n'implique pas de certitude. Il reste une probabilité non nulle d'observer une différence entre les échantillons même si l'hypothèse nulle est vraie.


Lorsque nous rencontrons une situation avec plusieurs hypothèses alternatives , nous l'appelons test d'hypothèses multiples . Dans de tels cas, la complexité augmente car nous devons examiner attentivement l'impact potentiel de la réalisation simultanée de plusieurs tests.


Les pièges des tests d'hypothèses multiples

L'écueil des tests d'hypothèses multiples survient lorsque nous testons plusieurs hypothèses sans ajuster le niveau de signification alpha . Dans de tels cas, nous gonflons par inadvertance le taux d'erreurs de "Type I" , ce qui signifie que nous avons tendance à rejeter une hypothèse nulle (trouver la différence) alors que cette hypothèse nulle est en fait vraie (pas de différence du tout).


Plus nous testons d'hypothèses simultanément, plus nous avons de chances de trouver une valeur de p inférieure à alpha pour au moins une hypothèse et de conclure à tort à une différence significative.


Pour illustrer ce problème, considérons un scénario dans lequel nous souhaitons tester N hypothèses pour déterminer laquelle de plusieurs nouvelles conceptions de pages Web attire le plus de clients avec alpha = 0.05 . Supposons que nous sachions qu'aucune des nouvelles conceptions n'est meilleure que celle par défaut , ce qui signifie que l'hypothèse nulle est valable pour tous N cas.


Cependant, pour chaque cas, il y a une probabilité de 5 % (en supposant que l'hypothèse nulle est vraie) de commettre une erreur de « type I » , ou un faux positif . En d'autres termes, il y a une probabilité de 95 % de ne pas détecter correctement un faux positif. Théoriquement, la probabilité d'avoir au moins un faux positif parmi les N tests est égale à 1 - (1 - alpha)^N = 1 - 0.95^N . Par exemple, lorsque N = 10 , cette probabilité est d'environ 40 %, nettement supérieure aux 5 % initiaux.



Que se passe-t-il lorsque vous augmentez encore un certain nombre d'hypothèses testables ?



Le problème devient plus apparent à mesure que nous augmentons le nombre d'hypothèses testées. Même dans les scénarios où seuls quelques variants et sous-échantillons sont impliqués, le nombre de comparaisons peut rapidement s'accumuler. Par exemple, la comparaison de trois conceptions D1, D2 et D3 pour tous les utilisateurs, puis séparément pour les utilisateurs du pays C1, et à nouveau pour les utilisateurs des pays autres que C1, donne un total de neuf comparaisons. Il est facile de s'engager involontairement dans de multiples comparaisons sans se rendre compte de l'inflation subséquente des taux d'erreur de type I.


La résurrection d'un saumon à l'aide de tests d'hypothèses multiples

Chaque carré orange est un voxel avec une activité cérébrale ! Dans un saumon mort !



Plongeons-nous dans un exemple intrigant qui met en évidence les conséquences de ne pas contrôler les erreurs de « Type I » lors du test de plusieurs hypothèses.


En 2009, un groupe de chercheurs a effectué une analyse IRMf sur un saumon de l'Atlantique mort et a étonnamment découvert une activité cérébrale comme s'il était vivant ! Pour comprendre comment ce résultat inattendu est arrivé, nous devons explorer la nature des scans IRMf.


Les scanners IRMf servent de plates-formes expérimentales étendues , où de nombreux tests sont effectués sur chaque patient. Les scanners surveillent les changements dans l'oxygénation du sang en tant qu'indicateur de l'activité cérébrale. Les chercheurs se concentrent généralement sur des régions d'intérêt spécifiques, ce qui les amène à diviser tout le volume corporel en petits cubes appelés voxels. Chaque voxel représente une hypothèse testant la présence d'une activité cérébrale dans ce cube particulier . En raison du désir d'analyses haute résolution, les scanners IRMf finissent par évaluer des milliers d'hypothèses au cours d'une seule procédure.


Dans ce cas, les chercheurs n'ont intentionnellement pas corrigé de manière appropriée le niveau de signification initial alpha = 0.001 et ils ont identifié trois voxels avec une activité cérébrale chez le saumon décédé. Cependant, ce résultat contredit notre compréhension selon laquelle le saumon est effectivement décédé . Lors de la correction du niveau de signification, le phénomène de type résurrection a disparu , illustrant l'importance de résoudre le problème des erreurs de type I.


Chaque fois que plusieurs hypothèses sont testées dans une seule expérience, il devient crucial de relever ce défi et de contrôler les erreurs de type I. Diverses techniques statistiques, telles que la correction de Bonferroni , peuvent être utilisées pour atténuer le taux de faux positifs gonflé associé aux tests d'hypothèses multiples.


Correction de Bonferroni

La correction de Bonferroni est une procédure statistique spécialement conçue pour relever le défi des comparaisons multiples lors des tests d'hypothèses.

Théorie

Supposons que vous deviez tester N hypothèses au cours d'une expérience tout en vous assurant que la probabilité d'erreur de type I reste inférieure à alpha .


L'idée sous-jacente de la procédure est simple : réduire le niveau de signification requis pour rejeter l'hypothèse nulle pour chaque hypothèse alternative . Vous souvenez-vous de la formule de la probabilité d'au moins un faux positif ? Dans cette formule, nous avons alpha , qui peut être diminué pour diminuer la probabilité globale.


Ainsi, pour obtenir une probabilité plus faible d'au moins un faux positif parmi plusieurs hypothèses, vous pouvez comparer chaque valeur de p non pas avec alpha mais avec quelque chose de plus petit. Mais qu'est-ce exactement que "quelque chose de plus petit" ?


Il s'avère que l'utilisation bonferroni_alpha = alpha / N comme niveau de signification pour chaque hypothèse individuelle garantit que la probabilité globale d'erreur de type I reste inférieure à alpha .


Par exemple, si vous testez 10 hypothèses ( N = 10 ) et que le niveau de signification souhaité est de 5 % ( alpha = 0.05 ), vous devez comparer chaque valeur p individuelle avec bonferroni_alpha = alpha / N = 0.05 / 10 = 0.005 En faisant ainsi, la probabilité de rejeter par erreur au moins une vraie hypothèse nulle ne dépassera pas le niveau souhaité de 0,05.


Après correction de Bonferroni, la probabilité est exactement égale à alpha si, dans tous les tests, l'hypothèse nulle est vérifiée



Cette technique remarquable fonctionne grâce à l'inégalité de Boole , qui stipule que la probabilité de l'union des événements est inférieure ou égale à la somme de leurs probabilités individuelles . Bien qu'une preuve mathématique formelle existe, les explications visuelles fournissent une compréhension intuitive :


Mes griffonnages :)


Ainsi, lorsque chaque hypothèse individuelle est testée à bonferroni_alpha = alpha / N un niveau de signification, nous avons une probabilité bonferroni_alpha d'un faux positif. Pour N de tels tests, la probabilité d'union d'événements « faux positifs » est inférieure ou égale à la somme des probabilités individuelles. Ce qui, dans le pire des cas lorsque l'hypothèse nulle de tous les tests N est vérifiée, est égal à N * bonferroni_alpha = N * (alpha / N) = alpha


Pratique

Pour étayer davantage les concepts abordés précédemment, effectuons une simulation en Python . Nous observerons les résultats et évaluerons l'efficacité de la correction de Bonferroni.


Considérons un scénario où nous avons 10 hypothèses alternatives dans un seul test. Supposons que dans les 10 cas, l'hypothèse nulle est vraie. Vous reconnaissez qu'un niveau de signification d' alpha = 0.05 est approprié pour votre analyse. Cependant, sans aucune correction pour l'erreur de type I gonflée, nous nous attendons à une probabilité théorique d'environ 40 % de rencontrer au moins un résultat faux positif. Et après application de la correction de Bonferroni, nous nous attendons à ce que cette probabilité ne dépasse pas 5 %.


Pour une expérience spécifique, nous obtenons au moins un faux positif ou non. Ces probabilités ne peuvent être vues que sur une échelle d'expériences multiples. Exécutons ensuite la simulation de chaque expérience individuelle 100 fois et calculons le nombre d'expériences avec au moins un faux positif (valeur de p inférieure au seuil de signification) !


Vous pouvez trouver le fichier .ipynb avec tout le code pour exécuter cette simulation et générer des graphiques dans mon référentiel sur GitHub - IgorKhomyanin/blog/bonferroni-and-salmon


 import numpy as np import matplotlib.pyplot as plt # To replicate the results np.random.seed(20000606) # Some hyperparameters too play with N_COMPARISONS = 10 N_EXPERIMENTS = 100 # Sample p-values # As we assume that null hypothesis is true, # the p-value would be distributed uniformly sample = np.random.uniform(0, 1, size=(N_COMPARISONS, N_EXPERIMENTS)) # Probability of type I error we are ready to accept # Probabiltiy of rejecting null hypothesis when it is actually true alpha = 0.05 # Theoretical False Positive Rate # # 1. # Probability that we cocnlude a significant difference for a given comparison # is equal to alpha by definition in our setting of true null hypothesis # Then [(1 - alpha)] is the probability of not rejecting the null hypothesis # # 2. # As experiments are considered independent, the probability of not rejecting # the null hypothesis in [(1 - alpha)]^N # # 3. # Probability that at least one is a false positive is equal to # 1 - (probability from 2.) prob_at_least_one_false_positive = 1 - ((1 - alpha) ** N_COMPARISONS) # Observed False Positive Rate # We conclude that experiment is a false positive when p-value is less than alpha false_positives_cnt = np.sum(np.sum(sample <= alpha, axis=0) > 0) false_positives_share = false_positives_cnt / N_EXPERIMENTS # Bonferroni correction bonferroni_alpha = alpha / N_COMPARISONS bonferroni_false_positive_comparisons_cnt = np.sum(np.sum(sample <= bonferroni_alpha, axis=0) > 0) bonferroni_false_positive_comparisons_share = bonferroni_false_positive_comparisons_cnt / N_EXPERIMENTS print(f'Theoretical False Positive Rate Without Correction: {prob_at_least_one_false_positive:0.4f}') print(f'Observed False Positive Rate Without Correction: {false_positives_share:0.4f} ({false_positives_cnt:0.0f} out of {N_EXPERIMENTS})') print(f'Observed False Positive Rate With Bonferroni Correction: {bonferroni_false_positive_comparisons_share:0.4f} ({bonferroni_false_positive_comparisons_cnt:0.0f} out of {N_EXPERIMENTS})') # Output: # Theoretical False Positive Rate Without Correction: 0.4013 # Observed False Positive Rate Without Correction: 0.4200 (42 out of 100) # Observed False Positive Rate With Bonferroni Correction: 0.0300 (3 out of 100)


Voici une visualisation des résultats :


Vous pouvez trouver le code de ce graphique dans mon dépôt GitHub



L'image du haut représente chaque carré comme la valeur p d'une comparaison individuelle (test d'hypothèse). Plus le carré est foncé, plus la valeur de p est élevée. Puisque nous savons que l'hypothèse nulle est valable dans tous les cas, tout résultat significatif serait un faux positif.


Lorsque la valeur de p est inférieure au seuil de signification (indiqué par des carrés presque blancs), nous rejetons l'hypothèse nulle et obtenons un résultat faux positif. Le graphique du milieu représente les expériences sans correction, tandis que le graphique du bas représente les expériences avec la correction de Bonferroni. Les expériences avec au moins un faux positif sont colorées en rouge.


De toute évidence, la correction a fonctionné efficacement. Sans correction, nous observons 42 expériences sur 100 avec au moins un faux positif, ce qui correspond étroitement à la probabilité théorique d'environ 40 %. Cependant, avec la correction de Bonferroni, nous n'avons que 3 expériences sur 100 avec au moins un faux positif, restant bien en dessous du seuil de 5% souhaité.


Grâce à cette simulation, nous pouvons observer visuellement l'impact de la correction de Bonferroni sur l'atténuation de l'apparition de faux positifs , validant ainsi son utilité dans les tests à hypothèses multiples.


Conclusion

Dans cet article, j'ai expliqué le concept de tests d'hypothèses multiples et souligné son danger potentiel. Lors du test de plusieurs hypothèses, comme la réalisation de plusieurs comparaisons lors d'un test A/B, la probabilité d'observer un événement rare de « faux positif » augmente. Cette probabilité accrue peut conduire à des conclusions erronées sur des effets significatifs qui peuvent s'être produits par hasard s'ils ne sont pas traités de manière appropriée.


Une solution possible à ce problème est la correction de Bonferroni , qui ajuste les niveaux de signification pour chaque hypothèse individuelle. En tirant parti de l'inégalité de Boole, cette correction aide à contrôler le niveau de signification global au seuil souhaité, réduisant ainsi le risque de faux positifs.


Cependant, il est important de reconnaître que chaque solution a un coût. Lors de l'utilisation de la correction de Bonferroni, le niveau de signification requis diminue, ce qui peut avoir un impact sur la puissance de l'expérience. Cela signifie qu'une plus grande taille d'échantillon ou des effets plus forts peuvent être nécessaires pour détecter les mêmes différences. Les chercheurs doivent soigneusement considérer ce compromis lorsqu'ils décident de mettre en œuvre la correction de Bonferroni ou d'autres méthodes de correction.


Si vous avez des questions ou des commentaires concernant le contenu abordé dans cet article, n'hésitez pas à les partager. S'engager dans une discussion et une exploration plus approfondies des techniques statistiques est essentiel pour une meilleure compréhension et application dans la pratique.


Les références