paint-brush
Tales of the Undead Salmon: Explorando a correção de Bonferroni em testes de hipóteses múltiplaspor@igorkhomyanin
2,134 leituras
2,134 leituras

Tales of the Undead Salmon: Explorando a correção de Bonferroni em testes de hipóteses múltiplas

por Igor Khomyanin10m2023/05/24
Read on Terminal Reader

Muito longo; Para ler

Este artigo explica o problema de testar várias hipóteses sem os devidos ajustes. Apresenta a correção de Bonferroni como solução para controlar resultados falsos positivos. A simulação demonstra a eficácia da correção. Compreender e aplicar correções em testes de múltiplas hipóteses é essencial para uma análise de dados precisa e tomada de decisão.
featured image - Tales of the Undead Salmon: Explorando a correção de Bonferroni em testes de hipóteses múltiplas
Igor Khomyanin HackerNoon profile picture
0-item


A inferência estatística é uma ferramenta poderosa para tirar conclusões e fazer previsões sobre populações com base em dados de amostra. Isso nos permite tomar decisões informadas e entender a eficácia de diferentes opções. Uma aplicação popular de inferência estatística é o teste A/B , em que comparamos duas versões ou tratamentos para determinar o desempenho superior. No entanto, o que acontece quando introduzimos mais versões ou tratamentos no experimento?


Pode parecer que a introdução de versões adicionais em um experimento é uma oportunidade para decisões ainda melhores. Infelizmente , se não for tratado adequadamente, o aumento do número de hipóteses testáveis pode levar a resultados enganosos e decisões incorretas . Este desafio é conhecido como problema de comparações múltiplas .


Neste artigo, explico o conceito de teste de múltiplas hipóteses, sua possível armadilha e dou uma possível solução suportada por uma simulação Python.


O que é teste de hipótese múltipla?

Para entender o teste de múltiplas hipóteses, vamos começar examinando os conceitos fundamentais de um teste A/B simples envolvendo duas variantes .


Em um teste A/B, começamos formulando duas hipóteses concorrentes: a hipótese nula , que representa a ausência de diferença entre as variantes, e a hipótese alternativa , que sugere a presença de uma diferença.


Em seguida, definimos um nível de significância denotado como alpha . Esse limite determina a quantidade de evidência necessária para rejeitar a hipótese nula . Os níveis de significância comumente usados são 0,05 (5%) e 0,01 (1%), indicando a probabilidade de observar os dados se a hipótese nula fosse verdadeira.


Depois de executar o experimento e coletar os dados, calculamos os valores-p . O valor-p representa a probabilidade de obter um resultado tão extremo quanto ou mais extremo que os dados observados se a hipótese nula fosse verdadeira . Se o valor-p for menor que o nível de significância alpha , rejeitamos a hipótese nula em favor da hipótese alternativa.


É importante observar que um valor de p baixo sugere forte evidência contra a hipótese nula, indicando que é improvável que os dados observados ocorram apenas por acaso. No entanto, isso não implica certeza. Resta uma probabilidade diferente de zero de observar uma diferença entre as amostras, mesmo que a hipótese nula seja verdadeira.


Quando encontramos uma situação com múltiplas hipóteses alternativas , nos referimos a ela como teste de múltiplas hipóteses . Nesses casos, a complexidade aumenta, pois precisamos considerar cuidadosamente o impacto potencial da realização de vários testes simultaneamente.


Armadilhas do teste de hipóteses múltiplas

A armadilha do teste de múltiplas hipóteses surge quando testamos múltiplas hipóteses sem ajustar o nível de significância alpha . Nesses casos, inadvertidamente aumentamos a taxa de erros "Tipo I" , o que significa que tendemos a rejeitar uma hipótese nula (encontrar a diferença) enquanto essa hipótese nula é de fato verdadeira (nenhuma diferença).


Quanto mais hipóteses testarmos simultaneamente, maiores serão as chances de encontrar um valor p menor que alpha para pelo menos uma hipótese e concluir erroneamente uma diferença significativa.


Para ilustrar esse problema, considere um cenário em que desejamos testar N hipóteses para determinar qual dos vários novos designs de página da Web atrai mais clientes com alpha = 0.05 . Vamos supor que sabemos que nenhum dos novos projetos é melhor que o padrão , o que significa que a hipótese nula vale para todos os N casos.


No entanto, para cada caso, há uma probabilidade de 5% (supondo que a hipótese nula seja verdadeira) de cometer um erro “Tipo I” , ou um falso positivo . Em outras palavras, existe uma probabilidade de 95% de não detectar corretamente um falso positivo. Teoricamente, a probabilidade de haver pelo menos um falso positivo entre os N testes é igual a 1 - (1 - alpha)^N = 1 - 0.95^N . Por exemplo, quando N = 10 , essa probabilidade é de aproximadamente 40%, significativamente maior que os 5% iniciais.



O que acontece quando você aumenta ainda mais uma série de hipóteses testáveis



O problema torna-se mais aparente à medida que aumentamos o número de hipóteses testadas. Mesmo em cenários em que apenas algumas variantes e subamostras estão envolvidas, o número de comparações pode se acumular rapidamente. Por exemplo, comparar três projetos D1, D2 e D3 para todos os usuários, depois separadamente para usuários no país C1 e novamente para usuários em países diferentes de C1, resulta em um total de nove comparações. É fácil envolver-se involuntariamente em comparações múltiplas sem perceber a subseqüente inflação das taxas de erro Tipo I.


A ressurreição de um salmão usando testes de hipóteses múltiplas

Cada quadrado laranja é um voxel com atividade cerebral! Em um salmão morto!



Vamos nos aprofundar em um exemplo intrigante que destaca as consequências de não controlar os erros do “Tipo I” ao testar várias hipóteses.


Em 2009, um grupo de pesquisadores realizou uma ressonância magnética funcional em um salmão do Atlântico morto e surpreendentemente descobriu a atividade cerebral como se estivesse viva! Para entender como esse resultado inesperado surgiu, precisamos explorar a natureza dos exames de fMRI.


Scanners fMRI servem como extensas plataformas experimentais , onde numerosos testes são realizados em cada paciente. Os scanners monitoram as mudanças na oxigenação do sangue como um indicador da atividade cerebral. Os pesquisadores geralmente se concentram em regiões específicas de interesse, o que os leva a dividir todo o volume do corpo em pequenos cubos chamados voxels. Cada voxel representa uma hipótese que testa a presença de atividade cerebral naquele cubo em particular . Devido ao desejo de varreduras de alta resolução, os scanners fMRI acabam avaliando milhares de hipóteses durante um único procedimento.


Nesse caso, os pesquisadores intencionalmente não corrigiram adequadamente o nível de significância inicial alpha = 0.001 e identificaram três voxels com atividade cerebral no salmão morto. No entanto, esse resultado contradiz nosso entendimento de que o salmão está realmente morto . Ao corrigir o nível de significância, o fenômeno semelhante à ressurreição desapareceu , ilustrando a importância de abordar a questão dos erros do Tipo I.


Sempre que várias hipóteses são testadas em um único experimento, torna-se crucial enfrentar esse desafio e controlar os erros do Tipo I. Várias técnicas estatísticas, como a correção de Bonferroni , podem ser empregadas para mitigar a taxa inflada de falsos positivos associada a testes de múltiplas hipóteses.


correção de Bonferroni

A correção de Bonferroni é um procedimento estatístico projetado especificamente para enfrentar o desafio de comparações múltiplas durante o teste de hipóteses.

Teoria

Suponha que você precise testar N hipóteses durante um experimento enquanto garante que a probabilidade de erro Tipo I permaneça abaixo alpha .


A ideia subjacente do procedimento é direta: reduza o nível de significância necessário para rejeitar a hipótese nula para cada hipótese alternativa . Lembre-se da fórmula para a probabilidade de pelo menos um falso positivo? Nessa fórmula, temos alpha , que pode ser diminuído para diminuir a probabilidade geral.


Portanto, para obter uma probabilidade menor de pelo menos um falso positivo entre várias hipóteses, você pode comparar cada valor-p não com alpha , mas com algo menor. Mas o que exatamente é "algo menor"?


Acontece que usar bonferroni_alpha = alpha / N como o nível de significância para cada hipótese individual garante que a probabilidade geral de erro Tipo I permaneça abaixo de alpha .


Por exemplo, se você estiver testando 10 hipóteses ( N = 10 ) e o nível de significância desejado for 5% ( alpha = 0.05 ), você deve comparar cada valor-p individual com bonferroni_alpha = alpha / N = 0.05 / 10 = 0.005 Fazendo assim, a probabilidade de rejeitar erroneamente pelo menos uma hipótese nula verdadeira não excederá o nível desejado de 0,05.


Após a correção de Bonferroni, a probabilidade é exatamente igual a alfa se em todos os testes a hipótese nula for válida



Essa notável técnica funciona devido à desigualdade de Boole , que afirma que a probabilidade da união dos eventos é menor ou igual à soma de suas probabilidades individuais . Embora exista uma prova matemática formal, as explicações visuais fornecem uma compreensão intuitiva:


Meus rabiscos :)


Assim, quando cada hipótese individual está sendo testada em bonferroni_alpha = alpha / N um nível de significância, temos uma probabilidade bonferroni_alpha de um falso positivo. Para N tais testes, a probabilidade da união de eventos “falsos positivos” é menor ou igual à soma das probabilidades individuais. Que, no pior cenário, quando em todos os N testes a hipótese nula é válida, é igual a N * bonferroni_alpha = N * (alpha / N) = alpha


Prática

Para apoiar ainda mais os conceitos discutidos anteriormente, vamos conduzir uma simulação em Python . Observaremos os resultados e avaliaremos a eficácia da correção de Bonferroni.


Considere um cenário onde temos 10 hipóteses alternativas dentro de um único teste. Vamos supor que em todos os 10 casos, a hipótese nula seja verdadeira. Você concorda que um nível de significância alpha = 0.05 é apropriado para sua análise. No entanto, sem qualquer correção para o erro tipo I inflado, esperamos uma probabilidade teórica de aproximadamente 40% de experimentar pelo menos um resultado falso positivo. E após aplicar a correção de Bonferroni esperamos que esta probabilidade não ultrapasse 5%.


Para um experimento específico, obtemos pelo menos um falso positivo ou não. Essas probabilidades podem ser vistas apenas em uma escala de experimentos múltiplos. Em seguida, vamos executar a simulação de cada experimento individual 100 vezes e calcular o número de experimentos com pelo menos um falso positivo (valor p abaixo do nível de significância)!


Você pode encontrar o arquivo .ipynb com todo o código para executar esta simulação e gerar gráficos em meu repositório no 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)


Aqui está uma visualização dos resultados:


Você pode encontrar o código para este gráfico no meu repositório do GitHub



A imagem superior representa cada quadrado como o valor-p de uma comparação individual (teste de hipótese). Quanto mais escuro o quadrado, maior o valor-p. Como sabemos que a hipótese nula é válida em todos os casos, qualquer resultado significativo seria um falso positivo.


Quando o valor p é menor que o nível de significância (indicado por quadrados quase brancos), rejeitamos a hipótese nula e obtemos um resultado falso positivo. O gráfico do meio representa os experimentos sem correção, enquanto o gráfico inferior representa os experimentos com a correção de Bonferroni. Os experimentos com pelo menos um falso positivo são coloridos em vermelho.


Claramente, a correção funcionou de forma eficaz. Sem correção, observamos 42 experimentos em 100 com pelo menos um falso positivo, o que se alinha com a probabilidade teórica de aproximadamente 40%. No entanto, com a correção de Bonferroni, temos apenas 3 experimentos em 100 com pelo menos um falso positivo, ficando bem abaixo do limite de 5% desejado.


Por meio dessa simulação, podemos observar visualmente o impacto da correção de Bonferroni na mitigação da ocorrência de falsos positivos , validando ainda mais sua utilidade em testes de hipóteses múltiplas.


Conclusão

Neste artigo, expliquei o conceito de teste de hipóteses múltiplas e destaquei seu perigo potencial. Ao testar várias hipóteses, como realizar comparações múltiplas durante um teste A/B, a probabilidade de observar um evento raro de “Falso Positivo” aumenta. Essa probabilidade aumentada pode levar a conclusões errôneas sobre efeitos significativos que podem ter ocorrido por acaso, se não forem tratados adequadamente.


Uma solução possível para esse problema é a correção de Bonferroni , que ajusta os níveis de significância para cada hipótese individual. Aproveitando a desigualdade de Boole, essa correção ajuda a controlar o nível de significância geral no limite desejado, reduzindo o risco de falsos positivos.


No entanto, é importante reconhecer que toda solução tem um custo. Ao utilizar a correção de Bonferroni, o nível de significância necessário diminui, o que pode afetar o poder do experimento. Isso significa que um tamanho de amostra maior ou efeitos mais fortes podem ser necessários para detectar as mesmas diferenças. Os pesquisadores devem considerar cuidadosamente essa compensação ao decidir implementar a correção de Bonferroni ou outros métodos de correção.


Se você tiver dúvidas ou comentários sobre o conteúdo discutido neste artigo, não hesite em compartilhá-los. Engajar-se em mais discussão e exploração de técnicas estatísticas é essencial para uma melhor compreensão e aplicação na prática.


Referências