
# Übung 1 a+b {.unnumbered}

## Ü1.1 Erstellen Sie eine Quarto-Datei.qmd {.unnumbered .unlisted}

1.  Öffnen Sie R-Studio
2.  In R-Studio ➪ File ➪ New File ➪ Quarto Document...
3.  Klicken Sie unten links auf «Create Empty Document»
4.  (Wählen Sie als `title` «Erste Regression»)
5.  Fügen Sie einen r-Chunk hinzu mit diesem Schalter: ![](images/rchunk.png)
6.  speichern Sie an einem günstigen Ort  \
    (am besten in der Cloud + nicht auf Desktop)

### Ü1.2 Installation und Setup {.unnumbered .unlisted}

Die R-Befehle für die Installation von Paketen haben wir in die Datei "Installation.R" ausgelagert, weil man sie im Grunde jeweils nur einmal braucht. Ich habe Ihnen [hier eine Installationsdatei](files/Installation.R) gebaut, mit der Sie die Pakete mit höhrer Erfolgschance installieren können. Mit folgendem Befehl wird diese Datei automatisch von unserer Homepage heruntergeladen und im Unterordner "files" des Projekts gespeichert. Sie können Sie dann dort öffnen und (am besten Zeilenweise) ausführen, wenn Sie die Pakete noch nicht installiert haben.

```{r}
#| label: Installationsdatei-runterladen
#| echo: true 

# Prüfe, ob es in dem Ordner in der die Uebung_1_ab.qmd gespeichert ist, einen Unterordner "files" gibt und, wenn nicht, dann lege ihn an.
if(dir.exists("files")){} else {dir.create("files")}

# Lade die Installations.R herunter und speichere sie im Unterordner des Projekts unter "files"
download.file("https://stat.ikmz.uzh.ch/Aufbau/Folien/Sitzung_04/files/Installation.R",paste("files/Installation.R") )
```

Für generelle Grundeinstellungen haben wir eine "_common.R" angelegt, in der wir den Aufruf der Basispakete des tidyverse geschrieben haben und andere Optionen und Einstellungen für Designs (wie Farben). Die Datei kann man dann immer am Anfang seiner Quarto-Dateien aufrufen und braucht diese Generaleinstellungen nicht immer wieder neu kopieren. Das ist doch praktisch.

```{r}
#| label: setup
#| echo: true

# Prüfe, ob es in dem Ordner in der die Uebung_1_ab.qmd gespeichert ist, einen Unterordner "files" gibt und, wenn nicht, dann lege ihn an.
if(dir.exists("files")){} else {dir.create("files")}

download.file("https://stat.ikmz.uzh.ch/Aufbau/Folien/Sitzung_04/files/_common.R", destfile= "files/_common.R")

source("files/_common.R")
```


## Ü1.3 Laden Sie die Daten {.unnumbered .unlisted}

 Laden Sie den Fragebogen [hier](files/FB_STATA.pdf){target="_blank"} runter und schauen ihn an. 

 Laden Sie die Daten und lassen Sie mal die Variablenlabel raus:

```{r}
#| echo: true
#| code-summary: "R-Code anzeigen"
#| code-fold: true

# Wenn wir die Dateien einmal geladen und aufbereitet haben (mit der Extradatei "Aufbereitung.qmd"), dann ist es besser, nicht immer wieder neu die Rohdaten zu laden, sondern die Aufbereiteten. 

# Prüfe, ob es in dem Ordner in der die Uebung_1_ab.qmd gespeichert ist, einen Unterordner "files" gibt und, wenn nicht, dann lege ihn an.
if(dir.exists("data")){} else {dir.create("data")}

download.file("https://stat.ikmz.uzh.ch/Aufbau/Folien/Sitzung_04/data/Stat_Aufbau_Befragung.RDS", "data/Stat_Aufbau_Befragung.RDS")

DATEN <- readRDS("data/Stat_Aufbau_Befragung.RDS")  |>
  haven::zap_formats()

# DATEN  |>  sjlabelled::get_label()

DATEN |> 
  saveRDS("data/Stat_Aufbau_Befragung.RDS")
```

### Ü1.4 Rechnen Sie ein Regressionsmodell {.unnumbered .unlisted }

:::{.column-page-right}
::: {.columns}

::: {.column width="70%"}

```{r}
#| echo: true
#| eval: true

DATEN <- DATEN  |> haven::zap_formats()

Modell_1 <- lm(E201_10 ~ E102_02, data = DATEN)

summary(Modell_1)

```

:::

::: {.column width="30%"}

::: {.callout title="Was sehen Sie?"}
 1. Wie gross ist $R^2$? 
 2. Wie gross ist die bivariate Korrelation $r$? (selbst ausrechnen)
 3. Ist der Zusammenhang positiv oder negativ? 
 4. Ist der Zusammenhang signifikant?
:::

:::
:::
:::


### Ü1.5 Verändern Sie das Regressionsmodell {.unnumbered .unlisted .scrollable}

Kopieren Sie den r-Chunk der letzten Folie und setzen Sie andere Variablen ein: 
Nehmen Sie die Variablen für «Statistik Einführung hat mir viel Spass gemacht» und erklären Sie damit: «Ich freu mich auf Statistik Aufbau!». 

Beantworten wieder die Fragen:

 1. Wie gross ist $R^2$? 
 2. Wie gross ist die bivariate Korrelation $r$? (selbst ausrechnen)
 3. Ist der Zusammenhang positiv oder negativ? 
 4. Ist der Zusammenhang signifikant?
 
 
```{r}
#| echo: true
#| output: true
#| code-fold: true
#| eval: true


DATEN |> sjmisc::frq(E201_02, E102_02)  |>
  haven::zap_formats()

Modell_2 <- lm(E201_02 ~ E102_02, data = DATEN)

summary(Modell_2)

# R² = .5332

Modell_2_beta <- lm.beta::lm.beta(Modell_2)

summary(Modell_2_beta)
# r  = .73

```


### Ü1.6 $b_2$ aus Korrelationen und SDs berechnen {.unnumbered .unlisted .scrollable}

::: {.callout-note}
Lassen Sie die Korrelationen durchlaufen, schauen Sie sich an, wo was steht und setzen Sie es in die Formel für $b_2 = \frac{r_{Y2}-r_{23}r_{Y3}}{(1-R_{2.3}^2)}\frac{s_Y}{s_2}$, um es zu berechnen. 
:::

Also: $b_2 = \frac{.50-(-.32\cdot -.23)}{(1-.32^2)}\frac{1.05}{1.07}$

```{r}
#| echo: true
#| code-summary: "R-Code anzeigen"
#| code-fold: true

DATEN |> 
  select(E201_10, E102_02, E102_04) |> 
  # sjlabelled::label_to_colnames() |> 
  apaTables::apa.cor.table()

beta_2 = (.68 - (.23 * .25)) / ((1-.23^2)) 

b2 = beta_2 * 1.37/1.42

b2

```

### Man kann natürlich auch R nutzen {.unnumbered .unlisted .scrollable}

```{r}
#| echo: true
#| code-summary: "R-Code anzeigen"
#| code-fold: true

# Damit es ganz genau wird, filtere ich erstmal alle Fälle raus, die in einer der Variablen ein NA haben:
DATEN_UE1_6 <- DATEN |> 
  filter(!is.na(E201_10) & !is.na(E102_02) & !is.na(E102_04))

# Mit dem neuen Teildatensatz berechne ich die Korrelationen

r_2y = cor(DATEN_UE1_6$E201_10, DATEN_UE1_6$E102_02)

r_23 = cor(DATEN_UE1_6$E102_02, DATEN_UE1_6$E102_04)

r_3y = cor(DATEN_UE1_6$E201_10, DATEN_UE1_6$E102_04)

# R² ist das Quadrat von r_23

RSQ_23 = r_23^2

# Jetzt noch die Standardfehler von Y und X2

sd_y = sd(DATEN_UE1_6$E201_10, na.rm = TRUE)

sd_x = sd(DATEN_UE1_6$E102_02, na.rm = TRUE)

b2 = (r_2y - r_23 * r_3y) / (1-RSQ_23) * sd_y / sd_x

round(b2, 5)
```


### Ü1.7 Berechnen Sie $b_2$ mit Hilfe einer Regressionsanalyse {.unnumbered .unlisted}

```{r}
#| echo: true
#| code-summary: "R-Code anzeigen"
#| code-fold: false
#| output: true

Modell1 <- lm(E201_10 ~ E102_02 + E102_04, data = DATEN)

Modell_1_beta <- lm.beta::lm.beta(Modell1)

summary(Modell_1_beta, digits = digits, maxsum = maxsum)
```

### Ü1.8 Geben Sie mit folgendem Befehl die Tolerance und VIF-Werte raus {.unnumbered .unlisted}

```{r}
#| echo: true
#| code-summary: "R-Code anzeigen"
#| code-fold: false
#| output: true

olsrr::ols_regress(Modell1)

olsrr::ols_vif_tol(Modell1) 
```

### Ü1.9 Schauen Sie sich die Residualplotts an {.unnumbered .unlisted}

```{r}
#| echo: true
#| code-summary: "R-Code anzeigen"
#| code-fold: true
#| fig-cap: Plot der Residuen

olsrr::ols_plot_resid_fit(Modell1)
```

### Ü1.10 Testen Sie auf Homoskedastizität {.unnumbered .unlisted}

```{r}
#| label: Homoskedasitzitätstest
#| echo: true
#| code-summary: "R-Code anzeigen"
#| code-fold: true
#| fig-cap: "Breusch-Pagan-Test"

# Führe einen Breusch-Pagan-Test aus

olsrr::ols_test_breusch_pagan(Modell1)
```

Was sagt Ihnen das?


### Ü1.11 Gucken Sie sich den N-Q-Q-Plot an {.unnumbered .unlisted}

```{r}
#| echo: true
#| code-summary: "R-Code anzeigen"
#| code-fold: true
#| fig-cap: "Normal-Q-Q-Plot"

# Führe einen Normal-Q-Q-Plot aus
olsrr::ols_plot_resid_qq(Modell1)
```

### Ü1.12 Und das Histogramm {.unnumbered .unlisted}

```{r}
#| echo: true
#| code-summary: "R-Code anzeigen"
#| code-fold: true
#| fig-cap: Histogramm der Residuen

# Mache mal ein Histogramm der Residuen. Die sollten annähernd normalverteilt sein. 
olsrr::ols_plot_resid_hist(Modell1)
```

### Ü1.13 Jetzt auf Normalverteilung testen {.unnumbered .unlisted}
```{r}
#| echo: true
#| code-summary: "R-Code anzeigen"
#| code-fold: false
#| fig-cap: Normalverteilung der Residuen

# Führe Tests auf signifikante Verletzungen 
# der Normalverteilungsannahme aus.

olsrr::ols_test_normality(Modell1)
```

### Ü1.14 Fazit

Was ist Ihr Fazit aus der Regressionsrechnung?

### Weiterführung

```{r}
model <- lm(E201_10 ~ E102_02 + E102_04, data = DATEN)

BETAs <- lm.beta::lm.beta(model) 

output <- summary(BETAs)

BETAs |> 
  broom::tidy() |> 
  rename(Predictors = term, 
         B = estimate,
         std.err = std.error,
         BETA =std_estimate,
         t = statistic, 
         p = p.value) |> 
  mutate(across(c(B, std.err, t), ~round(.x, 2))) |> 
  mutate(p = MOTE::apa(p, leading = FALSE),
         BETA = MOTE::apa(BETA, leading = FALSE)) |> 
  mutate(BETA = if_else(BETA == "NA", "", BETA), 
         p = if_else(p == ".000", "<.001", p)) |> 
  kableExtra::kable(align = "lrrrrr") |>  
  kableExtra::kable_styling() |> 
  kableExtra::add_footnote(glue::glue("R² = {round(output$adj.r.squared, 2)} (F = {round(output$fstatistic[1])}, df = {output$fstatistic[3]}, p = {output$fstatistic[3]}),\n R²adj. = {round(output$adj.r.squared, 2)}"))

```
