Illustration der Versuchsanordnung
head(cats_data, n=5)
## sID Haltung Futter Gewicht
## 1 1 Stubentiger Nassfutter 5.7282463
## 2 2 Stubentiger Nassfutter 4.9504955
## 3 3 Stubentiger Nassfutter 5.5875761
## 4 4 Stubentiger Nassfutter 0.8831313
## 5 5 Stubentiger Nassfutter 5.9744599
Anders als in der Übung enthält der Datensatz diesmal noch keine “Kombinationsspalte”. Es gibt lediglich Spalten für die beiden Faktoren “Haltung” und “Futter”. Wie kann man manuell eine “Kombinationsspalte” anlegen, die die Durchführung der Kontrastanalyse vereinfacht?
Der folgende Code illustriert, wie eine “Kombinationsspalte”, die zwei oder mehr bestehende Spalten kombiniert, angelegt werden kann. Zunächst wird das Vorgehen an einer Ausprägung der vier Kombinationen illustriert:
cats_data$Kombiniert[cats_data$Haltung== "Stubentiger" &
cats_data$Futter == "Nassfutter"] <- "Stubentiger_nass"
Sie können sich diesen Code wie folgt vorstellen: Zu Beginn der Funktion wird eine neue Spalte mit Namen “Kombiniert” definiert. Danach in “[]” spezifiziert man, welche Einträge in diese Spalte geschrieben werden sollen. Wie Sie sehen können, prüfen wir dazu ab, was in den Spalten “Haltung” und “Futter” steht. Sie können den Code, ähnlich wie in Excel, als eine “Wenn-Dann-Funktion” lesen: “WENN in der Spalte”Haltung" in einer Zeile “Stubentiger” steht UND WENN in der Spalte “Futter” in einer Zeile “Nassfutter” steht, DANN soll in die entsprechende Zeile der neuen Spalte “Kombination” der Eintrag “Stubentiger_nass” geschrieben werden.
Wenn Sie in den Datensatz klicken, werden Sie sehen, dass es die neue Kombinationsspalte gibt und dass in dieser Spalte immer “Stubentiger_nass” steht, wenn die definierten Bedingungen erfüllt sind. Für alle Zeilen, in denen die Bedingungen nicht erfüllt sind, stehen missing values.
Nach demselben Muster können nun die drei restlichen Kombinationen erstellt werden.
cats_data$Kombiniert[cats_data$Haltung== "Freigaenger" &
cats_data$Futter == "Nassfutter"] <- "Freigaenger_nass"
cats_data$Kombiniert[cats_data$Haltung== "Stubentiger" &
cats_data$Futter == "Trockenfutter"] <- "Stubentiger_trocken"
cats_data$Kombiniert[cats_data$Haltung== "Freigaenger" &
cats_data$Futter == "Trockenfutter"] <- "Freigaenger_trocken"
Es ist wichtig, dass Sie danach noch einmal im Datensatz prüfen, dass auch wirklich keine missing values mehr in der neuen Kombinationsspalte stehen. Falls das der Fall ist, ist irgendetwas schiefgegangen. Meist hat man irgendwo im Code einen Schreibfehler gemaccht.
Eine noch schnellere Variante wäre die folgende:
# dieser Code generiert noch einmal eine neue Kombinationsspalte und definiert sie sofort als Faktor
cats_data <- within(cats_data, Kombiniert_neu <- factor(Haltung:Futter))
Wenn die Kombinationsspalte erfstellt ist, können Sie die Kontrastanalyse rechnen. Zunächst wird die neue Spalten unten noch als Faktor definiert.
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 “Kombination” 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$Kombiniert) <- .Contrasts
remove(.Contrasts)
Danach lineares Modell anpassen und Output anzeigen lassen.
KontrastModell <- lm(Gewicht ~ Kombiniert, data=cats_data)
summary(KontrastModell)
##
## Call:
## lm(formula = Gewicht ~ Kombiniert, 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 ***
## KombiniertFutter 0.6262 0.1478 4.237 2.82e-05 ***
## KombiniertHaltung 1.0434 0.1478 7.060 7.51e-12 ***
## KombiniertInteraktion 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.
Zur Erinnerung: Wenn keine Kombinationsspalte vorliegt, kann man auch auf schnellem Weg eine Kontrastanalyse machen, wenn man “Differenz” in R-Commander auswählt. Die t- und p-Werte bleiben identisch. Nur die Estimates sind anders.
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