2  Einen TukeyHSD Test rechnen

Letzte Änderung am 13. January 2024 um 17:46:55

Genutzte R Pakete
pacman::p_load(tidyverse, magrittr, readxl, 
               multcompView)

In diesem sehr kurzen Beispiel wollen wir uns einem den Tukey Test anschauen. Eigentlich ist es der Tukey HSD Test für Tukey Honest Significant Differences. Die von dieser Funktion zurückgegebenen \(p\)-Werte und 95% Konfidenzintervalle basieren auf der t-Test Verteilung. Wir nehmen also ein normalverteiltes Outcome \(y\) sowie eine homogene Varianz an.

Die auf diese Weise konstruierten 95% Konfidenzintervalle gelten nur für balancierte Designs, bei denen in jedem Level des Faktors die gleiche Anzahl von Beobachtungen gemacht wird. Die Funktion TukeyHSD() enthält eine Anpassung für den Stichprobenumfang, die sinnvolle 95% Konfidenzintervalle für leicht unbalancierte Designs erzeugt. Ja, und da geht es schon wieder los. Was heißt sinnvoll? Oder andersherum, was ist eine leichte Abweichung? Deshalb mag ich persönlich nicht die Funktion TukeyHSD() und ziehe das R Paket emmeans vor. Du siehst auch in den anderen Beispielen immer die Anwendung von emmeans.

Aber gut, hier soll es ja um den Tukey Test gehen. Also wir nehmen uns einmal ein simples Beispiel mit verschiedenen Bodenarten und dann wollen wir als Outcome \(y\) die Pflanzenhöhe miteinander vergleichen.

soil_tbl <- read_excel("data/soil_1fac_data.xlsx") %>% 
  mutate(variante = as_factor(variante)) %>% 
  select(variante, height)

Die Funktion TukeyHSD() ist alt. Deshalb kann die Funktion nur den Modellfit aus der Funktion aov() verarbeiten. Die Funktion aov() wiederum ist eigentlich nur eine Funktion, die die beiden Funktionen anova() und lm() in ungünstiger Art und Weise kombiniert. Aber gut, geht eben nicht anders.

aov_fit <- aov(height ~ variante, data = soil_tbl)

Dann können wir den Modellfit in die Funktion TukeyHSD() stecken und benutzen. Wir kriegen eine etwas seltsame Ausgabe, aber wir wollen auch hier dann weiter zu dem compact letter display.

tukey_obj <- aov_fit %>% 
  TukeyHSD()

Das compact letter display können wir über die Funktion multcompLetters() erstellen. Wir müssen dafür die \(p\)-Werte extrahieren und dann an die Funktion weiterleiten. Hier ist wichtig, dass wir nur adjustierte \(p\)-Werte wiederbekommen. Wenn du unadjustierte \(p\)-Werte möchtest, dann musst du nochmal in die Funktion emmeans() schauen.

tukey_obj %>% 
  pluck("variante") %>% 
  magrittr::extract( , "p adj") %>% 
  multcompLetters()
         Torf Kompostiertes  Gehäckseltes Aufgefasertes    Holzfasern 
         "ab"          "ab"           "a"          "ab"           "b" 

Mehr zum compact letter display und der Interpretation kannst du im Kapitel zu Multiple Vergleiche oder Post-hoc Tests nachlesen. Dort findest du auch eine Alternative zu dem Tukey Test.