Analyses post hoc après une ANOVA

Conception d'expériences en Python

James Chapman

Curriculum Manager, DataCamp

Quand utiliser des tests post hoc

 

  • Après des résultats d'ANOVA significatifs
  • Pour explorer les différences par paires entre groupes

Un rideau de théâtre bleu est tiré par une main style dessin animé, révélant un réseau de quatre cercles colorés A, B, C et D reliés par des lignes représentant des comparaisons par paires. Certaines connexions portent des astérisques pour indiquer des différences significatives, d'autres sont indiquées non significatives. L'illustration montre comment les tests post hoc révèlent quels groupes diffèrent après qu'une ANOVA a détecté un effet global.

Conception d'expériences en Python

Principales méthodes post hoc

 

  • HSD de Tukey (Honest Significant Difference)
    • Robuste pour comparaisons multiples
    • Idéal pour comparaisons entre tous les groupes
  • Correction de Bonferroni
    • Ajuste les valeurs p pour maîtriser les erreurs de type I
    • Idéale pour comparaisons ciblées

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
Conception d'expériences en Python

Ensemble de données : campagnes publicitaires 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
Conception d'expériences en Python

Organiser les données avec des tableaux croisés

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
Conception d'expériences en Python

Réaliser une 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
Conception d'expériences en Python

Test 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 />---------------------------------------------------------------------
Conception d'expériences en Python

Mise en place de la correction 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)
Conception d'expériences en Python

Appliquer la correction 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]
Conception d'expériences en Python

Passons à la pratique !

Conception d'expériences en Python

Preparing Video For Download...