“It’s better to solve the right problem approximately than to solve the wrong problem exactly.” — John Tukey
Eigentlich hat sich die Analysis of Covariance (ANCOVA) etwas überlebt. Wir können mit dem statistischen Modellieren eigentlich alles was die ANCOVA kann plus wir erhalten auch noch Effektschätzer für die Kovariaten und die Faktoren. Dennoch hat die ANCOVA ihren Platz in der Auswertung von Daten. Wenn du ein oder zwei Faktoren hast plus eine numerische Variable, wie das Startgewicht, für die du die Analyse adjustieren möchtest, dann ist die ANCOVA für dich gemacht.
Also kurz gesprochen adjustiert die Analysis of Covariance (ANCOVA) die Faktoren einer ANOVA um eine kontinuierliche Covariate. Eine Kovariate ist eine Variable, die mit berücksichtigt wird, um mögliche verzerrende Einflüsse auf die Analyseergebnisse (ungebräuchlich Konfundierung) abzuschätzen oder zu verringern. Adjustiert bedeutet in dem Fall, dass die Effekte des unterschiedlichen Startgewichts von Pflanzen durch das Einbringen der Kovariate mit in der statistischen Analyse berücksichtigt werden. Wir werden hier auch nur über die Nutzung in R sprechen und auf die theoretische Herleitung verzichten.
Wie immer gibt es auch passende Literatur um die ANCOVA herum. Karpen (2017) beschreibt in Misuses of Regression and ANCOVA in Educational Research nochmal Beispiele für die falsche oder widersprüchliche Nutzung der Regression und ANCOVA. Ich nutze die Quelle immer mal wieder in meinen vertiefenden Vorlesungen. Da wir hier ja nicht nur Agrawissenschaftler haben, hilft die Arbeit von Kim (2018) mit Statistical notes for clinical researchers: analysis of covariance (ANCOVA) auch nochmal weiter. Die Besonderheit bei der klinischen Forschung ist ja die “Beweglichkeit” der Beobachtungen. Menschen lassen sich eben nicht vollständig kontrollieren und daher ist die Thematik eine andere als bei Pflanzen und Tieren.
Schauen wir uns nun einmal das Modell der ANCOVA an. Wir können die einfaktorielle ANCOVA in folgender Form schreiben. Wir haben haben einen Faktor \(x_1\) und eine Kovariate oder aber ein numerisches \(x_2\). Damit sähe die ANCOVA wie folgt aus.
\[
y \sim x_1 + x_2
\]
Damit ist die ANCOVA aber sehr abstrakt beschrieben. Der eine Faktor kommt damit gar nicht zur Geltung. Deshalb schreiben wir die ANCOVA wie folgt mit einem \(f_1\) für den Faktor und einem \(c_1\) für eine numerische Kovariate. Damit haben wir einen bessere Übersicht.
\[
y \sim f_1 + c_1
\]
Somit erklärt sich die zweifaktorielle ANCOVA schon fast von alleine. Wir erweitern einfach das Modell um einen zweiten Faktor \(f_2\) und haben somit eine zweifaktorielle ANCOVA.
\[
y \sim f_1 + f_2 + c_1
\]
Im Folgenden schauen wir uns einmal die Daten und die Hypothesen zu einer möglichen Fragestellung an.
Weitere Tutorien für die ANCOVA
Wie immer gibt es auch für die Frage nach dem Tutorium für die ANCOVA verschiedene Quellen. Ich kann noch folgende Informationen und Hilfen empfehlen.
An der Seite des Kapitels findest du den Link Quellcode anzeigen, über den du Zugang zum gesamten R-Code dieses Kapitels erhältst.
31.2 Daten
Für unser Beispiel nutzen wir die Daten der Sprungweite in [cm] von Flöhen auf Hunde-, Katzen- und Füchsen. Damit haben wir den ersten Faktor animal mit drei Leveln. Als Kovariate schauen wir uns das Gewicht als numerische Variable an. Schlussendlich brauchen wir noch das Outcome jump_length als \(y\). Für die zweifaktorielle ANCOVA nehmen wir noch den Faktor sex mit zwei Leveln hinzu.
In der Tabelle 59.1 ist der Datensatz ancova_tbl nochmal dargestellt.
Tabelle 31.1— Datensatz zu der Sprunglänge in [cm] von Flöhen auf Hunde-, Katzen- und Füchsen.
animal
sex
jump_length
weight
cat
male
15.79
6.02
cat
male
18.33
5.99
cat
male
17.58
8.05
cat
male
14.09
6.71
cat
male
18.22
6.19
cat
male
13.49
8.18
…
…
…
…
fox
female
27.81
8.04
fox
female
24.02
9.03
fox
female
24.53
7.42
fox
female
24.35
9.26
fox
female
24.36
8.85
fox
female
22.13
7.89
31.3 Hypothesen
Wir haben für jeden Faktor der ANCOVA ein Hypothesenpaar sowie ein Hypothesenpaar für die Kovariate. Im Folgenden sehen wir die jeweiligen Hypothesenpaare.
Einmal für animal, als Haupteffekt. Wir nennen einen Faktor den Hauptfaktor, weil wir an diesem Faktor am meisten interessiert sind. Wenn wir später einen Posthoc Test durchführen würden, dann würden wir diesen Faktor nehmen. Wir sind primär an dem Unterschied der Sprungweiten in [cm] in Gruppen Hund, Katze und Fuchs interessiert.
Für die Kovariate testen wir anders. Die Kovariate ist ja eine numerische Variable. Daher ist die Frage, wann gibt es keinen Effekt von weight auf die Sprunglänge? Wenn wir eine parallele Linie hätten. Das heißt, wenn sich der Wert von weight ändert, ändert sich der Wert von jump_length nicht. Wir schreiben, dass sich die Steigung der Geraden nicht ändert. Wir bezeichnen die Steigung einer Graden mit \(\beta\). Wenn kein Effekt vorliegt und die Nullhpyothese gilt, dann ist die Steigung der Geraden \(\beta_{weight} = 0\).
Du kannst dir überlegen, ob due die Interaktion zwischen dem Faktor und der Kovariate mit ins Modell nehmen willst. Eigentlich schauen wir uns immer nur die Interaktion zwischen den Faktoren an. Generell schreiben wir eine Interaktionshypothese immer in Prosa.
\[
\begin{aligned}
H_0: &\; \mbox{keine Interaktion}\\
H_A: &\; \mbox{eine Interaktion zwischen animal und site}
\end{aligned}
\]
Wir haben also jetzt die verschiedenen Hypothesenpaare definiert und schauen uns jetzt die ANCOVA in R einmal in der Anwendung an.
31.4 Einfaktorielle ANCOVA in R
Du kannst mehr über Geraden sowie lineare Modelle und deren Eigenschaften im Kapitel 41 erfahren.
Wir können die ANCOVA ganz klassisch mit dem linaren Modell fitten. Wir nutzen die Funktion lm() um die Koeffizienten des linearen Modellls zu erhalten. Wir erinnern uns, wir haben haben einen Faktor \(f_1\) und eine Kovariate bezwiehungsweise ein numerisches \(c_1\). In unserem Beispiel sieht dann der Fit des Modells wie folgt aus.
Nachdem wir das Modell in dem Objekt fit_1 gespeichert haben können wir dann das Modell in die Funktion anova() pipen. Die Funktion erkennt, das wir eine ANCOVA rechnen wollen, da wir in unserem Modell einen Faktor und eine Kovariate mit enthalten haben.
In der ANCOVA erkennne wir nun, dass der Faktor animal signifikant ist. Der \(p\)-Wert ist mit \(<0.001\) kleiner das das Signifikanzniveau \(\alpha\) von 5%. Ebenso ist die Kovariate weight signifikant. Der \(p\)-Wert ist ebenfalls mit \(<0.001\) kleiner das das Signifikanzniveau \(\alpha\) von 5%. Wir können also schlussfolgern, dass sich mindestens eine Gruppenvergleich der Level des Faktors animal voneinander unterscheidet. Wir wissen auch, dass mit der Zunahme des Gewichts, die Sprunglänge sich ändert. Die ANCOVA liefert keine Informationen zu der Größe oder der Richtung des Effekts der Kovariate.
Was wir nicht wissen, ist die Richtung. Wir wissen nicht, ob mit ansteigenden Gewicht sich die Sprunglänge erhöht oder vermindert. Ebenso wenig wissen wir etwas über den Betrag des Effekts. Wieviel weiter springen denn nun Flöhe mit 1 mg Gewicht mehr? Wir haben aber die Möglichkeit, den Sachverhalt uns einmal in einer Abbildung zu visualisieren. In Abbildung 31.1 sehen wir die Daten einmal als Scatterplot dargestellt.
R Code [zeigen / verbergen]
ggplot(ancova_tbl, aes(weight, jump_length, color = animal)) +geom_smooth(method ="lm", se =FALSE) +scale_color_okabeito() +theme_minimal() +geom_point() +labs(color ="Tierart", shape ="Geschlecht")
Der Abbildung 31.1 können wir jetzt die positive Steigung entnehmen sowie die Reihenfolge der Tierarten nach Sprungweiten. Die ANCOVA sollte immer visualisiert werden, da sich hier die Stärke der Methode mit der Visualiserung verbindet.
31.5 Zweifaktorielle ANCOVA in R
Die zweifaktorielle ANCOVA erweitert die einfaktorielle ANCOVA um einen weiteren Faktor. Das ist manchmal etwas verwirrend, da wir auf einmal drei oder mehr Terme in einem Modell haben. Klassischerweise haben wir nun zwei Faktoren \(f_1\) und \(f_2\) in dem Modell. Weiterhin haben wir nur eine Kovariate \(c_1\). Damit sehe das Modell wie folgt aus.
\[
y \sim f_1 + f_2 + c_1
\]
Wir können das Modell dann in R übertragen und ergänzen noch den Interaktionsterm für die Faktoren animal und sex in dem Modell. Das Modell wird klassisch in der Funktion lm() gefittet.
R Code [zeigen / verbergen]
fit_2 <-lm(jump_length ~ animal + sex + weight + animal:sex, data = ancova_tbl)
Nach dem Fit können wir das Modell in dem Obkjekt fit_2 in die Funktion anova() pipen. Die Funktion erkennt die Struktur des Modells und gibt uns eine ANCOVA Ausgabe wieder.
R Code [zeigen / verbergen]
fit_2 |>anova()
Analysis of Variance Table
Response: jump_length
Df Sum Sq Mean Sq F value Pr(>F)
animal 2 2693.8 1346.9 359.0568 <2e-16 ***
sex 1 3608.1 3608.1 961.8568 <2e-16 ***
weight 1 0.0 0.0 0.0053 0.9422
animal:sex 2 2.2 1.1 0.2981 0.7424
Residuals 593 2224.4 3.8
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
In der ANCOVA erkennne wir nun, dass der Faktor animal signifikant ist. Der \(p\)-Wert ist mit \(<0.001\) kleiner das das Signifikanzniveau \(\alpha\) von 5%. Ebenso ist der Faktor sex signifikant. Der \(p\)-Wert ist mit \(<0.001\) kleiner das das Signifikanzniveau \(\alpha\) von 5%. Die Kovariate weight ist nicht mehr signifikant. Der \(p\)-Wert ist mit \(0.94\) größer das das Signifikanzniveau \(\alpha\) von 5%. Wir können also schlussfolgern, dass sich mindestens eine Gruppenvergleich der Level des Faktors animal voneinander unterscheidet. Ebenso wie können wir schlussfolgern, dass sich mindestens eine Gruppenvergleich der Level des Faktors site voneinander unterscheidet. Da wir nur zwei Level in dem Faktor sex haben, wissen wir nun, dass sich die beiden Geschlechter der Flöhe in der Sprungweite unterscheiden. Wir wissen auch, dass mit der Zunahme des Gewichts, sich die Sprunglänge nicht ändert.
In Abbildung 31.2 sehen wir nochmal den Zusammenhang dargestellt. Wenn wir die Daten getrennt für den Faktor sex anschauen, dann sehen wir, dass das Gewicht keinen Einfluss mehr auf die Sprungweite hat.
Nach einer berechneten ANCOVA können wir zwei Fälle vorliegen haben. Wenn du in deinem Experiment keine signifikanten Ergebnisse findest, ist das nicht schlimm. Du kannst deine Daten immer noch mit der explorativen Datenanalyse auswerten wie im Kapitel zur explorativen Datenanalyse gezeigt wird.
Wir habe eine nicht signifikante ANCOVA berechnet. Wir können die Nullhypothese \(H_0\) nicht ablehnen und die Mittelwerte über den Faktor sind vermutlich alle gleich. Wir enden hier mit unserer statistischen Analyse.
Wir haben eine signifikante ANCOVA berechnet. Wir können die Nullhypothese \(H_0\) ablehnen und mindestens ein Gruppenvergleich über mindestens einen Faktor ist vermutlich unterschiedlich. Wir können dann im Kapitel 40 eine Posthoc Analyse rechnen.
Anwendungsbeispiel: Dummy für später…
Aktuell habe ich noch kein Beispiel aus meiner Beratung für eine ANCOVA. Sollte mir eine üben den Weg laufen, dann kommt hier die Anwendung einmal rein. Wir brauchen ja im Prinzip zwei Faktoren und dann noch eine kontinuierlich gemessenen Wert pro Parzelle, Tier oder Pflanze. So einen Datensatz haben wir eher selten Vorliegen. In der Tabelle 31.2 sieht du einmal eine beispielhafte Datentabelle. Wir haben ein normalverteiltes Outcome \(Frischmasse\) und dann die beiden Behandlungsfaktoren Dünger und Sorte. Die Kovariate als kontinuierliche Variable ist das Pflanzenalter. So eine Datenstruktur tritt in den Agrarwissenschaften eher selten auf.
Tabelle 31.2— Beispielhafter Datensatz für eine ANCOVA mit zwei Faktoren und einer Kovariate.
Abbildung 31.1— Scatterplot der Daten zur einfaktoriellen ANCOVA.Abbildung 31.2— Scatterplot der Daten zur einfaktoriellen ANCOVA aufgetelt nach dem Geschlecht der Flöhe.
Karpen SC. 2017. Misuses of regression and ANCOVA in educational research. American journal of pharmaceutical education 81.
Kim H-Y. 2018. Statistical notes for clinical researchers: analysis of covariance (ANCOVA). Restorative dentistry & endodontics 43.
```{r echo = FALSE}pacman::p_load(tidyverse, readxl, knitr, kableExtra, Hmisc)```# Die ANCOVA {#sec-ancova}*Letzte Änderung am `r format(fs::file_info("stat-tests-ancova.qmd")$modification_time, '%d. %B %Y um %H:%M:%S')`*> *"It's better to solve the right problem approximately than to solve the wrong problem exactly." --- John Tukey*Eigentlich hat sich die Analysis of Covariance (ANCOVA) etwas überlebt. Wir können mit dem statistischen Modellieren *eigentlich* alles was die ANCOVA kann plus wir erhalten auch noch Effektschätzer für die Kovariaten und die Faktoren. Dennoch hat die ANCOVA ihren Platz in der Auswertung von Daten. Wenn du ein oder zwei Faktoren hast plus eine numerische Variable, wie das Startgewicht, für die du die Analyse adjustieren möchtest, dann ist die ANCOVA für dich gemacht.Also kurz gesprochen adjustiert die Analysis of Covariance (ANCOVA) die Faktoren einer ANOVA um eine kontinuierliche Covariate. Eine Kovariate ist eine Variable, die mit berücksichtigt wird, um mögliche verzerrende Einflüsse auf die Analyseergebnisse (ungebräuchlich *Konfundierung*) abzuschätzen oder zu verringern. Adjustiert bedeutet in dem Fall, dass die Effekte des unterschiedlichen Startgewichts von Pflanzen durch das Einbringen der Kovariate mit in der statistischen Analyse berücksichtigt werden. Wir werden hier auch nur über die Nutzung in R sprechen und auf die theoretische Herleitung verzichten.Wie immer gibt es auch passende Literatur um die ANCOVA herum. @karpen2017misuses beschreibt in [Misuses of Regression and ANCOVA in Educational Research](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5701329/) nochmal Beispiele für die falsche oder widersprüchliche Nutzung der Regression und ANCOVA. Ich nutze die Quelle immer mal wieder in meinen vertiefenden Vorlesungen. Da wir hier ja nicht nur Agrawissenschaftler haben, hilft die Arbeit von @kim2018statistical mit [Statistical notes for clinical researchers: analysis of covariance (ANCOVA)](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6237726/) auch nochmal weiter. Die Besonderheit bei der klinischen Forschung ist ja die "Beweglichkeit" der Beobachtungen. Menschen lassen sich eben nicht vollständig kontrollieren und daher ist die Thematik eine andere als bei Pflanzen und Tieren.Schauen wir uns nun einmal das Modell der ANCOVA an. Wir können die *einfaktorielle* ANCOVA in folgender Form schreiben. Wir haben haben einen Faktor $x_1$ und eine Kovariate oder aber ein numerisches $x_2$. Damit sähe die ANCOVA wie folgt aus.$$y \sim x_1 + x_2$$Damit ist die ANCOVA aber sehr abstrakt beschrieben. Der *eine* Faktor kommt damit gar nicht zur Geltung. Deshalb schreiben wir die ANCOVA wie folgt mit einem $f_1$ für den Faktor und einem $c_1$ für eine numerische Kovariate. Damit haben wir einen bessere Übersicht.$$y \sim f_1 + c_1$$Somit erklärt sich die zweifaktorielle ANCOVA schon fast von alleine. Wir erweitern einfach das Modell um einen zweiten Faktor $f_2$ und haben somit eine zweifaktorielle ANCOVA.$$y \sim f_1 + f_2 + c_1$$Im Folgenden schauen wir uns einmal die Daten und die Hypothesen zu einer möglichen Fragestellung an.::: callout-tip## Weitere Tutorien für die ANCOVAWie immer gibt es auch für die Frage nach dem Tutorium für die ANCOVA verschiedene Quellen. Ich kann noch folgende Informationen und Hilfen empfehlen.- [How to perform ANCOVA in R](https://finnstats.com/2021/07/22/how-to-perform-ancova-in-r/) liefert nochmal mehr Code und weitere Ideen zu der Analyse in R.- [ANCOVA in R](https://www.datanovia.com/en/lessons/ancova-in-r/) beschreibt auch nochmal etwas anders die ANCOVA.- [Kovarianzanalyse](https://wgruber.github.io/Modellbildung2/kovarianzanalyse.html) ist eine deutsche Quelle, die nochmal vertiefend auf die Kovarianzanalyse eingeht.:::## Genutzte R PaketeWir wollen folgende R Pakete in diesem Kapitel nutzen.```{r echo = TRUE}#| message: falsepacman::p_load(tidyverse, magrittr, broom, quantreg, see, performance, emmeans, multcomp, janitor, parameters, conflicted)conflicts_prefer(dplyr::select)conflicts_prefer(dplyr::filter)cbbPalette <- c("#000000", "#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00", "#CC79A7")```An der Seite des Kapitels findest du den Link *Quellcode anzeigen*, über den du Zugang zum gesamten R-Code dieses Kapitels erhältst.## DatenFür unser Beispiel nutzen wir die Daten der Sprungweite in \[cm\] von Flöhen auf Hunde-, Katzen- und Füchsen. Damit haben wir den ersten Faktor `animal` mit drei Leveln. Als Kovariate schauen wir uns das Gewicht als numerische Variable an. Schlussendlich brauchen wir noch das Outcome `jump_length` als $y$. Für die zweifaktorielle ANCOVA nehmen wir noch den Faktor `sex` mit zwei Leveln hinzu.```{r}#| message: falseancova_tbl <-read_csv2("data/flea_dog_cat_length_weight.csv") |>select(animal, sex, jump_length, weight) |>mutate(animal =as_factor(animal))```In der @tbl-model-1 ist der Datensatz `ancova_tbl` nochmal dargestellt.```{r}#| message: false#| echo: false#| tbl-cap: Datensatz zu der Sprunglänge in [cm] von Flöhen auf Hunde-, Katzen- und Füchsen.#| label: tbl-model-1ancova_raw_tbl <- ancova_tbl |>mutate(animal =as.character(animal))rbind(head(ancova_raw_tbl),rep("...", times =ncol(ancova_raw_tbl)),tail(ancova_raw_tbl)) |>kable(align ="c", "pipe")```## HypothesenWir haben für jeden Faktor der ANCOVA ein Hypothesenpaar sowie ein Hypothesenpaar für die Kovariate. Im Folgenden sehen wir die jeweiligen Hypothesenpaare.Einmal für `animal`, als Haupteffekt. Wir nennen einen Faktor den Hauptfaktor, weil wir an diesem Faktor am meisten interessiert sind. Wenn wir später einen Posthoc Test durchführen würden, dann würden wir diesen Faktor nehmen. Wir sind primär an dem Unterschied der Sprungweiten in \[cm\] in Gruppen Hund, Katze und Fuchs interessiert.$$\begin{aligned}H_0: &\; \bar{y}_{cat} = \bar{y}_{dog} = \bar{y}_{fox}\\H_A: &\; \bar{y}_{cat} \ne \bar{y}_{dog}\\\phantom{H_A:} &\; \bar{y}_{cat} \ne \bar{y}_{fox}\\\phantom{H_A:} &\; \bar{y}_{dog} \ne \bar{y}_{fox}\\\phantom{H_A:} &\; \mbox{für mindestens ein Paar}\end{aligned}$$Für die Kovariate testen wir anders. Die Kovariate ist ja eine numerische Variable. Daher ist die Frage, wann gibt es keinen Effekt von `weight` auf die Sprunglänge? Wenn wir eine parallele Linie hätten. Das heißt, wenn sich der Wert von `weight` ändert, ändert sich der Wert von `jump_length` nicht. Wir schreiben, dass sich die Steigung der Geraden nicht ändert. Wir bezeichnen die Steigung einer Graden mit $\beta$. Wenn kein Effekt vorliegt und die Nullhpyothese gilt, dann ist die Steigung der Geraden $\beta_{weight} = 0$.$$\begin{aligned}H_0: &\; \beta_{weight} = 0\\H_A: &\; \beta_{weight} \neq 0\end{aligned}$$Du kannst dir überlegen, ob due die Interaktion zwischen dem Faktor und der Kovariate mit ins Modell nehmen willst. Eigentlich schauen wir uns immer nur die Interaktion zwischen den Faktoren an. Generell schreiben wir eine Interaktionshypothese immer in Prosa.$$\begin{aligned}H_0: &\; \mbox{keine Interaktion}\\H_A: &\; \mbox{eine Interaktion zwischen animal und site}\end{aligned}$$Wir haben also jetzt die verschiedenen Hypothesenpaare definiert und schauen uns jetzt die ANCOVA in R einmal in der Anwendung an.## Einfaktorielle ANCOVA in R[Du kannst mehr über Geraden sowie lineare Modelle und deren Eigenschaften im @sec-modeling-simple-stat erfahren.]{.aside}Wir können die ANCOVA ganz klassisch mit dem linaren Modell fitten. Wir nutzen die Funktion `lm()` um die Koeffizienten des linearen Modellls zu erhalten. Wir erinnern uns, wir haben haben einen Faktor $f_1$ und eine Kovariate bezwiehungsweise ein numerisches $c_1$. In unserem Beispiel sieht dann der Fit des Modells wie folgt aus.```{r}fit_1 <-lm(jump_length ~ animal + weight + animal:weight, data = ancova_tbl)```Nachdem wir das Modell in dem Objekt `fit_1` gespeichert haben können wir dann das Modell in die Funktion `anova()` pipen. Die Funktion erkennt, das wir eine ANCOVA rechnen wollen, da wir in unserem Modell einen Faktor und eine Kovariate mit enthalten haben.```{r}fit_1 |>anova ()```In der ANCOVA erkennne wir nun, dass der Faktor `animal` signifikant ist. Der $p$-Wert ist mit $<0.001$ kleiner das das Signifikanzniveau $\alpha$ von 5%. Ebenso ist die Kovariate `weight` signifikant. Der $p$-Wert ist ebenfalls mit $<0.001$ kleiner das das Signifikanzniveau $\alpha$ von 5%. Wir können also schlussfolgern, dass sich mindestens eine Gruppenvergleich der Level des Faktors `animal` voneinander unterscheidet. Wir wissen auch, dass mit der Zunahme des Gewichts, die Sprunglänge sich ändert. Die ANCOVA liefert keine Informationen zu der Größe oder der Richtung des Effekts der Kovariate.Was wir nicht wissen, ist die Richtung. Wir wissen nicht, ob mit ansteigenden Gewicht sich die Sprunglänge erhöht oder vermindert. Ebenso wenig wissen wir etwas über den Betrag des Effekts. Wieviel weiter springen denn nun Flöhe mit 1 mg Gewicht mehr? Wir haben aber die Möglichkeit, den Sachverhalt uns einmal in einer Abbildung zu visualisieren. In @fig-stat-ancova-01 sehen wir die Daten einmal als Scatterplot dargestellt.```{r}#| message: false#| echo: true#| fig-align: center#| fig-height: 5#| fig-width: 6#| fig-cap: Scatterplot der Daten zur einfaktoriellen ANCOVA.#| label: fig-stat-ancova-01ggplot(ancova_tbl, aes(weight, jump_length, color = animal)) +geom_smooth(method ="lm", se =FALSE) +scale_color_okabeito() +theme_minimal() +geom_point() +labs(color ="Tierart", shape ="Geschlecht") ```Der @fig-stat-ancova-01 können wir jetzt die positive Steigung entnehmen sowie die Reihenfolge der Tierarten nach Sprungweiten. Die ANCOVA sollte immer visualisiert werden, da sich hier die Stärke der Methode mit der Visualiserung verbindet.## Zweifaktorielle ANCOVA in RDie zweifaktorielle ANCOVA erweitert die einfaktorielle ANCOVA um einen weiteren Faktor. Das ist manchmal etwas verwirrend, da wir auf einmal drei oder mehr Terme in einem Modell haben. Klassischerweise haben wir nun zwei Faktoren $f_1$ und $f_2$ in dem Modell. Weiterhin haben wir nur eine Kovariate $c_1$. Damit sehe das Modell wie folgt aus.$$y \sim f_1 + f_2 + c_1$$Wir können das Modell dann in R übertragen und ergänzen noch den Interaktionsterm für die Faktoren `animal` und `sex` in dem Modell. Das Modell wird klassisch in der Funktion `lm()` gefittet.```{r}fit_2 <-lm(jump_length ~ animal + sex + weight + animal:sex, data = ancova_tbl)```Nach dem Fit können wir das Modell in dem Obkjekt `fit_2` in die Funktion `anova()` pipen. Die Funktion erkennt die Struktur des Modells und gibt uns eine ANCOVA Ausgabe wieder.```{r}fit_2 |>anova() ```In der ANCOVA erkennne wir nun, dass der Faktor `animal` signifikant ist. Der $p$-Wert ist mit $<0.001$ kleiner das das Signifikanzniveau $\alpha$ von 5%. Ebenso ist der Faktor `sex` signifikant. Der $p$-Wert ist mit $<0.001$ kleiner das das Signifikanzniveau $\alpha$ von 5%. Die Kovariate `weight` ist nicht mehr signifikant. Der $p$-Wert ist mit $0.94$ größer das das Signifikanzniveau $\alpha$ von 5%. Wir können also schlussfolgern, dass sich mindestens eine Gruppenvergleich der Level des Faktors `animal` voneinander unterscheidet. Ebenso wie können wir schlussfolgern, dass sich mindestens eine Gruppenvergleich der Level des Faktors `site` voneinander unterscheidet. Da wir nur zwei Level in dem Faktor `sex` haben, wissen wir nun, dass sich die beiden Geschlechter der Flöhe in der Sprungweite unterscheiden. Wir wissen auch, dass mit der Zunahme des Gewichts, sich die Sprunglänge nicht ändert.In @fig-stat-ancova-02 sehen wir nochmal den Zusammenhang dargestellt. Wenn wir die Daten getrennt für den Faktor `sex` anschauen, dann sehen wir, dass das Gewicht keinen Einfluss mehr auf die Sprungweite hat.```{r}#| message: false#| echo: true#| fig-align: center#| fig-height: 5#| fig-width: 6#| fig-cap: Scatterplot der Daten zur einfaktoriellen ANCOVA aufgetelt nach dem Geschlecht der Flöhe.#| label: fig-stat-ancova-02ggplot(ancova_tbl, aes(weight, jump_length, color = animal)) +geom_smooth(method ="lm", se =FALSE) +scale_color_okabeito() +theme_minimal() +geom_point() +labs(color ="Tierart", shape ="Geschlecht") +facet_wrap(~ sex, scales ="free_x")```Nach einer berechneten ANCOVA können wir zwei Fälle vorliegen haben. Wenn du in deinem Experiment keine *signifikanten* Ergebnisse findest, ist das nicht schlimm. Du kannst deine Daten immer noch mit der explorativen Datenanalyse auswerten wie im [Kapitel zur explorativen Datenanalyse](#sec-eda-ggplot) gezeigt wird.1) Wir habe eine nicht signifikante ANCOVA berechnet. Wir können die Nullhypothese $H_0$ nicht ablehnen und die Mittelwerte über den Faktor sind vermutlich alle gleich. Wir enden hier mit unserer statistischen Analyse.2) Wir haben eine signifikante ANCOVA berechnet. Wir können die Nullhypothese $H_0$ ablehnen und mindestens ein Gruppenvergleich über mindestens einen Faktor ist vermutlich unterschiedlich. Wir können dann im @sec-posthoc eine Posthoc Analyse rechnen.::: callout-tip## Anwendungsbeispiel: Dummy für später...Aktuell habe ich noch kein Beispiel aus meiner Beratung für eine ANCOVA. Sollte mir eine üben den Weg laufen, dann kommt hier die Anwendung einmal rein. Wir brauchen ja im Prinzip zwei Faktoren und dann noch eine kontinuierlich gemessenen Wert pro Parzelle, Tier oder Pflanze. So einen Datensatz haben wir eher selten Vorliegen. In der @tbl-ancova-app sieht du einmal eine beispielhafte Datentabelle. Wir haben ein normalverteiltes Outcome $Frischmasse$ und dann die beiden Behandlungsfaktoren *Dünger* und *Sorte*. Die Kovariate als kontinuierliche Variable ist das *Pflanzenalter*. So eine Datenstruktur tritt in den Agrarwissenschaften eher selten auf.| Frischmasse | Dünger ($f_1$) | Sorte ($f_2$) | Pflanzenalter ($c_1$) ||:-----------:|:--------------:|:-------------:|:---------------------:|| 34.3 | 1 | 1 | 23 || 35.2 | 1 | 2 | 21 || 37.2 | 1 | 3 | 19 || ... | ... | ... | ... || 21.0 | 3 | 1 | 24 || 19.1 | 3 | 2 | 20 |: Beispielhafter Datensatz für eine ANCOVA mit zwei Faktoren und einer Kovariate. {#tbl-ancova-app}Das Modell für die ANCOVA wäre dann wie folgt.$$Frischmasse \sim Dünger + Sorte + Dünger:Sorte + Pflanzenalter$$:::## Referenzen {.unnumbered}