p.adjust() ist eine Funktion in R, die verwendet wird, um p-Werte bei multiplen Vergleichen zu korrigieren.

Zur Korrektur: Wenn du mehrerer Tests durchführst, steigt die Wahrscheinlichkeit, dass mindestens einer dieser Tests fälschlicherweise signifikant ausfällt (= Alpha-Fehler). Wenn man z.B. 20 Tests bei einem Signifikanzniveau von 5% (α = 0,05) durchführt, ist die Wahrscheinlichkeit, dass mindestens ein Test fälschlicherweise signifikant ist, höher als diese zuvor bestimmten 5%. Die Korrektur ist damit ein notwendiger Schritt, um Fehlinterpretationen vorzubeugen. 

Argumente

  • p: Ein numerischer Vektor von p-Werten, die angepasst werden sollen.

  • method: Methode die angewendet werden soll

    Verfügbare Methoden sind:

    • "holm" (Standard): Holm-Bonferroni-Methode

    • "hochberg": Hochberg-Methode

    • "hommel": Hommel-Methode

    • "bonferroni": Bonferroni-Korrektur

    • "BH" oder "fdr": Benjamini-Hochberg-Methode oder false detection rate

    • "BY": Benjamini-Yekutieli-Methode (konservativer als BH)

    • "none": Keine Anpassung

  • n: Die Anzahl der Vergleiche. Wenn man dieses Argument weg lässt, wird als default die Länge von p genommen.

install.packages("knitr",repos = "https://cran.rstudio.com")
## 
## The downloaded binary packages are in
##  /var/folders/xd/kxxx37y92hjb4j6g6bxkt9lh0000gn/T//RtmptMkScQ/downloaded_packages
install.packages("kableExtra",repos = "https://cran.rstudio.com")
## 
## The downloaded binary packages are in
##  /var/folders/xd/kxxx37y92hjb4j6g6bxkt9lh0000gn/T//RtmptMkScQ/downloaded_packages
# Pakete laden 
library(knitr)
library(kableExtra)

# Beispielhafte p-Werte 
pvals <- c(0.01, 0.04, 0.03, 0.002, 0.05,0.07,0.11)

# Ausgabe der "ursprünglichen" p-Werte
print("Ursprüngliche p-Werte:")
## [1] "Ursprüngliche p-Werte:"
print(pvals)
## [1] 0.010 0.040 0.030 0.002 0.050 0.070 0.110
# p-Werte mit der Holm-Methode-Korrektur
pvals_holm <- p.adjust(pvals, method = "holm")
print("Angepasste p-Werte mit der Holm-Korrektur:")# Ausgabe der angepassten p-Werte mit der Holm-Methode
## [1] "Angepasste p-Werte mit der Holm-Korrektur:"
print(pvals_holm)
## [1] 0.060 0.160 0.150 0.014 0.160 0.160 0.160
# p-Werte mit der Bonferroni-Korrektur
pvals_bonferroni <- p.adjust(pvals, method = "bonferroni")
print("Angepasste p-Werte mit der Bonferroni-Korrektur:") # Ausgabe der angepassten p-Werte mit der Bonferroni-Korrektur
## [1] "Angepasste p-Werte mit der Bonferroni-Korrektur:"
print(pvals_bonferroni)
## [1] 0.070 0.280 0.210 0.014 0.350 0.490 0.770
# p-Werte mit der Benjamini-Hochberg-Korrektur
pvals_bh <- p.adjust(pvals, method = "BH")
print("Angepasste p-Werte mit der Benjamini-Hochberg-Korrektur:") # Ausgabe der angepassten p-Werte mit der Benjamini-Hochberg-Korrektur
## [1] "Angepasste p-Werte mit der Benjamini-Hochberg-Korrektur:"
print(pvals_bh)
## [1] 0.03500000 0.07000000 0.07000000 0.01400000 0.07000000 0.08166667 0.11000000
# p-Werte mit der Benjamini-Yekutieli-Korrektur
pvals_by <- p.adjust(pvals, method = "BY")
print("Angepasste p-Werte mit der Benjamini-Yekutieli-Korrektur:") # Ausgabe der angepassten p-Werte mit der Benjamini-Yekutieli-Korrektur
## [1] "Angepasste p-Werte mit der Benjamini-Yekutieli-Korrektur:"
print(pvals_by)
## [1] 0.0907500 0.1815000 0.1815000 0.0363000 0.1815000 0.2117500 0.2852143
# Tabelle erstellen um korrigierte Werte mit den ursprünglcihen Werten zu vergleichen
result_table <- data.frame(
  Original = pvals,
  Holm = pvals_holm,
  Bonferroni = pvals_bonferroni,
  Benjamini_Hochberg = pvals_bh,
  Benjamini_Yekutieli = pvals_by
)

kable(result_table, caption = "Angepasste p-Werte mit verschiedenen Korrekturen") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),
                full_width = F,
                position = "center") %>%
  
  column_spec(1, background = "#B3FFFF") %>%  # Erste Spalte blau hinterlegt
  column_spec(2, background = "#CCFFCC") %>%  # Zweite Spalte grün hinterlegt
  column_spec(3, background = "#FFD9B3") %>%  # Dritte Spalte orange hinterlegt
  column_spec(4, background = "#FFFF99") %>%  # Vierte Spalte gelb hinterlegt
  column_spec(5, background = "#E6E6E6")      # Fünfte Spalte hellgrau hinterlegt
Angepasste p-Werte mit verschiedenen Korrekturen
Original Holm Bonferroni Benjamini_Hochberg Benjamini_Yekutieli
0.010 0.060 0.070 0.0350000 0.0907500
0.040 0.160 0.280 0.0700000 0.1815000
0.030 0.150 0.210 0.0700000 0.1815000
0.002 0.014 0.014 0.0140000 0.0363000
0.050 0.160 0.350 0.0700000 0.1815000
0.070 0.160 0.490 0.0816667 0.2117500
0.110 0.160 0.770 0.1100000 0.2852143

Hinweise zur Interpretation:

Die Korrektur der p-Werte erlaubt es, diese immer noch mit alpha = .05 zu vergleichen bzw. mit dem gewählten Signifikanz-Kriterium.

Beispiel: Den unkorregierten Original p-Wert des Modelles p = .01 korrigieren wir mit Holm und erhalten einen korrigierten p-Wert pHolm = .06 (=siehe Tabelle). Nun können wir diesen korrigierten Wert mit dem alpha = .05 vergleichen. Da pHolm (.06) > pkrit/alpha (.05) wird die Nullhypothese vorläufig beibehalten.