Unser Katzendatensatz ohne Kombinationsspalte

Illustration der Versuchsanordnung

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?

Manuelles Anlegen einer Kombinationsspalte

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))

Danach ganz normal weiter

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

Kontraste definieren via R-Commander

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

Tabelle der Kontrastgewichte

Logik:

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.

Analyse mit voreingestellten Kontrsaten “Differenz”

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