---
title: "Tutorium 4"
format: html
editor: visual
---

## a, b: Setup

```{r}
# Wir starten mit unserem Package-Manager
if (!require("pacman")) install.packages("pacman"); library("pacman")

# Dank pacman können wir mehrere Packages gleichzeitig laden
p_load(data.table)
p_load(ggplot2)
p_load(mgcv)
p_load(data.table, ggplot2, mgcv)
```


# c: Daten einlesen
```{r}
# Daten einlesen, entweder aus unserer Ordnerstruktur oder direkt von der URL
titanic_data <- fread("../input/titanic.csv")

# falls Speicherort der Datei unklar ist
getwd()
```

Wir benutzen einen Package-Manager ("pacman") um unsere Packages zu laden. Anschließend lesen wir unsere Titanic-Daten ein.

## d: Betrachten der Daten

```{r}
# Mit welchen Daten haben wir es hier zu tun?
head(titanic_data)
# View(titanic_data)

# Wie sieht die Überlebensrate aus?
plot_all <- ggplot(titanic_data, aes(x = Survived)) + geom_bar() + labs(title = "Überlebensrate", x = "Überlebt", y = "Anzahl")
plot_all

# Nach unterschiedlichen Klassen
Pclass1 <- subset(titanic_data, Pclass == 1)
Pclass2 <- subset(titanic_data, Pclass == 2)
Pclass3 <- subset(titanic_data, Pclass == 3)
plot_class1 <- ggplot(Pclass1, aes(x = Survived)) + geom_bar() + ggtitle("Pclass 1")
plot_class2 <- ggplot(Pclass2, aes(x = Survived)) + geom_bar() + ggtitle("Pclass 2")
plot_class3 <- ggplot(Pclass3, aes(x = Survived)) + geom_bar() + ggtitle("Pclass 3")
plot_class1
plot_class2
plot_class3

# Die Überlebensraten noch einmal mathematisch betrachtet
length(which(titanic_data$Survived == 1)) / nrow(titanic_data)
length(which(Pclass1$Survived == 1)) / nrow(Pclass1)
length(which(Pclass2$Survived == 1)) / nrow(Pclass2)
length(which(Pclass3$Survived == 1)) / nrow(Pclass3)
```

Wir sehen, dass die Überlebensrate insgesamt bei unter 50% liegt. In der ersten Klasse ist die Überlebensrate höher als in den anderen Klassen, als einzige haben wir hier eine Rate von über 50%. In der dritten Klasse ist die Überlebensrate am niedrigsten.

## e: Ein lineares Wahrscheinlichkeitsmodell

```{r}
# Wir plotten ein wenig, um uns einen Überblick zu verschaffen
plot_lm_Age <-ggplot(titanic_data, aes(x = Age, y = Survived)) + geom_point() + geom_smooth(method = "lm", color = "red", se = FALSE)
plot_lm_Age
plot_lm_Fare <-ggplot(titanic_data, aes(x = Fare, y = Survived)) + geom_point() + geom_smooth(method = "lm", color = "red", se = FALSE)
plot_lm_Fare

# Wir stellen ein klassisches lineares Modell auf
titanic_lm <- lm(Survived ~ Sex + Age + Pclass, data = titanic_data)
summary(titanic_lm)
```

In unserem klasssichen linearen Regressionsmodell erhalten wir für alle Variablen einen höchst signifikanten Effekt. Es wird jedoch schnell klar, dass die Annahme von linearen Effekten in diesem Kontext nicht besonders sinnvoll ist, da wir Werte außerhalb des Intervalls (0,1) erhalten. Sehr junge Mädchen aus Passagierklasse 1 scheinen mit einer Chance von über 100% zu überleben, während ältere Männer aus Klasse 3 mehr als garantiert sterben würden.
Dennoch kann ein solches Modell nützlich sein, um sich einen ersten Eindruck der Daten zu verschaffen.

## f: Explorative Datenanalyse mit P-Splines und nicht-parametrischen Ansätzen

```{r}
# P-Splines zur Modellerstellung nutzen
survived_gam <- gam(Survived ~ Sex + s(Age) + s(Fare), bs="ps", family = "binomial", data = titanic_data)
summary(survived_gam)
plot(survived_gam)
```

Das Geschlecht hat einen signifikanten Effekt in unserem Modell. Die Glättungsparameter Alter und Ticketpreis sind ebenfalls signifikant, wobei Age nicht einen so klaren Effekt hat wie die anderen beiden Variablen (dieser ist dennoch zu beachten!). Wir sehen, insbesondere bei den Ticketpreisen, dass die Werte für die hohen Preise ziemlich unklar sind, der Graph zeigt uns einen sehr großen Bereich. Dies liegt unter anderem darin begründet, dass wir einige wenige, sehr hohe Ticketpreise, in unserem Datensatz vorfinden.

## g: Logistische Regression

```{r}
# Modell erstellen
titanic_logistic <- glm(Survived ~ Sex + Age + Pclass, family = binomial, data = titanic_data)
```

Der Befehl für ein logistisches Regressionsmodell ist sehr ähnlich zu dem für ein lineares Modell und eines Poisson-Models. Wichtig ist zu beachten, dass die Variablen an der korrekten Stellen stehen, sowie die korrekte Familie genutzt wird.

## h: Betrachten der Daten

```{r}
# Modellzusammenfassung
summary(titanic_logistic)

# Interpretation der Koeffizienten
coef(titanic_logistic)

# Berechnung der Überlebenswahrscheinlichkeit mit Hilfe der Koeffizienten "von Hand"
# Ein zehn Jahre alter Junge aus Klasse eins:
eta_10 = coef(titanic_logistic)[1] + coef(titanic_logistic)[2] * 1 + coef(titanic_logistic)[3] * 10 + coef(titanic_logistic)[4] * 1
pi_10 = exp(eta_10)/(1 + exp(eta_10))
pi_10

# Oder der gleiche Junge ist ein Jahr älter:
eta_11 = coef(titanic_logistic)[1] + coef(titanic_logistic)[2] * 1 + coef(titanic_logistic)[3] * 11 + coef(titanic_logistic)[4] * 1
pi_11 = exp(eta_11)/(1 + exp(eta_11))
pi_11

# Oder er kommt aus Klasse drei statt Klasse eins:
eta_10_3 = coef(titanic_logistic)[1] + coef(titanic_logistic)[2] * 1 + coef(titanic_logistic)[3] * 10 + coef(titanic_logistic)[4] * 3
pi_10_3 = exp(eta_10_3)/(1 + exp(eta_10_3))
pi_10_3

# Odds Ratios können wir so direkt berechnen:
exp(coef(titanic_logistic))
```

Bei der Interpretation von logistischen Regressionsmodellen ist wichtig, dass wir darauf achten, dass es sich nicht um lineare Faktoren handelt, sondern um Exponentialfaktoren. Wir können die Odds Ratios berechnen, um die Effekte der einzelnen Variablen zu interpretieren.
Aus der Vorlesung: "Interpretation: Odds zu überleben verringern sich um den Faktor e^βi für jedes zusätzliche Lebensjahr." Also hier: Odds zu überleben verringern sich um den Faktor 0.96 für jedes zusätzliche Lebensjahr.
