---
lesson: Statistik 2
knitr:
  opts_chunk: 
    collapse: false
musterloesung: true
---

# Statistik 2: Übung

### Aufgabe ANOVA mit Kormoran-Daten

**Übungsaufgabe (hier so ausführlich formuliert, wie dies auch in der Klausur der Fall sein wird)**


- Lesen Sie den Datensatz kormoran.csv ein, Dieser enthält Tauchzeiten (hier ohne Einheit) von Kormoranen in Abhängigkeit von Jahreszeit und Unterart. Unterarten: *Phalacrocorax carbo carbo* (C) und *Phalacrocorax carbo sinensis* (S); Jahreszeiten: F = Frühling, S = Sommer, H = Herbst, W = Winter.
- **Ihre Gesamtaufgabe ist es, aus diesen Daten ein minimal adäquates Modell zu ermitteln, das dies Abhängikeit der Tauchzeit von der Jahreszeit und Unterart beschreibt.**
- Bitte erklären und begründen Sie die einzelnen Schritte, die Sie unternehmen, um zu diesem Ergebnis zu kommen. Dazu erstellen Sie bitte ein  mit Quarto generiertes html-Dokument, in das Sie Schritt für Schritt den verwendeten R-Code, die dazu gehörigen Ausgaben von R, Ihre Interpretation derselben und die sich ergebenden Schlussfolgerungen für das weitere Vorgehen dokumentieren.
- Dieser Ablauf sollte insbesondere beinhalten:
  - Überprüfen der Datenstruktur nach dem Einlesen, welches sind die abhängige(n) und welches die unabängige(n) Variablen, welches statistische Verfahren wenden Sie an? 
  - Explorative Datenanalyse, um ein Eindruck der Daten zu bekommen und zu kontrollieren ob es NAs in den Daten hat
  - Definition eines vollen Modelles, das nach statistischen Kritierien zum minimal adäquaten Modell reduziert wird
  - Durchführen der Modelldiagnostik, um zu entscheiden, ob das gewählte Vorgehen korrekt war oder ggf. angepasst werden muss
  - Generieren aller Zahlen, Statistiken und Tabellen, die für eine wiss. Ergebnisdarstellung benötigt werden
- Formulieren Sie abschliessend einen Methoden- und Ergebnisteil (ggf. incl. adäquaten Abbildungen) zu dieser Untersuchung in der Form einer wissenschaftlichen Arbeit (ausformulierte schriftliche Zusammenfassung, mit je einem Absatz von ca. 60-100 Worten, resp. 3-8 Sätzen für den Methoden- und Ergebnisteil). D. h. alle wichtigen Informationen sollten enthalten sein, unnötige Redundanz dagegen vermieden werden.
- **Zu erstellen sind (1) Ein quarto generiertes html-Dokument mit begründetem Lösungsweg (Kombination aus R-Code, R Output und dessen Interpretation) und (2) ausformulierter Methoden- und Ergebnisteil (für eine wiss. Arbeit).**


::::{.content-hidden unless-meta="musterloesung"}

:::{.callout-note}


# Statistik 2: Lösung

[Demoscript herunterladen (.R)](../purl/Statistik2_Uebung.R){.dld}

[Demoscript herunterladen (.qmd)](../purl/Statistik2_Uebung.qmd){.dld}


- [Lösungstext als Download](Statistik2_Lösung.pdf)

## Kommentierter Lösungsweg

```{r}
library("readr")

# Daten laden
kormoran <- read_delim("datasets/stat/kormoran.csv", ";", col_types = cols("Unterart" = "f", "Jahreszeit" = "f")) 

# Ueberpruefen, ob Einlesen richtig funktioniert hat und welche Datenstruktur vorliegt
str(kormoran)
summary(kormoran)
```

Man erkennt, dass es sich um einen Dataframe mit einer metrischen (Tauchzeit) und zwei kategorialen (Unterart, Jahreszeit) Variablen handelt.
Die adäquate Analyse (1 metrische Abhängige vs. 2 kategoriale Unabhängige) ist damit eine zweifaktorielle ANOVA.
Die Sortierung der Jahreszeiten (default: alphabetisch) ist inhaltlich aber nicht sinnvoll und sollte angepasst werden.

```{r}
# Umsortieren der Faktoren, damit sie in den Boxplots eine sinnvolle Reihung haben
kormoran$Jahreszeit <- ordered(kormoran$Jahreszeit, levels = c("F", "S", "H", "W"))
kormoran$Jahreszeit
```


```{r}
# Explorative Datenanalyse
# (Check auf Normalverteilung der Residuen und Varianzhomogenitaet)
boxplot(Tauchzeit ~ Jahreszeit * Unterart, data = kormoran)
```

Wegen der Asymmetrie der Boxen könnte man eine log-Transformation ausprobieren.

```{r}
boxplot(log10(Tauchzeit) ~ Jahreszeit * Unterart, data = kormoran)
```

Da die Transformation keine klare Verbesserung bringt, bleiben wir im Folgenden bei den untransformierten Daten, da diese leichter (direkter) interpretiert werden können. Auch angesichts der sehr gerigen Anzahl an Datenpunkte (5 Tauchgänge pro Art-Jahreszeit-Kombination) sind asymmwetrische Boxplots wenig überraschend.
Das Gesamtbild ist noch OK für parametrische Verfahren (Box ziemlich symmetrisch um Median, Whisker etwas asymmetrisch aber nicht kritisch). 


```{r}
# Vollständiges Modell mit Interaktion
aov_1 <- aov(Tauchzeit ~ Unterart * Jahreszeit, data = kormoran)
aov_1
summary(aov_1)
summary.lm(aov_1)
# p-Wert der Interaktion ist 0.266
```

```{r}
# Modelvalidierung mit Diagnostikplots
par(mfrow = c(2, 2))
plot(aov_1)
```

Das volle (maximale) Modell zeigt, dass es keine signifikante Interaktion zwischen Jahreszeit und Unterart gibt. Wir können das Modell also vereinfachen, indem wir die Interaktion herausnehmen (+ statt * in der Modellspezifikation)


```{r}
# Modellvereinfachung
aov_2 <- aov(Tauchzeit ~ Unterart + Jahreszeit, data = kormoran)
aov_2
summary(aov_2)
```

Im so vereinfachten Modell sind alle verbleibenden Terme signifikant, wir sind also beim „minimal adäquaten Modell“ angelangt

```{r}
# Anderer Weg, um zu pruefen, ob man das komplexere Modell mit Interaktion behalten soll
anova(aov_1, aov_2)
# In diesem Fall bekommen wir den gleichen p-Wert wie oben (0.266)

# Modelldiagnostik
par(mfrow = c(2, 2)) # alle vier Abbildungen in einem 2 x 2 Raster
plot(aov_2)
```

```{r}
#| eval: false

influence.measures(aov_2) #
# kann man sich zusätzlich zum "plot" ansehen, um herauszufinden,
# ob es evtl. sehr einflussreiche Werte mit Cook's D von 1 oder grösser gibt
```

Links oben ist alles bestens, d. h. keine Hinweise auf Varianzheterogenität („Keil“) oder Nichtlinearität („Banane“)
Rechts oben ganz gut, allerdings weichen Punkte 1 und 20 deutlich von der optimalen Gerade ab -> aus diesem Grund können wir es doch noch mal mit der log10-Transformation versuchen (s.u.)
Rechts unten: kein Punkt hat einen problematischen Einfluss (die roten Linien für Cook’s D > 0.5 und > 1 sind noch nicht einmal im Bildausschnitt.

```{r}
# Alternative mit log10
aov_3 <- aov(log10(Tauchzeit) ~ Unterart + Jahreszeit, data = kormoran)
aov_3
summary(aov_3)
plot(aov_3)
```

Rechts oben: Punkt 20 jetzt auf der Linie, aber Punkt 1 weicht umso deutlicher ab -> keine Verbesserung -> wir bleiben bei den untransformierten Daten.
Da wir keine Interaktion zwischen Unterart und Jahreszeit festgestellt haben, brauchen wir auch keinen Interaktionsplot (unnötig kompliziert), statt dessen können wir die Ergebnisse am besten mit zwei getrennten Plots für die beiden Faktoren darstellen. Bitte die Achsenbeschriftungen und den Tukey post-hoc-Test nicht vergessen.

```{r}
par(mfrow = c(1, 1)) # Zurückschalten auf Einzelplots
library("multcomp")

boxplot(Tauchzeit ~ Unterart, data = kormoran)

letters <- cld(glht(aov_2, linfct = mcp(Jahreszeit = "Tukey")))
boxplot(Tauchzeit ~ Jahreszeit, data = kormoran)
mtext(letters$mcletters$Letters, at = 1:4)
```

Jetzt brauchen wir noch die Mittelwerte bzw. Effektgroessen

Für den Ergebnistext brauchen wir auch noch Angaben zu den Effektgrössen. Hier sind zwei Möglichkeiten, um an sie zu gelangen.

```{r}
library("dplyr")

kormoran |>
  group_by(Jahreszeit) |>
  summarise(Tauchzeit = mean(Tauchzeit))

kormoran |>
  group_by(Unterart) |>
  summarise(Tauchzeit = mean(Tauchzeit))

summary(lm(Tauchzeit ~ Jahreszeit, data = kormoran))
summary(lm(Tauchzeit ~ Unterart, data = kormoran))
```

:::
:::: 

