Rangsummenbildung
# A tibble: 3 × 2
Species sum_ranks
<fct> <dbl>
1 setosa 1482
2 versicolor 4132.
3 virginica 5710.
Data Science 2
Saskia Otto & Monika Eberhard
Universität Hamburg, IMF & IZS
Sommersemester 2025
Nach Abschluss dieser VL und Übung..
Hat der Käfigtyp einen Einfluss auf das mittlere Gewicht des Atlantischen Lachses (Salmo salar) bzw. gibt es Unterschiede im durchschnittlichen Lachsgewicht zwischen den vier getesteten Käfigtypen?
‘Familywise Error Rate’ (FWER)
H=\frac{12}{N*(N+1)}*\left( \sum\frac{R_i^2}{n_i} \right)-3*(N+1)
N = Gesamter Stichprobenumfang, n_i = Anzahl Messung pro Gruppe i, R_i = Summe der Ränge pro Gruppe i
Rangsummenbildung
# A tibble: 3 × 2
Species sum_ranks
<fct> <dbl>
1 setosa 1482
2 versicolor 4132.
3 virginica 5710.
kruskal.test()
Vektorsyntax
Kruskal-Wallis rank sum test
data: iris$Sepal.Length and iris$Species
Kruskal-Wallis chi-squared = 97, df = 2, p-value <2e-16
F_r=\left( \frac{12}{n*k*(k+1)}*\left( \sum R_i^2\right)\right)-3*n*(k+1)
n = Anzahl der Blöcke, k = Anzahl der Gruppen, R_i = Summe der Ränge pro Gruppe i
01:30
Es soll die Hypothese getestet werden, dass sich die durchschnittliche Kronblattweite der drei Iris Arten unterscheidet.
Kruskal-Wallis rank sum test
data: Petal.Width by Species
Kruskal-Wallis chi-squared = 131, df = 2, p-value <2e-16
factor
definieren!Replikat | Typ A | Typ B | Typ C | Typ D |
---|---|---|---|---|
1 | 2.0 | 2.7 | 2.9 | 2.2 |
2 | 2.7 | 2.0 | 1.9 | 2.0 |
3 | 2.2 | 3.8 | 2.7 | 3.1 |
4 | 3.1 | 1.5 | 2.5 | 2.7 |
… | … | … | … | … |
Gruppenmittelwert | 2.5 | 2.5 | 2.5 | 2.5 |
Gruppenvarianz | 0.25 | 0.99 | 0.19 | 0.25 |
Replikat | Typ A | Typ B | Typ C | Typ D |
---|---|---|---|---|
1 | 5.0 | 4.1 | 2.9 | 0.8 |
2 | 5.0 | 4.1 | 2.9 | 0.8 |
3 | 5.0 | 4.1 | 2.9 | 0.8 |
4 | 5.0 | 4.1 | 2.9 | 0.8 |
… | … | … | … | … |
Gruppenmittelwert | 5.0 | 4.1 | 2.9 | 0.8 |
Gruppenvarianz | 0 | 0 | 0 | 0 |
Sources of variation | SS | df | MS | F |
---|---|---|---|---|
Groups (between) | n_i\sum_{i=1}^{p}(\bar{y_i}-\bar{y})^2 | p-1 | \frac{SS_{Groups}}{(p-1)} | \frac{MS_{Groups}}{MS_{Residuals}} |
Residuals (within) | \sum_{i=1}^{p}\sum_{j=1}^{n}(y_{ij}-\bar{y_i})^2 | p(n-1) | \frac{SS_{Residuals}}{p(n-1)} | |
Total | \sum_{i=1}^{p}\sum_{j=1}^{n}(y_{ij}-\bar{y})^2 | pn-1 |
Sources of variation | SS | df | MS | F | p |
---|---|---|---|---|---|
Groups | 50.66 | 4-1 | 16.888 | 83.77 | <2e-16 |
Residuals (or within) | 18.55 | 4*(24-1) | 0.202 | ||
Total | 69.21 | 4*24-1 |
aov()
Nachdem sich zeigte, dass alle Annahmen erfüllt sind, kann die ANOVA durchgeführt werden:
Testen auf Normalverteilung INNERHALB JEDER Stichprobe mittels Shapiro-Wilk-Test:
Shapiro-Wilk normality test
data: salmon$weight[salmon$cages == "A"]
W = 1, p-value = 0.7
Shapiro-Wilk normality test
data: salmon$weight[salmon$cages == "B"]
W = 1, p-value = 0.8
Shapiro-Wilk normality test
data: salmon$weight[salmon$cages == "C"]
W = 1, p-value = 0.8
Shapiro-Wilk normality test
data: salmon$weight[salmon$cages == "D"]
W = 1, p-value = 0.5
→ Es kann bei allen vier Tests die H0 angenommen werden: die Daten sind jeweils normal verteilt.
Testen auf Varianzhomogenität ZWISCHEN den Stichproben mittels Levene-Test:
Levene's Test for Homogeneity of Variance (center = median)
Df F value Pr(>F)
group 3 0.53 0.66
92
→ Die H0 kann angenommen werden: die Daten sind varianzhomogen.
'data.frame': 96 obs. of 2 variables:
$ cages : Factor w/ 4 levels "A","B","C","D": 1 1 1 1 1 1 1 1 1 1 ...
$ weight: num 2.72 2.88 3.78 3.04 3.06 ...
cages weight
1 A 2.72
2 A 2.88
3 A 3.78
4 A 3.04
5 A 3.06
6 A 3.86
7 A 3.23
8 A 2.37
9 A 2.66
10 A 2.78
11 A 3.61
12 A 3.18
13 A 3.20
14 A 3.06
15 A 2.72
16 A 3.89
17 A 3.25
18 A 2.02
19 A 3.35
20 A 2.76
21 A 2.47
22 A 2.89
23 A 2.49
24 A 2.64
25 B 3.19
26 B 2.66
27 B 3.92
28 B 3.58
29 B 2.93
30 B 4.13
31 B 3.71
32 B 3.35
33 B 3.95
34 B 3.94
35 B 3.91
36 B 3.84
37 B 3.78
38 B 3.47
39 B 3.35
40 B 3.31
41 B 3.15
42 B 3.40
43 B 2.87
44 B 4.58
45 B 4.10
46 B 2.94
47 B 3.30
48 B 3.27
49 C 4.89
50 C 4.46
51 C 4.63
52 C 4.49
53 C 4.48
54 C 5.18
55 C 4.39
56 C 5.26
57 C 3.73
58 C 4.79
59 C 4.56
60 C 4.61
61 C 4.69
62 C 4.25
63 C 4.33
64 C 3.99
65 C 3.96
66 C 4.65
67 C 4.72
68 C 4.53
69 C 4.96
70 C 5.53
71 C 4.25
72 C 3.35
73 D 3.00
74 D 2.15
75 D 2.16
76 D 3.01
77 D 2.36
78 D 1.89
79 D 2.59
80 D 2.43
81 D 2.50
82 D 2.69
83 D 2.31
84 D 2.82
85 D 2.39
86 D 2.67
87 D 3.05
88 D 2.72
89 D 2.34
90 D 3.07
91 D 3.00
92 D 2.77
93 D 2.62
94 D 2.19
95 D 3.18
96 D 2.20
Diese Diagnostikplots sind bei der 1-faktoriellen ANOVA allerdings nicht so wichtig.
\eta^2 = \frac{SS_{Groups}}{SS_{Total}}
plot.design()
Alternative Formulierung der H0
\alpha_{adj} = \frac{\text{Signifikanzniveau}~\alpha}{\text{Anzahl der durchgeführten Tests}} \Rightarrow \frac{0.05}{5} = 0.01
p.adjust()
wandelt unkorrigierte p-Werte in korrigierte mittels Bonferroni-, Bonferroni-Holm- und weiteren Korrekturen um.Zuerst müssen die p-Werte der paarweisen t-Tests extrahiert werden:
# Datensatz ins weite Format bringen
sw <- salmon |> mutate(id = rep(1:24, 4)) |>
pivot_wider(names_from = "cages", values_from = "weight")
# p-Werte der paarweisen t-Tests im Vektor speichern
p_vals <- c(
t.test(sw$A, sw$B, equal.var = TRUE)$p.value,
t.test(sw$A, sw$C, equal.var = TRUE)$p.value,
t.test(sw$A, sw$D, equal.var = TRUE)$p.value,
t.test(sw$B, sw$C, equal.var = TRUE)$p.value,
t.test(sw$B, sw$D, equal.var = TRUE)$p.value,
t.test(sw$C, sw$D, equal.var = TRUE)$p.value
)
Nun kann die p.adjust()
Funktion angewendet werden:
TukeyHSD()
Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = weight ~ cages, data = salmon)
$cages
diff lwr upr p adj
B-A 0.530 0.191 0.8691 0.001
C-A 1.532 1.193 1.8715 0.000
D-A -0.408 -0.747 -0.0687 0.012
C-B 1.002 0.663 1.3415 0.000
D-B -0.938 -1.277 -0.5987 0.000
D-C -1.940 -2.279 -1.6010 0.000
Bei weiteren Fragen: saskia.otto(at)uni-hamburg.de
Diese Arbeit is lizenziert unter einer Creative Commons Attribution-ShareAlike 4.0 International License mit Ausnahme der entliehenen und mit Quellenangabe versehenen Abbildungen.
Kurswebseite: Data Science 2