Ein Team von Tierärztinnen der University of St. Meow möchte erforschen, welchen Einfluss das verabreichte Futter (Nassfutter vs. Trockenfutter) sowie die Haltungsweise (Freigänger vs. Stubentiger) auf das Körpergewicht von Katzen haben.
Die Forscherinnen haben 400 Katzen zufällig auf adoptionswillige Haushalte verteilt, sobald sie im abgabefähigen Alter waren (ca. 15 Wochen nach der Geburt, nach Ahola, Vapalahiti, & Lohi, 2017).
Die Haushalte erhielten die Anweisung, entweder ausschließlich Trockenfutter oder ausschließlich Nassfutter zu verabreichen. Weiterhin wurden sie angewiesen, die Katze entweder als Freigänger aufzuziehen oder sie ausschließlich im Haus zu halten. Die Einhaltung der Anweisungen wurde kontrolliert.
Nach einem Jahr wurden alle Katzen gewogen.
Illustration der Versuchsanordnung
Die Tierärztinnen stellten folgende Hypothesen auf:
1. Die Fütterung von Nassfutter führt zu einem höheren Gewicht als die Fütterung von Trockenfutter.
2. Die Haltung als Stubentiger führt zu einem höheren Gewicht als die Haltung als Freigänger.
3. Bei Stubentigern hat das (Nass-) Futter einen stärkeren Einfluss auf das Gewicht als bei Freigängern.
(Referenzen: Ahola, M. K., Vapalahti, K., & Lohi, H. (2017). Early weaning increases aggression and stereotypic behaviour in cats. Scientific reports, 7(1), 10412.)
Stellen Sie die statistischen Hypothesen auf.
Erstellen Sie drei Diagramme mit Mittelwerten und 95% Konfidenzintervallen:
Testen Sie die drei Hypothesen mittels Kontrastanalysen.
Berechnen Sie die Effektgrößen.
Haupteffekt-Kontrast “Art der Fütterung”:
H1,1: Kontrast HE Fütterung (D) > 0
H0,1: Kontrast HE Fütterung (D) <= 0
Haupteffekt-Kontrast “Art der Haltung”:
H1,2: Kontrast HE Haltung (D) > 0
H0,2: Kontrast HE Haltung (D) <= 0
Interaktions-Kontrast “Art der Fütterung x Haltung”:
H1,3: Kontrast IE (D) > 0
H0,3: Kontrast IE (D) <= 0
Anmerkung: Diese Hypothesen sind im Gegensatz zu denen der Varianzanalyse gerichtet.
with(cats_data, plotMeans(Gewicht, Futter, error.bars="conf.int", level=0.95, connect=TRUE))
Katzen, die mit Nassfutter gefüttert werden, scheinen ein höheres Gewicht zu haben als Katzen, die sich mit Trockenfutter begnügen müssen. Ein Tabelle mit deskriptiven Statistiken liefert die Mittelwerte.
with(cats_data, tapply(Gewicht, list(Futter), mean, na.rm=TRUE))
## Nassfutter Trockenfutter
## 4.771487 4.145290
with(cats_data, plotMeans(Gewicht, Haltung, error.bars="conf.int", level=0.95, connect=TRUE))
Stubentiger scheinen ein höheres Gewicht zu haben als Katzen, die sich draußen austoben dürfen. Ein Tabelle mit deskriptiven Statistiken liefert die Mittelwerte.
with(cats_data, tapply(Gewicht, list(Haltung), mean, na.rm=TRUE))
## Stubentiger Freigaenger
## 4.980095 3.936682
Kann man diese Aussagen so “nach außen” kommunizieren? Sind das sinnvolle Schlussfolgerungen?
Art der Fütterung auf X-Achse:
with(cats_data, plotMeans(Gewicht, Haltung, Futter, error.bars="conf.int", level=0.95, connect=TRUE))
Deskriptive Werte:
with(cats_data, tapply(Gewicht, list(Haltung,Futter), mean, na.rm=TRUE))
## Nassfutter Trockenfutter
## Stubentiger 5.563975 4.396215
## Freigaenger 3.978999 3.894365
Definiere zu berechnenden Kontrast -> Datenmanagement -> Variablen bearbeiten -> Definiere Kontraste –> “Andere” auswählen
Wichtig: In der Auswahlliste müssen Sie die Faktorvariable “Katze” auswählen, da diese die Kombinationsspalte darstellt.
Die zu definierenden Kontrastgewichte für die beiden HE und die IE könnten Sie der Tabelle in der Formelsammlung (S.1) entnehmen. Die Abbildung unten zeigt einen Screenshot aus der Formelsammlung.
Tabelle der Kontrastgewichte
HE Futter:
M_Nassfutter - M_Trockenfutter > 0
Die beiden Mittelwerte setzen sich aber jeweils aus zwei Gruppen zusammen. Jede davon soll gleich gewichtet werden und die Summe der Kontrastgewichte soll 0 sein und die Summe der absoluten Werte soll 2 sein (und somit identisch zum t-Test für unabhängige Stichproben).
(0.5 * M_StubNass + 0.5 * M_FreiNass) - (0.5 * M_StubTro + 0.5 * M_FreiTro) > 0
0.5 * M_StubNass + 0.5 * M_FreiNass - 0.5 * M_StubTro - 0.5 * M_FreiTro > 0
0.5 * 5.563975 + 0.5 * 3.978999 - 0.5 * 4.396215 - 0.5 * 3.894365 = 0.6262
Sie sehen hoffentlich, dass die letzte Zeile oben genau dasselbe ist wie:
(5.563975 + 3.978999)/2 - (4.396215 + 3.894365)/2 = 0.6262
D.h., durch die Multiplikation der einzelnen Gruppenmittelwerte eines Paars mit |0.5| und der anschließenden Summierung passiert nichts anderes, als den Mittelwert der beiden Mittelwerte zu bestimmen.
HE Haltung:
M_Stubentiger - M_Freigaenger > 0
Die beiden Mittelwerte setzen sich aber jeweils aus zwei Gruppen zusammen. Jede davon soll gleich gewichtet werden und die Summe der Kontrastgewichte soll 0 sein und die Summe der absoluten Werte soll 2 sein (und somit identisch zum t-Test für unabhängige Stichproben).
(0.5 * M_StubNass + 0.5 * M_StubTro) - (0.5 * M_FreiNass + 0.5 * M_FreiTro) > 0
0.5 * M_StubNass + 0.5 * M_StubTro - 0.5 * M_FreiNass - 0.5 * M_FreiTro > 0
0.5 * 5.563975 + 0.5 * 4.396215 - 0.5 * 3.978999 - 0.5 * 3.894365 = 1.0434
IE Futter x Haltung:
Merke: Art der Fütterung soll bei Stubentiger einen stärken Effekt haben als bei Freigängern. Die Gewichtszunahme bei Gabe von Nassfutter soll bei Stubentigern stärker sein als bei Freigängern. Das heißt für die Mittelwertsvergleiche folgendes:
(0.5 * M_StubNass - 0.5 * M_StubTro) - (0.5 * M_FreiNass - 0.5 * M_FreiTro) > 0
0.5 * M_StubNass - 0.5 * M_StubTro - 0.5 * M_FreiNass + 0.5 * M_FreiTro > 0
0.5 * 5.563975 - 0.5 * 4.396215 - 0.5 * 3.978999 + 0.5 * 3.894365 = 0.5416
.Contrasts <- matrix(c(0.5,-0.5,0.5,-0.5,0.5,0.5,-0.5,-0.5,0.5,-0.5,-0.5,
0.5), 4, 3)
colnames(.Contrasts) <- c('Futter', 'Haltung', 'Interaktion')
contrasts(cats_data$Katze) <- .Contrasts
remove(.Contrasts)
Danach lineares Modell anpassen und Output anzeigen lassen.
KontrastModell <- lm(Gewicht ~ Katze, data=cats_data)
summary(KontrastModell)
##
## Call:
## lm(formula = Gewicht ~ Katze, data = cats_data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.6808 -0.9177 -0.0367 0.9597 4.2277
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.4584 0.0739 60.333 < 2e-16 ***
## KatzeFutter 0.6262 0.1478 4.237 2.82e-05 ***
## KatzeHaltung 1.0434 0.1478 7.060 7.51e-12 ***
## KatzeInteraktion 0.5416 0.1478 3.664 0.000282 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.478 on 396 degrees of freedom
## Multiple R-squared: 0.1702, Adjusted R-squared: 0.1639
## F-statistic: 27.07 on 3 and 396 DF, p-value: 6.012e-16
Interpretation der Estimates Outputs:
Intercept: “Grand Mean” oder “Gesamtmittelwert” oder “Mittelwert der Spalte Gewicht”
KatzeFutter: Differenz der beiden “Futtermittelwerte” (Nass- vs. Trockenfutter) (s. HE Abbildung für Futter).
KatzeHaltung: Differenz der beiden “Haltungsmittelwerte” (Stubentiger vs. Freigaenger) (s. HE Abbildung für Haltung).
KatzeInteraktion: Halbe Differenz der Differenzen. (0.5 * M_StubNass - 0.5 * M_StubTro) - (0.5 * M_FreiNass - 0.5 * M_FreiTro) = 0.541563.
contrasts(cats_data$Futter) <- "contr.Sum"
contrasts(cats_data$Haltung) <- "contr.Sum"
KontrastModell_Diff <- lm(Gewicht ~ Futter * Haltung, data=cats_data)
summary(KontrastModell_Diff)
##
## Call:
## lm(formula = Gewicht ~ Futter * Haltung, data = cats_data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.6808 -0.9177 -0.0367 0.9597 4.2277
##
## Coefficients:
## Estimate Std. Error t value
## (Intercept) 4.4584 0.0739 60.333
## Futter[S.Nassfutter] 0.3131 0.0739 4.237
## Haltung[S.Stubentiger] 0.5217 0.0739 7.060
## Futter[S.Nassfutter]:Haltung[S.Stubentiger] 0.2708 0.0739 3.664
## Pr(>|t|)
## (Intercept) < 2e-16 ***
## Futter[S.Nassfutter] 2.82e-05 ***
## Haltung[S.Stubentiger] 7.51e-12 ***
## Futter[S.Nassfutter]:Haltung[S.Stubentiger] 0.000282 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.478 on 396 degrees of freedom
## Multiple R-squared: 0.1702, Adjusted R-squared: 0.1639
## F-statistic: 27.07 on 3 and 396 DF, p-value: 6.012e-16
t- und p-Values bleiben gleich aber die Estimates haben sich im Vgl. zu vorher halbiert.
Um zu illustrieren, was bei der Analyse im Hintergrund passiert ist, schauen wir uns an, wie der Output eines linearen Modells aussieht, das als Prädiktoren auf neue Spalten im Datensatz zugreift, die die Kontrastgewichte auflisten.
# Neue Spalten mit Kontrastgewichten hinzufügen
# HE für Futter
cats_data$HE_Futter[cats_data$Futter=="Nassfutter"] <- 0.5
cats_data$HE_Futter[cats_data$Futter=="Trockenfutter"] <- -0.5
# HE für Haltung
cats_data$HE_Haltung[cats_data$Haltung=="Stubentiger"] <- 0.5
cats_data$HE_Haltung[cats_data$Haltung=="Freigaenger"] <- -0.5
# IE Futter x Haltung
cats_data$IE_FutterHaltung[cats_data$Haltung=="Stubentiger" & cats_data$Futter=="Nassfutter"] <- 0.5
cats_data$IE_FutterHaltung[cats_data$Haltung=="Stubentiger" & cats_data$Futter=="Trockenfutter"] <- -0.5
cats_data$IE_FutterHaltung[cats_data$Haltung=="Freigaenger" & cats_data$Futter=="Nassfutter"] <- -0.5
cats_data$IE_FutterHaltung[cats_data$Haltung=="Freigaenger" & cats_data$Futter=="Trockenfutter"] <- 0.5
# lineares Modell mit diesen neuen Spalten als (additive) Prädiktoren
KontrastModell2 <- lm(Gewicht ~ HE_Futter + HE_Haltung + IE_FutterHaltung, data=cats_data)
summary(KontrastModell2)
##
## Call:
## lm(formula = Gewicht ~ HE_Futter + HE_Haltung + IE_FutterHaltung,
## data = cats_data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.6808 -0.9177 -0.0367 0.9597 4.2277
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.4584 0.0739 60.333 < 2e-16 ***
## HE_Futter 0.6262 0.1478 4.237 2.82e-05 ***
## HE_Haltung 1.0434 0.1478 7.060 7.51e-12 ***
## IE_FutterHaltung 0.5416 0.1478 3.664 0.000282 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.478 on 396 degrees of freedom
## Multiple R-squared: 0.1702, Adjusted R-squared: 0.1639
## F-statistic: 27.07 on 3 and 396 DF, p-value: 6.012e-16
Wie Sie sehen, sieht der Output genau gleich aus.
Was wäre passiert, wenn wir anstatt “0.5” z.B. “1” als Kontrastgewichte gewählt hätten.
# Neue Spalten mit Kontrastgewichten hinzufügen
# HE für Futter
cats_data$HE_Futter2[cats_data$Futter=="Nassfutter"] <- 1
cats_data$HE_Futter2[cats_data$Futter=="Trockenfutter"] <- -1
# HE für Haltung
cats_data$HE_Haltung2[cats_data$Haltung=="Stubentiger"] <- 1
cats_data$HE_Haltung2[cats_data$Haltung=="Freigaenger"] <- -1
# IE Futter x Haltung
cats_data$IE_FutterHaltung2[cats_data$Haltung=="Stubentiger" & cats_data$Futter=="Nassfutter"] <- 1
cats_data$IE_FutterHaltung2[cats_data$Haltung=="Stubentiger" & cats_data$Futter=="Trockenfutter"] <- -1
cats_data$IE_FutterHaltung2[cats_data$Haltung=="Freigaenger" & cats_data$Futter=="Nassfutter"] <- -1
cats_data$IE_FutterHaltung2[cats_data$Haltung=="Freigaenger" & cats_data$Futter=="Trockenfutter"] <- 1
# lineares Modell mit diesen neuen Spalten als (additive) Prädiktoren
KontrastModell3 <- lm(Gewicht ~ HE_Futter2 + HE_Haltung2 + IE_FutterHaltung2, data=cats_data)
summary(KontrastModell3)
##
## Call:
## lm(formula = Gewicht ~ HE_Futter2 + HE_Haltung2 + IE_FutterHaltung2,
## data = cats_data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.6808 -0.9177 -0.0367 0.9597 4.2277
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.4584 0.0739 60.333 < 2e-16 ***
## HE_Futter2 0.3131 0.0739 4.237 2.82e-05 ***
## HE_Haltung2 0.5217 0.0739 7.060 7.51e-12 ***
## IE_FutterHaltung2 0.2708 0.0739 3.664 0.000282 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.478 on 396 degrees of freedom
## Multiple R-squared: 0.1702, Adjusted R-squared: 0.1639
## F-statistic: 27.07 on 3 and 396 DF, p-value: 6.012e-16
Die Estimates halbieren sich. Da sich aber auch der Std. Error halbiert, bleiben die t-Werte (und somit p-Werte) identisch.
Was wäre passiert, wenn wir anstatt “0.5” für die HE Kontraste und “0.25” für den IE Kontrast gewählt hätten?
# Neue Spalten mit Kontrastgewichten hinzufügen
# HE für Futter
cats_data$HE_Futter3[cats_data$Futter=="Nassfutter"] <- 0.5
cats_data$HE_Futter3[cats_data$Futter=="Trockenfutter"] <- -0.5
# HE für Haltung
cats_data$HE_Haltung3[cats_data$Haltung=="Stubentiger"] <- 0.5
cats_data$HE_Haltung3[cats_data$Haltung=="Freigaenger"] <- -0.5
# IE Futter x Haltung
cats_data$IE_FutterHaltung3[cats_data$Haltung=="Stubentiger" & cats_data$Futter=="Nassfutter"] <- 0.25
cats_data$IE_FutterHaltung3[cats_data$Haltung=="Stubentiger" & cats_data$Futter=="Trockenfutter"] <- -0.25
cats_data$IE_FutterHaltung3[cats_data$Haltung=="Freigaenger" & cats_data$Futter=="Nassfutter"] <- -0.25
cats_data$IE_FutterHaltung3[cats_data$Haltung=="Freigaenger" & cats_data$Futter=="Trockenfutter"] <- +0.25
# lineares Modell mit diesen neuen Spalten als (additive) Prädiktoren
KontrastModell4 <- lm(Gewicht ~ HE_Futter3 + HE_Haltung3 + IE_FutterHaltung3, data=cats_data)
summary(KontrastModell4)
##
## Call:
## lm(formula = Gewicht ~ HE_Futter3 + HE_Haltung3 + IE_FutterHaltung3,
## data = cats_data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.6808 -0.9177 -0.0367 0.9597 4.2277
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.4584 0.0739 60.333 < 2e-16 ***
## HE_Futter3 0.6262 0.1478 4.237 2.82e-05 ***
## HE_Haltung3 1.0434 0.1478 7.060 7.51e-12 ***
## IE_FutterHaltung3 1.0831 0.2956 3.664 0.000282 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.478 on 396 degrees of freedom
## Multiple R-squared: 0.1702, Adjusted R-squared: 0.1639
## F-statistic: 27.07 on 3 and 396 DF, p-value: 6.012e-16
Die Estimates für die HE geben jetzt wieder die Mittelwertsdifferenzen an. Der Estimate für den IE gibt jetzt auch die tatsächliche Differenz der Differenzen an.
Eine Möglichkeit ist, die jeweiligen Effektstärken der Varianzanalyse zu berechnen (d.h., partielle Eta-Quadrate).
# Der Vollständigkeit halber hier zunächst noch die ANOVA Analyse für das letzte Kontrastmodell.
# Das ist dasselbe Ergebnis wie in der letzten Sitzung.
Anova(KontrastModell4)
## Anova Table (Type II tests)
##
## Response: Gewicht
## Sum Sq Df F value Pr(>F)
## HE_Futter3 39.21 1 17.952 2.820e-05 ***
## HE_Haltung3 108.87 1 49.844 7.513e-12 ***
## IE_FutterHaltung3 29.33 1 13.428 0.0002817 ***
## Residuals 864.96 396
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
library(lsr)
etaSquared(KontrastModell4)
## eta.sq eta.sq.part
## HE_Futter3 0.03761823 0.04336806
## HE_Haltung3 0.10444538 0.11179657
## IE_FutterHaltung3 0.02813682 0.03279593
Für gerichtete Kontrastanalysen bietet es sich aber eigentlich an, Cohens’d zu berechnen (s. dazu S. 2 in der Formelsammlung).
Wir benötigen dafür:
die “D” Werte (also die Kontraste). Diese entsprechen den Estimates in unseren Kontrast-Outputs.
siB. Wie Sie der Formelsammlung entnehmen können, ist siB = wurzel(QS_res/df_res). QS_res und df_res können wir dem Output der “ANOVA()” Funktion entnehmen.
# siB
siB <- sqrt(864.96/396)
Cohen’s d für HE Futter:
# Cohen's d für HE Futter:
d_Futter <- 0.6262/siB
d_Futter # kleiner bis mittlerer Effekt
## [1] 0.4237041
Cohen’s d für HE Haltung:
# Cohen's d für HE Haltung:
d_Haltung <- 1.0434/siB
d_Haltung # mittlerer bis großer Effekt
## [1] 0.705993
Cohen’s d für IE Futter x Haltung:
# Cohen's d für IE Futter x Haltung:
# Achtung: hier wird für D der zunächst der Estimate der Kontrastanalyse verwendet, in der "0.5" für die Kontrastgewichte verwendet wurde.
d_Interaktion <- 0.5416/siB
d_Interaktion # kleiner Effekt
## [1] 0.3664614
Wie würde man die Ergebnisse der durchgeführten Analyse z.B. in einer Bachelorarbeit oder in einem Journalartikel berichten?
Hier ein Beispiel, wie das in einer Bachelorarbeit aussehen könnte:
Ergebnisse und Interpretation:
Abb. 1 Gruppenmittelwerte und 95% CI
Eine grafische Übersicht über die Gruppenmittelwerte ist in Abb. 1 dargestellt. Deskriptive Statistiken sind in Tab. 1 aufgeführt.
Tab. 1
Mittelwerte und Standardabweichungen
Fütterung | Stubentiger | Freigänger |
---|---|---|
Nassfutter | 5.56 (SD = 1.63) | 3.98 (SD = 1.49) |
Trockenfutter | 4.40 (SD = 1.44) | 3.89 (SD = 1.34) |
Es wurde für jeden der vorhergesagten Effekte eine Kontrastanalyse berechnet. Diese Analyse ergab einen signifikanten Haupteffekt für den Faktor “Art der Fütterung”. Katzen, die mit Nassfutter gefüttert werden, wiegen mehr als Katzen, die Trockenfutter bekommen, Delta-M = 0.626, t(396) = 4.237, p < .001 (einseitig), d = 0.424. Außerdem zeigte sich ein signifikanter Haupteffekt für “Art der Haltung”. Stubentiger wiegen im Durchschnitt mehr als Freigänger, Delta-M = 1.043, t(396) = 7.060, p < .001 (einseitig), d = 0.706. Die Interaktion zwischen “Art der Haltung” und “Art der Fütterung” war ebenfalls signifikant. Die Art der Fütterung wirkt sich bei Stubentigern stärker aus als bei Freigängern, t(396) = 3.664, p < .001 (einseitig), d = 0.366. Wie Abbildung 1 zeigt, lässt sich der Haupteffekt für “Art der Fütterung” vor allem durch die Interkation beider Faktoren erklären. Es zeigt sich, dass die Fütterung mit Nassfutter nur bei Stubentigern mit einem höheren Gewicht assoziiert ist, während die Art der Fütterung bei Freigängern keine Gewichtsunterschiede erklärt. Der Haupteffekt für “Art der Haltung” ist hingegen global interpretierbar; Stubentiger wiegen, egal welches Futter sie bekommen, im Schnitt mehr als Freigänger. Allerdings ist der Unterschied nur sehr gering, wenn mit Trockenfutter gefüttert wird.