Tests Post-Hoc

Cours 4

Andreas Eich

Université de la Polynésie française
UE 6.7 Biostatistiques 2

Résumé du cours précédent

Qu’est-ce qu’un modèle statistique ?

“Description probabiliste de la génération des données par des processus sous-jacents”

  • Probabiliste : Distribution normale, définie par la moyenne (\(\mu\)) et l’écart-type (\(\sigma\)) :

    \(\mathrm{y}_i \sim \mathrm{Normal(\mu}_i,~\mathrm{\sigma)}\)

  • Processus sous-jacents : Variables explicatives, décrivant la valeur attendue \(\mu\)

Résumé du cours précédent

Aucune information supplémentaire connue, seulement la moyenne

\[ \mathrm{Weight}_i \sim \mathrm{Normal(\mu}_i,~\mathrm{\sigma)} \]

lm(body_mass_g ~ 1, data = penguins)

Résumé du cours précédent

La masse moyenne diffère par espèce

\[ \begin{align} \mathrm{Weight}_i &\sim \mathrm{Normal}(\mu_i,~\sigma) \\ \mu_i &= \mu_{\text{species}[i]} \end{align} \]

lm(body_mass_g ~ species, data = penguins)

ANOVA

Résumé du cours précédent

La masse dépend de la taille des manchots

\[ \begin{align} \mathrm{Weight}_i \sim \mathrm{Normal(\mu}_i,~\mathrm{\sigma)} \\ \mu_i = a + b \cdot \mathrm{billlength}_i\\ \end{align} \]

lm(body_mass_g ~ bill_length_mm, data = penguins)

Régression

Résumé du cours précédent

La masse dépend de la taille des manchots et de l’espèce (même pente)

\[ \begin{align} \mathrm{Weight}_i &\sim \mathrm{Normal}(\mu_i,~\sigma) \\ \mu_i &= a_{\text{species}[i]} + b \cdot \mathrm{billlength}_i \end{align} \]

# fmt: skip

lm(body_mass_g ~ bill_length_mm + species, 
   data = penguins)

ANCOVA

Résumé du cours précédent

La masse dépend de la taille des manchots et de l’espèce (pentes différentes par espèce)

\[ \begin{align} \mathrm{Weight}_i &\sim \mathrm{Normal}(\mu_i,~\sigma) \\ \mu_i &= a_{\text{species}[i]} + b_{\text{species}[i]} \cdot \mathrm{billlength}_i \end{align} \]

# fmt: skip

lm(body_mass_g ~ bill_length_mm * species, 
   data = penguins)

ANCOVA

Le problème avec l’ANOVA

Le problème avec l’ANOVA

m_spec <- lm(body_mass_g ~ species, data = penguins)
anova(m_spec)
Analysis of Variance Table

Response: body_mass_g
           Df    Sum Sq  Mean Sq F value    Pr(>F)    
species     2 145190219 72595110  341.89 < 2.2e-16 ***
Residuals 330  70069447   212332                      
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

L’ANOVA nous dit : « Il y a une différence entre les espèces »

Mais laquelle des espèces diffère des autres ?

Comparaisons multiples

Pour 3 espèces, nous avons 3 comparaisons possibles :

  • Adelie vs. Chinstrap
  • Adelie vs. Gentoo
  • Chinstrap vs. Gentoo

Pourquoi ne pas simplement faire 3 modèles ?

Inflation de l’erreur alpha

  • Chaque test a un risque d’erreur de 5% (α = 0,05)
  • Probabilité de ne pas faire d’erreur dans 1 test : 0,95
  • Probabilité de ne pas faire d’erreur dans 3 tests : \(0.95 \times 0.95 \times 0.95 = 0.857\)
  • Probabilité de faire au moins 1 erreur : \(1 - 0.857 = 0.143 = 14.3\%\)

Family-wise error rate (FWER)

FWER : La probabilité de faire au moins une erreur de type I dans un ensemble de tests

Nombre de groupes Nombre de comparaisons FWER (sans correction)
2 1 5,0%
3 3 14,3%
4 6 26,5%
5 10 40,1%
10 45 90,0%

Nous devons ajuster nos valeurs p pour contrôler le FWER

Ajustement des valeurs p

Méthode Description Quand l’utiliser
Bonferroni Divise α par le nombre de tests Tests simples, peu de tests
Holm-Bonferroni Bonferroni séquentiel (moins strict) Alternative à Bonferroni
Benjamini-Hochberg Contrôle le taux de fausses découvertes Beaucoup de tests
Tukey HSD Tient compte de toutes les comparaisons Comparaisons multiples

Les tests de Tukey sont souvent utilisés pour les tests post-hoc

Tests post-hoc en R

m_spec <- lm(body_mass_g ~ species, data = penguins)

library(modelbased)

estimate_contrasts(m_spec, p_adjust = "tukey")
Marginal Contrasts Analysis

Level1    | Level2    | Difference |    SE |             95% CI | t(330) |      p
---------------------------------------------------------------------------------
Chinstrap | Adelie    |      26.92 | 67.65 | [-106.16,  160.01] |   0.40 |  0.916
Gentoo    | Adelie    |    1386.27 | 56.91 | [1274.32, 1498.22] |  24.36 | < .001
Gentoo    | Chinstrap |    1359.35 | 70.05 | [1221.55, 1497.15] |  19.41 | < .001

Variable predicted: body_mass_g
Predictors contrasted: species
p-value adjustment method: Tukey

Visualiser les tests post-hoc

estimate_means(m_spec, by = "species") %>%
  plot()

Récemment, les chercheurs s’éloignent des valeurs p comme seuils rigides. L’ampleur de l’effet (importance biologique) importe plus que p < 0,05 !

Recommandation

  • Tracez l’IC 95%

    « Intervalle de confiance à 95% : est une plage calculée de sorte que, si on la répète plusieurs fois, 95% de ces intervalles contiendraient la vraie valeur du paramètre. »

  • Pas de chevauchement : Les groupes sont statistiquement significativement différents (p < 0,05)

  • Chevauchement : Peuvent être statistiquement significativement différents, mais l’effet est probablement petit

Comparaisons de pentes : ANCOVA

Les pentes diffèrent-elles entre les espèces ?

m_ancova <- lm(
  body_mass_g ~ bill_length_mm * species,
  data = penguins
)

anova(m_ancova)
Analysis of Variance Table

Response: body_mass_g
                        Df   Sum Sq  Mean Sq  F value  Pr(>F)    
bill_length_mm           1 74792533 74792533 540.6978 < 2e-16 ***
species                  2 94153502 47076751 340.3320 < 2e-16 ***
bill_length_mm:species   2  1081048   540524   3.9076 0.02103 *  
Residuals              327 45232583   138326                     
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Comparaisons de pentes : ANCOVA

estimate_slopes(
  m_ancova,
  by = "species",
  trend = "bill_length_mm"
) %>%
  plot()

Les pentes diffèrent-elles entre les espèces ?

estimate_contrasts(
  m_ancova,
  contrast = "bill_length_mm",
  by = "species",
  p_adjust = "tukey"
)
Marginal Contrasts Analysis

Level1    | Level2    | Difference |    SE |          95% CI | t(327) |     p
-----------------------------------------------------------------------------
Chinstrap | Adelie    |     -34.63 | 17.89 | [-69.82,  0.56] |  -1.94 | 0.130
Gentoo    | Adelie    |      13.89 | 16.03 | [-17.64, 45.42] |   0.87 | 0.662
Gentoo    | Chinstrap |      48.52 | 17.53 | [ 14.04, 83.01] |   2.77 | 0.016

Variable predicted: body_mass_g
Predictors contrasted: bill_length_mm
Predictors averaged: bill_length_mm (44)
p-value adjustment method: Tukey

Comparaisons de pentes : ANCOVA

estimate_slopes(
  m_ancova,
  by = "species",
  trend = "bill_length_mm"
) %>%
  plot()

Les pentes diffèrent-elles de 0 ?

# fmt: skip
estimate_slopes(m_ancova, 
                by = "species", 
                p_adjust = "tukey")
Estimated Marginal Effects

species   |  Slope |    SE |          95% CI | t(327) |      p
--------------------------------------------------------------
Adelie    |  93.75 | 11.60 | [70.92, 116.58] |   8.08 | < .001
Chinstrap |  59.12 | 13.61 | [32.34,  85.90] |   4.34 | < .001
Gentoo    | 107.64 | 11.04 | [85.92, 129.36] |   9.75 | < .001

Marginal effects estimated for bill_length_mm
Type of slope was dY/dX

À vous de jouer

  1. Allez sur le site du cours
  2. Allez au calendrier
  3. Cliquez sur TP 04
  4. Connectez-vous à Posit Cloud