Análises pós-hoc após ANOVA

Projeto experimental em Python

James Chapman

Curriculum Manager, DataCamp

Quando usar testes pós-hoc

 

  • Após um ANOVA significativo
  • Para explorar diferenças par a par entre grupos

Uma cortina azul de teatro é puxada por uma mão em estilo cartoon, revelando uma rede de quatro círculos coloridos rotulados A, B, C e D conectados por linhas que representam comparações par a par. Algumas conexões têm asteriscos indicando diferenças significativas; outras estão marcadas como não significativas. A ilustração simboliza como testes pós-hoc revelam quais grupos diferem após a ANOVA detectar um efeito geral.

Projeto experimental em Python

Principais métodos pós-hoc

 

  • HSD de Tukey (Honest Significant Difference)
    • Robusto para múltiplas comparações
    • Ideal para comparar todos os grupos
  • Correção de Bonferroni
    • Ajusta p-values para controlar erros Tipo I
    • Ideal para comparações específicas

John Tukey

Carlo Emilio Bonferroni

1 https://www.amphilsoc.org/item-detail/photograph-john-wilder-tukey 2 https://en.wikipedia.org/wiki/Carlo_Emilio_Bonferroni
Projeto experimental em Python

O dataset: campanhas de marketing

ad_campaigns
              Ad_Campaign  Click_Through_Rate
1300    Seasonal Discount        2.1659547732
1661          New Arrival        2.9409657365
2762       Loyalty Reward        3.2476777154
571     Seasonal Discount        3.3382186561
775     Seasonal Discount        1.7148876401
Projeto experimental em Python

Organizando dados com tabelas dinâmicas

pivot_table = ad_campaigns.pivot_table(values='Click_Through_Rate',
                                       index='Ad_Campaign',
                                       aggfunc="mean")
print(pivot_table)
                   Click_Through_Rate
Ad_Campaign                          
Loyalty Reward               2.792716
New Arrival                  3.013843
Seasonal Discount            2.518917
Projeto experimental em Python

Executando ANOVA

from scipy.stats import f_oneway
campaign_types = ['Seasonal Discount', 'New Arrival', 'Loyalty Reward']

groups = [ad_campaigns[ad_campaigns['Ad_Campaign'] == campaign]['Click_Through_Rate'] for campaign in campaign_types]
f_stat, p_val = f_oneway(*groups) print(p_val)
4.484124496940693e-134
Projeto experimental em Python

Teste HSD de Tukey

from statsmodels.stats.multicomp import pairwise_tukeyhsd

tukey_results = pairwise_tukeyhsd(ad_campaigns['Click_Through_Rate'],
ad_campaigns['Ad_Campaign'],
alpha=0.05)
print(tukey_results)
         Multiple Comparison of Means - Tukey HSD, FWER=0.05          
===========================================================================
        group1             group2  meandiff  p-adj   lower    upper  reject
<hr />---------------------------------------------------------------------
Loyalty Reward        New Arrival    0.2211   0.0    0.176   0.2663    True
Loyalty Reward  Seasonal Discount   -0.2738   0.0  -0.3189  -0.2287    True
   New Arrival  Seasonal Discount   -0.4949   0.0  -0.5401  -0.4498    True
<hr />---------------------------------------------------------------------
Projeto experimental em Python

Configuração da correção de Bonferroni

from scipy.stats import ttest_ind
from statsmodels.sandbox.stats.multicomp import multipletests

p_values = []
comparisons = [('Seasonal Discount', 'New Arrival'), ('Seasonal Discount', 'Loyalty Reward'), ('New Arrival', 'Loyalty Reward')]
for comp in comparisons: group1 = ad_campaigns[ad_campaigns['Ad_Campaign'] == comp[0]]['Click_Through_Rate'] group2 = ad_campaigns[ad_campaigns['Ad_Campaign'] == comp[1]]['Click_Through_Rate']
t_stat, p_val = ttest_ind(group1, group2)
p_values.append(p_val)
Projeto experimental em Python

Aplicando a correção de Bonferroni

p_adjusted = multipletests(p_values, alpha=0.05, method='bonferroni')

print(f"Adjusted P-values: {p_adjusted[1]}")
Adjusted P-values: [5.33634403e-133 2.17627991e-043 5.62590083e-029]
Projeto experimental em Python

Vamos praticar!

Projeto experimental em Python

Preparing Video For Download...