Análisis post hoc tras ANOVA

Diseño experimental en Python

James Chapman

Curriculum Manager, DataCamp

Cuándo usar pruebas post hoc

 

  • Tras un ANOVA significativo
  • Para explorar diferencias por pares entre grupos

Un telón azul se abre con una mano estilo dibujo, revelando una red de cuatro círculos A, B, C y D conectados por líneas que representan comparaciones por pares. Algunas conexiones tienen asteriscos (diferencias significativas) y otras indican no significativas. Ilustra cómo las pruebas post hoc muestran qué grupos difieren tras detectar un efecto global con ANOVA.

Diseño experimental en Python

Métodos post hoc clave

 

  • HSD de Tukey (Honest Significant Difference)
    • Robusta para comparaciones múltiples
    • Ideal para comparar todos los grupos
  • Corrección de Bonferroni
    • Ajusta p-values para controlar errores de Tipo I
    • Ideal para comparaciones 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
Diseño experimental en Python

El dataset: campañas 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
Diseño experimental en Python

Organizar datos con tablas 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
Diseño experimental en Python

Realizar 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
Diseño experimental en Python

Prueba 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 />---------------------------------------------------------------------
Diseño experimental en Python

Preparar la corrección 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)
Diseño experimental en Python

Aplicar la corrección 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]
Diseño experimental en Python

¡Vamos a practicar!

Diseño experimental en Python

Preparing Video For Download...