35 Der U-Test
Letzte Änderung am 04. June 2025 um 11:38:58
Statisticians, like artists, have the bad habit of falling in love with their models.” — George Box
Dieses Kapitel wird überarbeitet. Ziel ist es die Nichtparametrik zum Start des Wintersemesters 2025/26 überarbeitet zu haben. Da ich hier direkt im Kapitel arbeite, kann es sein, dass mal die ein oder andere Funktion nicht funktioniert oder aber Teile im Nichts enden. Wird dann repariert.
35.1 Allgemeiner Hintergrund
Der U-Test ist auch unter den Namen Wilcoxon-Mann-Whitney-Test, Mann-Whitney-U-Test oder Wilcoxon-Rangsummentest bekannt.
Wann nutzen wir den Wilcoxon-Mann-Whitney-Test? Wir nutzen den Wilcoxon-Mann-Whitney-Test wenn wir zwei Verteilungen miteinander vergleichen wollen. Das ist jetzt sehr abstrakt. Konrekt, wenn wir zwei Gruppen haben und ein nicht normalverteiltes \(y\). Haben wir ein normalverteiltes \(y\) rechnen wir meist einen t-Test. Wir könnten aber auch einen Wilcoxon-Mann-Whitney-Test rechnen.
Was ist jetzt der Unterschied zwischen einem Wilcoxon-Mann-Whitney-Test und einem t-Test? Der t-Test vergleicht die Mittelwerte zweier Normalverteilungen, also zum Beispiel die Verteilung der Sprungweiten der Hundeflöhe gegen die Verteilung der Sprungweiten der Katzenflöhe. Dazu nutzt der t-Test die Mittelwerte und die Standardabweichung. Beides sind Parameter einer Verteilung und somit ist der t-Test ein parametrischer Test.
Der Wilcoxon-Mann-Whitney-Test ist die nicht-parametrische Variante in dem wir die Zahlen in Ränge umwandeln, also sortieren, und mit den Rängen der Zahlen rechnen. Die deskriptiven Maßzahlen wären dann Median, Quantile und Quartile. Das heißt wir vergleichen mit dem Wilcoxon-Mann-Whitney-Test die Mediane. Wir wollen also wissen, ob sich die Mediane zwischen den Sprungweiten von Hunde- und Katzenflöhen unterscheiden.
Nachdem wir uns die Abbildung 35.1 einmal genauer angeschaut haben, stellt sich die Frage warum wird in der Abbildung ganz links ein Mann-Whitney oder U-Test gerechnet und in den beiden anderen Abbildungen ein Student t-Test? Warum nicht auf alles ein U-Test rechnen? Immerhin würde ja auf das Gewicht und die Größe der Milz (eng. spleen) auch ein U-Test als statistischer Test auch gehen. Wir haben hier unterschiedliche Fallzahlen in den Gruppen. In der linken Abbildung haben wir pro Gruppe sechs Mäuse und in der mittleren sowie rechten Abbidlung nur drei Mäuse pro Gruppe. Macht das einen Unterschied? Ja, für den U-Test macht das einen gewaltigen Unterschied, wie wir gleich einmal sehen werden.
35.2 Das Problem…
35.2.1 …der Gruppengröße
“Statistik fängt erst ab einer Gruppengröße von n gleich sieben überhaupt an.” — Ein anonymer Nichtparametriker
Um das Problem der geringen Gruppengröße zu verstehen, müssen wir erstmal den Zusammenhang zwischen einem signifikanten Ergebnis und der Mittelwertsdifferenz als ein statistsiches Maß für den Effekt verstehen. Je größer der Effekt, desto eher sollte ein Vergleich zwischen zwei Gruppen signifikant unterschiedlich sein. In der folgenden Abbildung habe ich dir einmal den Zusammenhang zwischen der Mittelwerstdifferenz \(\Delta\) und der Signifikanz dargestellt. Wie du siehst überlappen die Verteilungend der beiden Gruppen, wenn die Differenz der Mittelwerte klein ist. Je größer der Unterschied desto größer ist die Mittelwertsdifferenz. Soweit so klar. Damit sollten wir auch kleinere p-Werte erhalten, je größer die Mittelwertsdifferenz wird. Ich habe dir mal beispielhafte p-Werte in der Abbidung ergänzt.
Wenn wir jetzt den Zusammenhang zwischen der Mittelwertsdifferenz und dem p-Wert verstanden haben, können wir jetzt zum Problem der geringen Fallzahl in den Gruppen kommen. Wenn die Mittelwertsdifferenz ansteigt, dann sollte der p-Wert fallen. Wie du in folgender Abbildung links auch siehst, ist das der Fall. Für alle Kombinationen der Fallzahlen in den beiden Gruppen \(n_1\) und \(n_2\) fallen die p-Werte mit steigendem Effekt. Nur haben die p-Werte ein Plateau unter das sie nicht fallen können. Und bei einer Gruppengröße von 3 und 3 oder 4 und 3 können die p-Werte nicht kleiner als 0.05 werden egal wie groß die Mittelwertsdifferenz wird. Daher können wir mit diesen beiden Fallzahlkombinationen keinen signifkanten Unterschied nachweisen. Das sehen wir auch nochmal in der anderen Abbildung rechts, hier siehst du die minimalen p-Werte. Die p-Werte können in einem U-Test nicht unter gewisse Schranken fallen, abhängig von der Gruppenfallzahl.
Jetzt verstehen wir auch warum Sugimoto et al. (2023) in der Abbildung 35.1 auf einen Student t-Test für die Gruppengröße \(n_1 = 3\) und \(n_2 = 3\) umgeschwenkt ist. Trotz des riesigen Effekts in den Barplots und damit dem Mittelwertsunterschied, wäre ein Mann-Whitney Test nie signifikant geworden. Der p-Werte wäre dann hier auf 10% begrenzt, egal wie groß der eigentliche Effekt ist. Diese harte Grenze kennt der t-Test nicht, deshalb wurde hier dann der t-Test als Ausweg gewählt.
35.2.2 …des Effekts
Was ist der Effekt eines nichtparametrischen Tests? Oder andersherum, wenn wir eine Rangtransformation durchführen, dann verwandeln wir ja alle Zahlen mit einer Einheit in einen einheitslosen Rang. Damit rechnen wir also auf den Rängen des Messwertes. Wenn wir aber nun einheitslose Ränge haben, dann haben wir auch nur einheitslose Rangdifferenzen.
Je mehr Beobachtungen desto mehr Ränge desto größer die Rangdifferenzen.
35.2.3 …der Hypothesen
Mann-Whitney-U-Test: Hypothesen
“A major impetus to reporting medians with WMW test results is likely the major utility of reporting a summary statistic that reflects the same scale as the data being analyzed.” — Divine et al. (2018)
Divine et al. (2018) The Wilcoxon–Mann–Whitney Procedure Fails as a Test of Medians
Hart (2001) Mann-Whitney test is not just a test of medians: differences in spread can be important
Der p-Werte beantwortet folgende Frage:
“If the groups are sampled from populations with identical distributions, what is the chance that random sampling would result in a sum of ranks as far apart (or more so) as observed in this experiment?” — The Mann-Whitney test doesn’t really compare medians
\(H_0:\) Es ist gleich wahrscheinlich, dass ein zufällig aus der einen Population ausgewählter Wert größer oder kleiner ist als ein zufällig ausgewählter Wert aus der anderen Population
\(H_A:\) Es ist nicht gleich wahrscheinlich, dass ein zufällig aus der einen Population ausgewählter Wert größer oder kleiner ist als ein zufällig ausgewählter Wert aus der anderen Population
\[ H_0: Pr(X<Y) + \cfrac{1}{2} Pr(X = Y) = 0.5 \]
\[ H_A: Pr(X<Y) + \cfrac{1}{2} Pr(X = Y) \neq 0.5 \]
35.3 Genutzte R Pakete
Wir wollen folgende R Pakete in diesem Kapitel nutzen.
R Code [zeigen / verbergen]
::p_load(tidyverse, magrittr, broom, tidyplots, rstatix,
pacman
readxl, coin, ggpubr, nparcomp,
conflicted)conflicts_prefer(rstatix::wilcox_test)
An der Seite des Kapitels findest du den Link Quellcode anzeigen, über den du Zugang zum gesamten R-Code dieses Kapitels erhältst.
35.4 Daten
Unabhängige Messungen
R Code [zeigen / verbergen]
<- read_excel("data/flea_dog_cat.xlsx") |>
fac1_tbl select(animal, jump_length) |>
mutate(animal = as_factor(animal))
animal | jump_length |
---|---|
dog | 5.7 |
dog | 8.9 |
dog | 11.8 |
... | ... |
cat | 4.3 |
cat | 7.9 |
cat | 6.1 |
Abhängige Messungen
R Code [zeigen / verbergen]
<- read_excel("data/flea_dog_cat_repeated.xlsx") paired_tbl
id | hungrig | satt |
---|---|---|
1 | 5.2 | 6.1 |
2 | 4.1 | 5.2 |
3 | 3.5 | 3.9 |
4 | 3.2 | 4.1 |
5 | 4.6 | 5.3 |
R Code [zeigen / verbergen]
<- paired_tbl |>
paired_long_tbl pivot_longer(cols = hungrig:satt,
values_to = "jump_length",
names_to = "trt")
35.5 Hypothesen
Der Wilcoxon-Mann-Whitney-Test betrachtet die Mediane und Ränge um einen Unterschied nachzuweisen. Daher haben wir die Nullhypothese als Gleichheitshypothese. In unserem Beispiel lautet die Nullhypothese, dass die Mediane der beiden Levels des Faktors animal
gleich sind. Wir vergleichen im Wilcoxon-Mann-Whitney-Test nur zwei Gruppen.
\[ H_0: \; \widetilde{y}_{cat} = \widetilde{y}_{dog} \]
Die Alternative lautet, dass sich die beiden Gruppen im Median unterscheiden. Wir können uns über die Boxplots oder aber die berechneten Mediane dann den Unterschied bewerten.
\[ H_A: \; \widetilde{y}_{cat} \ne \widetilde{y}_{dog} \]
Wir schauen uns jetzt einmal den Wilcoxon-Mann-Whitney-Test theoretisch an bevor wir uns mit der Anwendung des Wilcoxon-Mann-Whitney-Test in R beschäftigen.
35.6 Der U-Test
35.6.1 … mit unabhängigen Beobachtungen
Der Wilcoxon-Mann-Whitney-Test berechnet die U Teststatistik auf den Rängend der Daten. Es gibt genau soviele Ränge wie es Beobachtungen im Datensatz gibt. Wir haben \(n = 14\) Beobachtungen in unseren Daten zu der Sprungweite in [cm] von den Hunde- und Katzenflöhen. Somit müssen wir auch vierzehn Ränge vergeben.
Die Tabelle 35.3 zeigt das Vorgehen der Rangvergabe. Wir sortieren als erstes das \(y\) aufsteigend. In unserem Fall ist das \(y\) die Sprunglänge. Dann vergeben wir die Ränge jweiles zugehörig zu der Position der Sprunglänge und der Tierart. Abschließend addieren wir die Rangsummmen für cat
und dog
zu den Rangsummen \(R_{cat}\) und \(R_{dog}\).
cat
und dog
haben jeweils die entsprechenden Ränge zugeordnet bekommen und die Rangsummen wurden berechnet
Rank | animal | jump_length | Ränge “cat” | Ränge “dog” |
---|---|---|---|---|
1 | cat | 2.2 | 1 | |
2 | cat | 3.2 | 2 | |
3 | cat | 4.1 | 3 | |
4 | cat | 4.3 | 4 | |
5 | cat | 5.4 | 5 | |
6 | dog | 5.6 | 6 | |
7 | dog | 5.7 | 7 | |
8 | cat | 6.1 | 8 | |
9 | dog | 7.6 | 9 | |
10 | cat | 7.9 | 10 | |
11 | dog | 8.2 | 11 | |
12 | dog | 8.9 | 12 | |
13 | dog | 9.1 | 13 | |
14 | dog | 11.8 | 14 | |
Rangsummen | \(R_{cat} = 33\) | \(R_{dog} = 72\) | ||
Gruppengröße | 7 | 7 |
Die Formel für die U Statistik sieht ein wenig wild aus, aber wir können eigentlich relativ einfach alle Zahlen einsetzen. Dann musst du dich etwas konzentrieren bei der Rechnung.
\[ U_{D} = n_1n_2 + \cfrac{n_1(n_1+1)}{2}-R_1 \]
mit
- \(R_1\) der größeren der beiden Rangsummen,
- \(n_1\) die Fallzahl der größeren der beiden Rangsummen
- \(n_2\) die Fallzahl der kleineren der beiden Rangsummen
Wir setzen nun die Zahlen ein. Da wir ein balanciertes Design vorliegen haben sind die Fallzahlen \(n_1 = n_2 = 7\) gleich. Wir müssen nur schauen, dass wir mit \(R_1\) die passende Rangsumme wählen. In unserem Fall ist \(R_1 = R_{dog} = 72\).
\[ U_{D} = 7 \cdot 7 + \cfrac{7(7+1)}{2}-72 = 5 \]
Der kritische Wert für die U Statistik ist \(U_{\alpha = 5\%} = 8\) für \(n_1 = 7\) und \(n_2 = 7\). Bei der Entscheidung mit der berechneten Teststatistik \(U_{D}\) gilt, wenn \(U_{D} \leq U_{\alpha = 5\%}\) wird die Nullhypothese (H\(_0\)) abgelehnt. Da in unserem Fall das \(U_{D}\) mit \(5\) kleiner ist als das \(U_{\alpha = 5\%} = 8\) können wir die Nullhypothese ablehnen. Wir haben ein signifkianten Unterschied in den Medianen zwischen den beiden Tierarten im Bezug auf die Sprungweite in [cm] von Flöhen.
Bei grosser Stichprobe, wenn \(n_1 + n_2 > 30\) ist, können wir die U Statistik auch standariseren und damit in den z-Wert transformieren.
\[ z_{D} = \cfrac{U_{D} - \bar{U}}{s_U} = \cfrac{U_{D} - \cfrac{n_1 \cdot n_2}{2}}{\sqrt{\cfrac{n_1 \cdot n_2 (n_1 + n_2 +1)}{12}}} \]
mit
- \(\bar{U}\) dem Mittelwert der U-Verteilung ohne Unterschied zwischen den Gruppen
- \(s_U\) Standardfehler des U-Wertes
- \(n_1\) Stichprobengrösse der Gruppe mit der grösseren Rangsumme
- \(n_2\) Stichprobengrösse der Gruppe mit der kleineren Rangsumme
Wir setzen dafür ebenfalls die berechnete U Statistik ein und müssen dann wieder konzentriert rechnen.
\[ z_{D} = \cfrac{5 - \cfrac{7 \cdot 7}{2}}{\sqrt{\cfrac{7 \cdot 7 (7 + 7 +1)}{12}}} = \cfrac{-19.5}{7.83} = |-2.46| \]
Der kritische Wert für die z-Statistik ist \(z_{\alpha = 5\%} = 1.96\). Bei der Entscheidung mit der berechneten Teststatistik \(z_{D}\) gilt, wenn \(z_{D} \geq z_{\alpha = 5\%}\) wird die Nullhypothese (H\(_0\)) abgelehnt. Wir haben eine berechnete z Statistik von \(z_{D} = 2.46\). Damit ist \(z_{D}\) größer als \(z_{\alpha = 5\%} = 1.96\) und wir können die Nullhypothese ablehnen. Wir haben einen signifkanten Unterschied zwischen den Medianen der beiden Floharten im Bezug auf die Sprunglänge in [cm].
wilxoc.test()
R Code [zeigen / verbergen]
wilcox.test(jump_length ~ animal, data = fac1_tbl,
conf.int = TRUE)
Wilcoxon rank sum exact test
data: jump_length by animal
W = 44, p-value = 0.01107
alternative hypothesis: true location shift is not equal to 0
95 percent confidence interval:
1.0 5.9
sample estimates:
difference in location
3.5
wilcox_test()
R Code [zeigen / verbergen]
::wilcox_test(jump_length ~ animal, data = fac1_tbl,
coinconf.int = TRUE)
Asymptotic Wilcoxon-Mann-Whitney Test
data: jump_length by animal (dog, cat)
Z = 2.4916, p-value = 0.01272
alternative hypothesis: true mu is not equal to 0
95 percent confidence interval:
1.2 5.7
sample estimates:
difference in location
3.5
wilcox_test()
R Code [zeigen / verbergen]
::wilcox_test(jump_length ~ animal, data = fac1_tbl) |>
rstatixselect(group1, group2, p)
# A tibble: 1 × 3
group1 group2 p
<chr> <chr> <dbl>
1 dog cat 0.0111
npar.t.test()
R Code [zeigen / verbergen]
<- npar.t.test(jump_length ~ animal, data = fac1_tbl) npar_obj
#------Nonparametric Test Procedures and Confidence Intervals for relative effects-----#
- Alternative Hypothesis: True relative effect p is less or equal than 1/2
- Confidence level: 95 %
- Method = Logit - Transformation
#---------------------------Interpretation----------------------------------#
p(a,b) > 1/2 : b tends to be larger than a
#---------------------------------------------------------------------------#
R Code [zeigen / verbergen]
$Analysis npar_obj
Effect Estimator Lower Upper T p.Value
1 p(dog,cat) 0.102 0.018 0.412 -2.345 0.019
Effektschätzer
R Code [zeigen / verbergen]
|>
fac1_tbl wilcox_effsize(jump_length ~ animal) |>
select(effsize, magnitude)
# A tibble: 1 × 2
effsize magnitude
<dbl> <ord>
1 0.666 large
Parametrische Lösung: Der t-Test
R Code [zeigen / verbergen]
|>
fac1_tbl mutate(ranked_jump_length = rank(jump_length)) |>
t_test(ranked_jump_length ~ animal) |>
select(group1, group2, statistic, p)
# A tibble: 1 × 4
group1 group2 statistic p
<chr> <chr> <dbl> <dbl>
1 dog cat 3.31 0.00624
35.6.2 … mit abhängigen Beobachtungen
wilxoc.test()
R Code [zeigen / verbergen]
wilcox.test(paired_tbl$hungrig, paired_tbl$satt, paired = TRUE)
Warning in wilcox.test.default(paired_tbl$hungrig, paired_tbl$satt, paired =
TRUE): cannot compute exact p-value with ties
Wilcoxon signed rank test with continuity correction
data: paired_tbl$hungrig and paired_tbl$satt
V = 0, p-value = 0.05791
alternative hypothesis: true location shift is not equal to 0
wilcox_test()
R Code [zeigen / verbergen]
wilcoxsign_test(paired_tbl$hungrig ~ paired_tbl$satt, paired = TRUE)
Asymptotic Wilcoxon-Pratt Signed-Rank Test
data: y by x (pos, neg)
stratified by block
Z = -2.0319, p-value = 0.04217
alternative hypothesis: true mu is not equal to 0
wilcox_test()
R Code [zeigen / verbergen]
::wilcox_test(jump_length ~ trt, data = paired_long_tbl, paired = TRUE) |>
rstatixselect(group1, group2, p)
# A tibble: 1 × 3
group1 group2 p
<chr> <chr> <dbl>
1 hungrig satt 0.0579
npar.t.test.paired()
R Code [zeigen / verbergen]
<- npar.t.test.paired(jump_length ~ trt, data = paired_long_tbl,
npar_obj plot.simci = FALSE)
#----------------Nonparametric Paired t Test-------------------------------------------#
- Sample Size: 5
- Factor Levels: hungrig satt
- H0: p=1/2
- Alternative Hypothesis: True relative effect is less or greater than 1/2
- Confidence Level: 95 %
- Method: Brunner-Munzel (BM), Permutation (PERM)
#--------------------------------------------------------------------------------------#
R Code [zeigen / verbergen]
$Analysis npar_obj
Lower p.hat Upper T p.value
BM 0.656 0.76 0.864 6.949 0.002
PERM 0.500 0.76 1.020 6.949 0.000
Parametrische Lösung: Der paired t-Test
R Code [zeigen / verbergen]
|>
paired_long_tbl mutate(ranked_jump_length = rank(jump_length)) |>
t_test(ranked_jump_length ~ trt, paired = TRUE) |>
select(group1, group2, statistic, p)
# A tibble: 1 × 4
group1 group2 statistic p
<chr> <chr> <dbl> <dbl>
1 hungrig satt -6.04 0.00378
35.7 Ergebnisse mit {tidyplots}
Häufig wollen wir nicht nur den p-Wert aus einem t-Test berichten sondern natürlich auch gleich die richtige Abbildung dazu haben. Hier gibt es mit dem R Paket {tidyplots}
eine gute Möglichkeit. Das R Paket verbindet dabei die Funktionalität von {ggplot}
und {ggpubr}
. Dabei bleibt es aber dann sehr einfahc zu bedienen. Insbesondere in dem Fall, dass du nur zwei Gruppen in einem t-Test miteinander vergleichen willst.
{tidyplots}
Das R Paket {ggpubr}
bietet auch noch andere Alternativen für die Darstellung von statistischen Vergleichen in deinen Daten unter ggpubr: ‘ggplot2’ Based Publication Ready Plots. Vielleicht findest du da auch noch eine bessere Abbildung als hier. Da wir hier sehr viel ähnliches haben, bleibe ich bei {tidyplots}
.
Neben den p-Werten, die ich hier mit der Funktion add_test_pvalue()
ergänze kannst du auch Sterne mit der Funktion add_test_asterisks()
nutzen. Das liegt dann ganz bei dir. Es geibt auch die Möglichkeit nicht signifikante Ergebnisse auszublenden. Mehr dazu findest du dann auf der Hilfeseite zu den statistischen Vergleichen in {tidyplots}
. Ich zeige hier dir nur die Standardanwendung. Wichtig ist auch zu wissen, dass wir immer einen Welch t-Test rechnen, also immer für die Varianzheterogenität adjustieren. Das ist auch eigentlich die bessere Variante als der Student t-Test. Häufig ist es sehr schwer in kleinen Fallzahlen abzuschätzen wie die Varianzen in den Gruppen sind. Dann lieber gleich richtig adjsutieren und auf der sicheren Seite sein.
Die Standardabbildung ist sicherlich der Barplot zusammen mit der Standardabweichung als Fehlerbalken. Dann habe ich noch die einzelnen Beobachtungen ergänzt. Die Klammer über den beiden Säulen gibt den Vergleich an und die Zahl ist der p-Wert aus einem Welch t-Test. Wir sehen hier, dass sich die beiden Floharten in den Sprungweiten signifikant unterscheiden. Der p-Wert ist kleiner als das Signifikanzniveau \(\alpha\) gleich 5%.
R Code [zeigen / verbergen]
tidyplot(data = fac1_tbl,
x = animal, y = jump_length, color = animal) |>
add_data_points() |>
add_mean_bar(alpha = 0.4, width = 0.4) |>
add_sd_errorbar(width = 0.2) |>
add_test_pvalue(method = "wilcox_test", hide_info = TRUE) |>
remove_legend() |>
adjust_font(fontsize = 9) |>
adjust_x_axis_title("Flohart") |>
adjust_y_axis_title("Sprungweite in [cm]") |>
rename_x_axis_labels(new_names = c("dog" = "Hund", "cat" = "Katze")) |>
adjust_size(width = NA, height = NA)
Es gibt auch gute Gründe ienmal den Boxplot zu wählen, wenn wir etwas besser die Verteilung der Sprungweiten darstellen wollen. Ich habe dann noch die einzelnen Beobachtungen ergänzt. Die Klammer über den beiden Säulen gibt den Vergleich an und die Zahl ist der p-Wert aus einem Welch t-Test. Wir sehen hier, dass sich die beiden Floharten in den Sprungweiten signifikant unterscheiden. Der p-Wert ist kleiner als das Signifikanzniveau \(\alpha\) gleich 5%.
R Code [zeigen / verbergen]
tidyplot(data = fac1_tbl,
x = animal, y = jump_length, color = animal) |>
add_data_points() |>
add_boxplot(alpha = 0.4, box_width = 0.3) |>
add_test_pvalue(method = "wilcox_test", hide_info = TRUE) |>
remove_legend() |>
adjust_font(fontsize = 9) |>
adjust_x_axis_title("Flohart") |>
adjust_y_axis_title("Sprungweite in [cm]") |>
rename_x_axis_labels(new_names = c("dog" = "Hund", "cat" = "Katze")) |>
adjust_size(width = NA, height = NA)
Am Ende wollen wir uns dann nochmal den gepaarten t-Test anschauen. Hier ist dann die Abbildung realtiv einfach. Wir können da die Daten paired_tbl
aus dem gepaarten t-Test nutzen nachdem wir die Daten in das Long-Format überführt haben. Etwas schwieriger ist dann der p-Wert, den p-Wert müssen wir dann erst selber errechnen und dann ergänzen. Also fangen wir einmal an die Daten in das Long-Format zu überführen.
R Code [zeigen / verbergen]
<- paired_tbl |>
paired_long_tbl pivot_longer(cols = satt:hungrig,
values_to = "jump_length",
names_to = "trt")
Jetzt können wir den gepaarten t-Test rechnen und zwar aus dem R Paket {rstatix}
. Dann müssen wir noch alles so umbauen, dass wir die Informationen dann in {tidyplots}
auch nutzen können.
R Code [zeigen / verbergen]
<- paired_long_tbl |>
stats_tbl arrange(id) |>
wilcox_test(jump_length ~ trt, paired = TRUE) |>
add_significance() |>
add_xy_position()
Wir butzen hier die Funktion stat_pvalue_manual()
um händisch die p-Werte zu den Dotplot mit den Mittelwert und Standardabweichung zu ergänzen. Die Verbindungen zwischen den Beobachtungen haben wir dann durch add_line()
erzeugt. Ich gebe zu, dass ist etwas komplizierter. Wenn du dann die Sterne haben willst, dann musst due das Label auf "p.signif"
setzen. Dann werden statt der p-Werte "p"
dir die Sterne *
angezeigt. Wir sehen hier, dass sich die beiden Fütterungslevel in den Sprungweiten signifikant unterscheiden. Der p-Wert ist kleiner als das Signifikanzniveau \(\alpha\) gleich 5%.
R Code [zeigen / verbergen]
|>
paired_long_tbl tidyplot(x = trt, y = jump_length, color = trt, fill = NA) |>
add_line(group = id, color = "grey") |>
add_data_points() |>
add_mean_dash(width = 0.2) |>
add_sd_errorbar(width = 0.2) |>
add(stat_pvalue_manual(stats_tbl, size = 7/.pt, label = "p",
bracket.nudge.y = 0.1)) |>
remove_legend() |>
adjust_font(fontsize = 9) |>
adjust_x_axis_title("Fütterung") |>
adjust_y_axis_title("Sprungweite in [cm]") |>
reorder_x_axis_labels("hungrig", "satt") |>
rename_x_axis_labels(new_names = c("satt" = "gefüttert", "hungrig" = "ungefüttert")) |>
adjust_size(width = NA, height = NA)