Angewandte Datenverarbeitung und Visualisierung
  • D. Palleschi
  • Moodle
  1. Grundlagen
  2. 5  Datenvisualisierung 2
  • Kursübersicht
    • Kursübersicht
    • Erforderliche Software
    • Sitzungsinformationen
  • Grundlagen
    • 1  Einführung in R und RStudio
    • 2  Datenvisualiserung 1
    • 3  Dynamische Berichte mit Quarto
    • 4  Data Wrangling 1: Transformation
    • 5  Datenvisualisierung 2
  • Nächste Stufe
    • 6  Einlesen von Daten
    • 7  Deskriptive Statistik
    • 8  Datenvisualisierung 3
    • 9  Data Wrangling 2: Tidying
  • Fortgeschrittene Themen
    • 10  Base R
    • 11  Datenvisualisierung 4
    • 12  Troubleshooting
  • Berichte
    • 13  Bericht 1
    • 14  Bericht 2
  • Literaturverzeichnis
  • Anhang
    • A  Aufgaben

Kapitelinhalt

  • Lesungen
  • 5.1 Einrichtung {.unnumbered}
    • Packages
    • ggplot theme
    • Data
    • Hypotheses
  • 5.2 Datenvisualisierung
    • 5.2.1 Visualisierung von Verteilungen
  • 5.3 Visualisierung von Beziehungen
    • 5.3.1 Gruppierte kontinuierliche Variable
    • 5.3.2 Zwei kontinuierliche Variablen
    • 5.3.3 Hinzufügen weiterer Variablen
    • 5.3.4 Facet grids
  • 5.4 Bearbeitete Daten
  • 5.5 Quarto Code Chunk Einstellungen
    • 5.5.1 Verwendung von Code-Bausteinen
  • 5.6 Plots speichern
    • 5.6.1 ggsave()
  • Weitere Übungen
  1. Grundlagen
  2. 5  Datenvisualisierung 2

5  Datenvisualisierung 2

Visualisierung von Beziehungen

Autor:in
Zugehörigkeit

Daniela Palleschi

Humboldt-Universität zu Berlin

Veröffentlichungsdatum

Mi. den 15.11.2023

Geändert

Mo. den 27.05.2024

Lesungen

Die Pflichtlektüre zur Vorbereitung auf dieses Thema ist Kap. 2 (Datenvisualisierung) aus Abschnitt 2.5 in Wickham et al. (2023).

Eine ergänzende Lektüre ist Ch. 3 (Data visualtion) in Nordmann & DeBruine (2022).

Wiederholung

Letzte Woche haben wir gelernt…

  • wie man Daten mit dem Paket dplyr aus dem tidyverse verarbeitet
  • gelernt, wie man die pipe (|>) verwendet, um das Ergebnis einer Funktion in eine andere Funktion einzuspeisen
  • über Funktionen, die auf Zeilen operieren
    • filter(), arrange()
  • über Funktionen, die auf Spalten operieren
    • rename(), mutate(), select(), relocate()
  • wie man dplyr-Funktionen mit Plots von ggplot2 kombiniert

Lernziele

Heute werden wir lernen…

  • wie man zwei oder mehr Variablen darstellt
    • mit Ästhetik und mit Facettenrastern
  • wie man Codechunk-Optionen verwendet
  • wie man Plots als Dateien speichert

Lesungen

Die Pflichtlektüre zur Vorbereitung auf dieses Thema ist Kap. 2 (Datenvisualisierung) aus Abschnitt 2.5 in Wickham et al. (2023).

Eine ergänzende Lektüre ist Ch. 3 (Data visualtion) in Nordmann & DeBruine (2022).

5.1 Einrichtung {.unnumbered}

Packages

library(tidyverse)
library(patchwork)
library(ggthemes)
library(languageR)
  • tidyverse Familie von Paketen
    • ggplot2 für Diagramme
    • dplyr für die Datenverarbeitung
  • ggthemes für farbenblindenfreundliche Farbpaletten
  • patchwork für Plot-Layouts
  • languageR für linguistische Datensätze

ggplot theme

Ich habe mein bevorzugtes ggplot-Thema global festgelegt. Das bedeutet, dass nach dem Ausführen dieses Codes alle Diagramme dieses Thema verwenden werden.

theme_set(theme_bw())

Data

Wir verwenden den english-Datensatz aus dem Baayen & Shafaei-Bajestan (2019).

  • enthält Daten aus einer lexikalischen Entscheidungsaufgabe in Englisch
  • Die logarithmisch transformierten Reaktionszeiten werden zurücktransformiert, so dass sie in Millisekunden angegeben werden.
    • Wir verwenden dazu die Funktion exp().
df_english <- 
  english |> 
  mutate(RTlexdec = exp(RTlexdec),
         RTnaming = exp(RTnaming))

english dataset

Unsere Variablen von Interesse sind:

Tabelle 5.1: english dataset variables of interest
variable description type
RTlexdec Reaktionszeiten für eine visuelle lexikalische Entscheidung (Millisekunden) kontinuierlich
RTnaming Reaktionszeiten für den Beginn einer verbalen Wortbenennungsaufgabe (Millisekunden) kontinuierlich
WrittenFrequency numerischer Vektor mit der logarithmischen Häufigkeit in der lexikalischen Datenbank von CELEX kontinuierlich
Wort ein Faktor mit 2284 Wörtern kategorisch
AgeSubject ein Faktor mit der Altersgruppe des Probanden als Level: jung versus alt kategorisch
WordCategory ein Faktor mit den Wortkategorien N (Substantiv) und V (Verb) als Ebenen kategorisch
CV Faktor, der angibt, ob das Anfangsphonem des Wortes ein Konsonant (C) oder ein Vokal (V) ist. kategorisch
CorrectLexdec numerischer Vektor mit dem Anteil der Probanden, die das Item bei der lexikalischen Entscheidung als Wort akzeptiert haben. kontinuierlich

Hypotheses

  • Welche Arten von Hypothesen könnten Sie für solche Daten aufstellen?
    • Unsere Reaktionszeitdaten sind unsere Messvariablen.
      • d.h. das, was wir messen
    • Alle anderen Variablen sind mögliche Vorhersagevariablen.
      • d.h. wir könnten vorhersagen, dass ihr Wert unsere Messvariablen beeinflussen würde
  • Welche Auswirkung (wenn überhaupt) könnte zum Beispiel die Worthäufigkeit auf die Reaktionszeiten bei lexikalischen Entscheidungsaufgaben haben? auf die Benennungszeiten?
    • Wie sieht es mit Unterschieden in den Reaktionszeiten zwischen jüngeren und älteren Teilnehmern aus?
  • Welchen Effekt (wenn überhaupt) könnte die Wortkategorie auf die Reaktionszeiten haben?

5.2 Datenvisualisierung

  • Die Visualisierung unserer Daten hilft uns, die Beziehung zwischen den Variablen zu veranschaulichen, um eine Geschichte zu erzählen.
  • In der Regel visualisieren wir Variablen, für die wir eine bestimmte Hypothese haben: Prädiktor- und Messvariable(n)

5.2.1 Visualisierung von Verteilungen

  • Histogramme, Dichtediagramme und Balkendiagramme für Zählwerte visualisieren die Verteilung von Beobachtungen
    • Sie geben Aufschluss darüber, wie oft wir bestimmte Werte einer Variablen beobachtet haben.
    • In der Regel tun wir dies, um ein Gefühl dafür zu bekommen, wie unsere Daten aussehen
      • Was ist der Bereich unserer Daten, der Modus, die Gesamtverteilung der Werte?
Aufgabe: Beziehungen visualisieren
  1. Erstellen Sie ein Diagramm, das die Verteilung der Häufigkeit der geschriebenen Wörter visualisiert.
  2. Erstellen Sie ein Diagramm, das die Verteilung von Substantiven und Verben visualisiert.

5.3 Visualisierung von Beziehungen

  • Um Beziehungen zwischen Variablen zu visualisieren, müssen wir mindestens zwei Variablen auf die Ästhetik eines Diagramms abbilden
  • Wir haben dies bereits getan, indem wir Farbe oder Füllung einer kategorischen Variable zugeordnet haben, während wir eine
    • eine kontinuierliche Variable auf die x-Achse für Histogramme/Dichte-Diagramme, oder
    • eine kategoriale Variable auf die y-Achse für ein Balkendiagramm
Aufgabe: Visualisierung von Beziehungen in Verteilungen
  1. Fügen Sie den soeben erstellten Diagrammen eine weitere Ästhetik hinzu, um sie darzustellen:
    • die Verteilung der WrittenFrequency-Werte für Wörter mit Anfangskonsonanten und Vokalen
    • die Verteilung der Substantive und Verben für Wörter mit Anfangskonsonanten und Vokalen

5.3.1 Gruppierte kontinuierliche Variable

  • Unsere Histogramme, Dichtediagramme und Balkendiagramme zeigen die Verteilung der Werte einer kontinuierlichen Variable nach verschiedenen Stufen einer kategorischen Variable

5.3.1.1 Gestapelt

  • Beachten Sie, dass diese Kategorien standardmäßig übereinander gestapelt sind.
Abbildung 5.1: Visualising relationships in distributions

5.3.1.2 Dodged (Ausgewiche)

  • aber dass wir sie nebeneinander haben können, indem wir identity auf dodge setzen
    • Ich finde, dass dies für Balkenplots nützlicher ist
Abbildung 5.2: Visualising relationships in distributions

5.3.2 Zwei kontinuierliche Variablen

  • Wir wollen oft die Auswirkungen einer kontinuierlichen Variable auf eine andere sehen.
  • In unserem Datensatz english haben wir zum Beispiel die Variablen WrittenFreuqency und RTlexdec
    • Welche Art von Beziehung werden diese beiden Variablen Ihrer Meinung nach haben?
    • Denken Sie z.B., dass Wörter mit einer niedrigeren WrittenFrequency in einer lexikalischen Entscheidungsaufgabe tendenziell längere oder kürzere Reaktionszeiten haben werden?
    • Wie könnte man sich eine solche Beziehung vorstellen?

## + geom_?
df_english |> 
  ggplot() +
  aes(x = WrittenFrequency, y = RTlexdec) 

df_english |> 
  ggplot() +
  aes(x = WrittenFrequency, y = RTlexdec) +
  geom_point()

  • Nehmen Sie sich einen Moment Zeit, um diese Grafik zu betrachten und eine Interpretation zu finden
    • Welchen Einfluss hat die Schrifthäufigkeit eines Wortes auf die Reaktionszeit bei einer lexikalischen Entscheidungsaufgabe?
    • Vervollständigen Sie den Satz: “Wörter mit einer höheren Worthäufigkeit lösten ___________ Reaktionszeiten aus”
  • Wo gab es mehr Variation in den Reaktionszeiten? Wo gab es weniger Variation?

5.3.3 Hinzufügen weiterer Variablen

  • Erinnern Sie sich daran, dass wir andere Ästhetiken wie fill oder colour verwenden können
    • für geom_point() ist es auch hilfreich, shape zu verwenden
df_english |> 
  ggplot() +
  aes(x = WrittenFrequency, y = RTlexdec,
      colour = AgeSubject,
      shape = AgeSubject) +
  geom_point()

  • In der Mitte des Diagramms gibt es viele Überschneidungen.
    • Wie können wir die Deckkraft der Punkte ändern?
df_english |> 
  ggplot() +
  aes(x = WrittenFrequency, y = RTlexdec,
      colour = AgeSubject,
      shape = AgeSubject) +
  geom_point(alpha = .5)

  • den Zusammenhang zwischen Altersgruppe und Reaktionszeit beschreiben
Aufgabe 5.1: Adding another variable

Beispiel 5.1  

Wie könnten Sie eine vierte Variable in die obige Darstellung einfügen? Versuchen Sie, CV hinzuzufügen. Ergibt die Darstellung immer noch eine klare Geschichte?

5.3.4 Facet grids

  • Wenn Sie mehr als drei Variablen darstellen wollen, ist es im Allgemeinen eine gute Idee, kategorische Variablen in Facetten aufzuteilen.
    • Facetten sind Teilplots, die Teilmengen der Daten anzeigen
  • wir können facet_wrap() verwenden, das eine Formel als Argument annimmt
    • Diese Formel enthält ~ und den Namen einer kategorialen Variable, z. B. ~CV

## + geom_?
df_english |> 
  ggplot() +
  aes(x = WrittenFrequency, y = RTlexdec,
      colour = AgeSubject,
      shape = AgeSubject) +
  facet_wrap(~CV) 

df_english |> 
  ggplot() +
  aes(x = WrittenFrequency, y = RTlexdec,
      colour = AgeSubject,
      shape = AgeSubject) +
  facet_wrap(~CV) +
  geom_point(alpha = .5)

5.4 Bearbeitete Daten

  • Wir können unsere Daten auch bearbeiten, bevor wir sie in ggplot() eingeben.
    • Dies ist nützlich, wenn wir keine permanenten Änderungen an den Daten vornehmen wollen, sondern nur eine Teilmenge der Daten darstellen wollen
  • Vielleicht wollen wir nur die Wörter betrachten, die mit einem Vokal beginnen. Wie könnten wir das mit einem dplyr-Verb machen?

df_english |> 
  filter(CV == "V") |> 
  ggplot() +
  aes(x = WrittenFrequency, y = RTlexdec,
      colour = AgeSubject,
      shape = AgeSubject) +
  geom_point()

Aufgabe 5.2: Plot-Anmerkung

Beispiel 5.2  

  • Vergessen Sie nicht, Ihre Diagramme mit nützlichen Beschriftungen zu versehen, um dem Leser die Interpretation des Diagramms zu erleichtern
  • Fügen wir einen Titel und Beschriftungen für die x- und y-Achse hinzu
df_english |> 
  filter(CV == "V") |> 
  ggplot() +
  aes(x = WrittenFrequency, y = RTlexdec,
      colour = AgeSubject,
      shape = AgeSubject) +
  labs(title = "WrittenFrequency scores by reaction time",
       x = "WrittenFrequency score",
       y = "Reaction time (ms)",
       colour = "Age group",
       shape = "Age group") +
  geom_point()

5.5 Quarto Code Chunk Einstellungen

  • lange Codeabschnitte können zu sehr unübersichtlichen Ausgabedokumenten führen
  • normalerweise ist nur die Darstellung für den Leser wichtig, nicht der Code, der sie erzeugt hat
  • wir können die Darstellung und Auswertung von Code Chunks durch Code Chunk Optionen steuern
    • diese beginnen mit #|
    • und befinden sich direkt unter ```{r}```
  • wichtige Code-Chunk-Optionen:
Tabelle 5.2: Most common chunk options
option values function
#&#124; echo: true/false should this code chunk be printed when rendering?
#&#124; eval: true/false should this code chunk be run when rendering?

5.5.1 Verwendung von Code-Bausteinen

  • warum sehen wir das Ergebnis dieser Darstellung nicht?
```{r}
#| eval: false
df_english |> 
  ggplot() +
  aes(x = RTlexdec, y = RTnaming,
      colour = AgeSubject,
      shape = AgeSubject) +
  geom_point()
```

5.6 Plots speichern

  • oft wollen wir unsere Plots in einem Dokument verwenden, das nicht in RStudio erstellt wurde

    • zum Beispiel in einer Dissertation oder einem in LaTeX geschriebenen Papier
  • um dies zu tun, müssen wir unsere Zahlen als einen akzeptierten Dateityp laden, wie jpeg oder png

  • Das können wir mit der Funktion ggsave() machen.

  • Können Sie erraten, welche Arten von Argumenten ggsave() benötigt, um unsere Diagramme zu speichern? Einige sind erforderlich, einige sind optional.

5.6.1 ggsave()

Als Minimum benötigt ggsave() Argumente:

  1. den Namen des Plots in Ihrer Umgebung, den Sie speichern möchten
  2. den Dateinamen, unter dem Sie Ihre Darstellung speichern möchten
    • Es ist eine gute Idee, einen Ordner zu erstellen, in dem Sie Ihre Plots speichern, und den Dateipfad in den Namen aufzunehmen

5.6.1.1 ggsave() optionale Argumente

  • einige optionale Argumente sind:
    • width = wie breit soll der Plot in cm, mm, Zoll oder Pixel sein?
    • height = wie hoch soll der gespeichert Plot in cm, mm, Zoll oder Pixel sein?
    • dpi = gewünschte Auflösung (numerisch, oder eine Reihe von Strings: “retina” = 320, “print” = 300 oder “screen” = 72)
Warnung

Setzen Sie Code-Chunks, die Dateien auf Ihrem Rechner speichern, immer auf eval: false!!! Andernfalls wird jedes Mal, wenn Sie Ihr Skript ausführen, die Datei lokal neu geschrieben.

Aufgabe 5.3: ggsave()

Beispiel 5.3  

  1. Kopieren Sie den unten stehenden Code in einen Codechunk und führen Sie ihn aus. Schauen Sie sich Ihre “Files”-Tab an, was hat sich geändert?
```{r}
#| eval: false
ggsave(
  ## required:
  "figures/04-dataviz2/fig_lexdec_rt.png", 
  plot = fig_lexdec_rt,
  ## optional:
  width = 2000,
  height = 1000,
  units = "px",
  scale = 1,
  dpi = "print")
```
  1. Versuchen Sie, mit dem Maßstab und den dpi zu spielen. Was ändert sich?
  2. Versuchen Sie, die Werte für Einheiten, Breite und Höhe zu ändern. Was ändert sich?

Weitere Übungen

Weitere Übungen zu diesem Kapitel finden Sie in Kapitel A.5.

Session Info

Hergestellt mit R version 4.4.0 (2024-04-24) (Puppy Cup) und RStudioversion 2023.9.0.463 (Desert Sunflower).

sessionInfo()
R version 4.4.0 (2024-04-24)
Platform: aarch64-apple-darwin20
Running under: macOS Ventura 13.2.1

Matrix products: default
BLAS:   /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRblas.0.dylib 
LAPACK: /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRlapack.dylib;  LAPACK version 3.12.0

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

time zone: Europe/Berlin
tzcode source: internal

attached base packages:
[1] stats     graphics  grDevices datasets  utils     methods   base     

other attached packages:
 [1] kableExtra_1.4.0 knitr_1.46       languageR_1.5.0  ggthemes_5.1.0  
 [5] patchwork_1.2.0  lubridate_1.9.3  forcats_1.0.0    stringr_1.5.1   
 [9] dplyr_1.1.4      purrr_1.0.2      readr_2.1.5      tidyr_1.3.1     
[13] tibble_3.2.1     ggplot2_3.5.1    tidyverse_2.0.0 

loaded via a namespace (and not attached):
 [1] utf8_1.2.4        generics_0.1.3    renv_1.0.7        xml2_1.3.6       
 [5] stringi_1.8.3     hms_1.1.3         digest_0.6.35     magrittr_2.0.3   
 [9] evaluate_0.23     grid_4.4.0        timechange_0.3.0  fastmap_1.1.1    
[13] jsonlite_1.8.8    fansi_1.0.6       viridisLite_0.4.2 scales_1.3.0     
[17] cli_3.6.2         rlang_1.1.3       munsell_0.5.1     withr_3.0.0      
[21] yaml_2.3.8        tools_4.4.0       tzdb_0.4.0        colorspace_2.1-0 
[25] pacman_0.5.1      vctrs_0.6.5       R6_2.5.1          lifecycle_1.0.4  
[29] htmlwidgets_1.6.4 pkgconfig_2.0.3   pillar_1.9.0      gtable_0.3.5     
[33] glue_1.7.0        systemfonts_1.0.6 highr_0.10        xfun_0.43        
[37] tidyselect_1.2.1  rstudioapi_0.16.0 farver_2.1.1      htmltools_0.5.8.1
[41] labeling_0.4.3    rmarkdown_2.26    svglite_2.1.3     compiler_4.4.0   
Baayen, R. H., & Shafaei-Bajestan, E. (2019). languageR: Analyzing Linguistic Data: A Practical Introduction to Statistics. https://CRAN.R-project.org/package=languageR
Nordmann, E., & DeBruine, L. (2022). Applied Data Skills. Zenodo. https://doi.org/10.5281/zenodo.6365078
Wickham, H., Çetinkaya-Rundel, M., & Grolemund, G. (2023). R for Data Science (2. Aufl.).
4  Data Wrangling 1: Transformation
6  Einlesen von Daten
Quellcode
---
subtitle: "Visualisierung von Beziehungen"
author: "Daniela Palleschi"
institute: Humboldt-Universität zu Berlin
footer: "Woche 5 - Data Viz 2: Beziehungen"
lang: de
date: "11/15/2023"
date-format: "ddd [den] DD.MM.YYYY"
date-modified: last-modified
echo: true
code-tools: true
---

## Datenvisualisierung 2 {#sec-dataviz2}

### Lesungen {.unnumbered}

Die **Pflichtlektüre** zur Vorbereitung auf dieses Thema ist [Kap. 2 (Datenvisualisierung)](https://r4ds.hadley.nz/data-visualize) aus [Abschnitt 2.5](https://r4ds.hadley.nz/data-visualize#visualizing-relationships) in @wickham_r_2023.

Eine **ergänzende Lektüre** ist [Ch. 3 (Data visualtion)](https://psyteachr.github.io/ads-v2/03-viz.html) in @nordmann_applied_2022.

## Wiederholung {.unnumbered .unlisted}

Letzte Woche haben wir gelernt...

- wie man Daten mit dem Paket `dplyr` aus dem `tidyverse` verarbeitet
- gelernt, wie man die `pipe` (` |> `) verwendet, um das Ergebnis einer Funktion in eine andere Funktion einzuspeisen
- über Funktionen, die auf Zeilen operieren
  + `filter()`, `arrange()`
- über Funktionen, die auf Spalten operieren
  + `rename()`, `mutate()`, `select()`, `relocate()`
- wie man `dplyr`-Funktionen mit Plots von `ggplot2` kombiniert

## Lernziele {.unnumbered .unlisted}

Heute werden wir lernen...

- wie man zwei oder mehr Variablen darstellt
  + mit Ästhetik und mit Facettenrastern
- wie man Codechunk-Optionen verwendet
- wie man Plots als Dateien speichert

### Lesungen {.unnumbered}

Die **Pflichtlektüre** zur Vorbereitung auf dieses Thema ist [Kap. 2 (Datenvisualisierung)](https://r4ds.hadley.nz/data-visualize) aus [Abschnitt 2.5](https://r4ds.hadley.nz/data-visualize#visualizing-relationships) in @wickham_r_2023.

Eine **ergänzende Lektüre** ist [Ch. 3 (Data visualtion)](https://psyteachr.github.io/ads-v2/03-viz.html) in @nordmann_applied_2022.

## Einrichtung {.unnumbered} {#sec-dataviz2-setup}

### Packages {.unnumbered}

```{r}
library(tidyverse)
library(patchwork)
library(ggthemes)
library(languageR)
```

```{r}
#| echo: false
pacman::p_load(
  knitr, kableExtra
)
```

- `tidyverse` Familie von Paketen
  + `ggplot2` für Diagramme
  + `dplyr` für die Datenverarbeitung
- `ggthemes` für farbenblindenfreundliche Farbpaletten
- `patchwork` für Plot-Layouts
- `languageR` für linguistische Datensätze

### ggplot theme {.unnumbered}

Ich habe mein bevorzugtes `ggplot`-Thema global festgelegt. Das bedeutet, dass nach dem Ausführen dieses Codes alle Diagramme dieses Thema verwenden werden.

```{r}
theme_set(theme_bw())
```


### Data {.unnumbered}

Wir verwenden den `english`-Datensatz aus dem @languageR-package.
  
  + enthält Daten aus einer lexikalischen Entscheidungsaufgabe in Englisch
  + Die logarithmisch transformierten Reaktionszeiten werden zurücktransformiert, so dass sie in Millisekunden angegeben werden.
    - Wir verwenden dazu die Funktion `exp()`.

```{r}
df_english <- 
  english |> 
  mutate(RTlexdec = exp(RTlexdec),
         RTnaming = exp(RTnaming))
```

#### `english` dataset {.unnumbered .smaller}

Unsere Variablen von Interesse sind:

```{r}
#| label: tbl-english
#| tbl-cap: english dataset variables of interest
#| echo: false
tribble(
  ~variable, ~description, ~type,
  "RTlexdec", "Reaktionszeiten für eine visuelle lexikalische Entscheidung (Millisekunden)", "kontinuierlich",
  "RTnaming", "Reaktionszeiten für den Beginn einer verbalen Wortbenennungsaufgabe (Millisekunden)", "kontinuierlich",
  "WrittenFrequency", "numerischer Vektor mit der logarithmischen Häufigkeit in der lexikalischen Datenbank von CELEX", "kontinuierlich",
  "Wort", "ein Faktor mit 2284 Wörtern", "kategorisch",
  "AgeSubject", "ein Faktor mit der Altersgruppe des Probanden als Level: jung versus alt", "kategorisch",
  "WordCategory", "ein Faktor mit den Wortkategorien N (Substantiv) und V (Verb) als Ebenen", "kategorisch",
  "CV", "Faktor, der angibt, ob das Anfangsphonem des Wortes ein Konsonant (C) oder ein Vokal (V) ist.", "kategorisch",
  "CorrectLexdec", "numerischer Vektor mit dem Anteil der Probanden, die das Item bei der lexikalischen Entscheidung als Wort akzeptiert haben.", "kontinuierlich"
) |> 
  kable() |> 
  kable_styling()
```

### Hypotheses {.unnumbered}

- Welche Arten von Hypothesen könnten Sie für solche Daten aufstellen?
  + Unsere Reaktionszeitdaten sind unsere *Messvariablen*.
    + d.h. das, was wir messen
  + Alle anderen Variablen sind mögliche *Vorhersagevariablen*.
    + d.h. wir könnten vorhersagen, dass ihr Wert unsere Messvariablen beeinflussen würde
  
- Welche Auswirkung (wenn überhaupt) könnte zum Beispiel die Worthäufigkeit auf die Reaktionszeiten bei lexikalischen Entscheidungsaufgaben haben? auf die Benennungszeiten?
  + Wie sieht es mit Unterschieden in den Reaktionszeiten zwischen jüngeren und älteren Teilnehmern aus?
- Welchen Effekt (wenn überhaupt) könnte die Wortkategorie auf die Reaktionszeiten haben?

## Datenvisualisierung

- Die Visualisierung unserer Daten hilft uns, die Beziehung zwischen den Variablen zu veranschaulichen, um eine Geschichte zu erzählen.
- In der Regel visualisieren wir Variablen, für die wir eine bestimmte Hypothese haben: Prädiktor- und Messvariable(n)

### Visualisierung von Verteilungen

- Histogramme, Dichtediagramme und Balkendiagramme für Zählwerte visualisieren die *Verteilung* von Beobachtungen
  + Sie geben Aufschluss darüber, wie oft wir bestimmte Werte einer Variablen beobachtet haben.
  + In der Regel tun wir dies, um ein Gefühl dafür zu bekommen, wie unsere Daten aussehen
    + Was ist der Bereich unserer Daten, der Modus, die Gesamtverteilung der Werte?


::: callout-tip
### Aufgabe: Beziehungen visualisieren

1. Erstellen Sie ein Diagramm, das die Verteilung der Häufigkeit der geschriebenen Wörter visualisiert.
2. Erstellen Sie ein Diagramm, das die Verteilung von Substantiven und Verben visualisiert.


```{r}
#| echo: false
#| eval: false
df_english |> 
  ggplot() +
  aes(x = WrittenFrequency) +
  geom_histogram() +

df_english |> 
  ggplot() +
  aes(x = WordCategory) +
  geom_bar() +
  
plot_annotation(tag_levels = "A")
```

:::

## Visualisierung von Beziehungen

- Um Beziehungen zwischen Variablen zu visualisieren, müssen wir mindestens zwei Variablen auf die Ästhetik eines Diagramms abbilden
- Wir haben dies bereits getan, indem wir Farbe oder Füllung einer kategorischen Variable zugeordnet haben, während wir eine    
    + eine kontinuierliche Variable auf die x-Achse für Histogramme/Dichte-Diagramme, oder
    + eine kategoriale Variable auf die y-Achse für ein Balkendiagramm
    
::: callout-tip
### Aufgabe: Visualisierung von Beziehungen in Verteilungen

1. Fügen Sie den soeben erstellten Diagrammen eine weitere Ästhetik hinzu, um sie darzustellen:
    + die Verteilung der WrittenFrequency-Werte für Wörter mit Anfangskonsonanten und Vokalen
    + die Verteilung der Substantive und Verben für Wörter mit Anfangskonsonanten und Vokalen


```{r}
#| echo: false
#| eval: false
#| label: fig-distributions
#| fig-cap: Visualising relationships in distributions
df_english |> 
  ggplot() +
  aes(x = WrittenFrequency, fill = CV) +
  geom_histogram() +
  scale_fill_colorblind() +

df_english |> 
  ggplot() +
  aes(x = WordCategory, fill = CV) +
  geom_bar() +
  scale_fill_colorblind() +
  
plot_annotation(tag_levels = "A")
```

:::

### Gruppierte kontinuierliche Variable

- Unsere Histogramme, Dichtediagramme und Balkendiagramme zeigen die Verteilung der Werte einer *kontinuierlichen* Variable nach verschiedenen Stufen einer *kategorischen* Variable

#### Gestapelt

- Beachten Sie, dass diese Kategorien standardmäßig übereinander gestapelt sind.

```{r}
#| echo: false
#| label: fig-stacked
#| fig-cap: Visualising relationships in distributions
df_english |> 
  ggplot() +
  aes(x = WrittenFrequency, fill = CV) +
  geom_histogram() +
  scale_fill_colorblind() +


df_english |> 
  ggplot() +
  aes(x = WordCategory, fill = CV) +
  geom_bar() +
  scale_fill_colorblind() +

  
plot_annotation(tag_levels = "A")
```

#### Dodged (Ausgewiche)

- aber dass wir sie nebeneinander haben können, indem wir `identity` auf `dodge` setzen
  + Ich finde, dass dies für Balkenplots nützlicher ist

```{r}
#| echo: false
#| label: fig-task1
#| fig-cap: Visualising relationships in distributions
#| fig-asp: .8
(df_english |> 
  ggplot() +
  aes(x = WrittenFrequency, fill = CV) +
  labs(title = 'geom_histogram()') +
  geom_histogram(position = "identity") +
  scale_fill_colorblind() +

  
  df_english |> 
  ggplot() +
  aes(x = WrittenFrequency, fill = CV) +
  scale_fill_colorblind() +
  labs(title = 'geom_histogram(position = "dodge")') +
  geom_histogram(position = "dodge")) /

  (
    df_english |> 
  ggplot() +
  aes(x = WordCategory, fill = CV) +
  labs(title = 'geom_bar()') +
  geom_bar() +
  scale_fill_colorblind() +

  
df_english |> 
  ggplot() +
  aes(x = WordCategory, fill = CV) +
  labs(title = 'geom_bar(position = "dodge")') +
  scale_fill_colorblind() +
  geom_bar(position = "dodge") 
) +
  
plot_annotation(tag_levels = "A")+
  plot_layout(guides = "collect")
```

### Zwei kontinuierliche Variablen

- Wir wollen oft die Auswirkungen einer kontinuierlichen Variable auf eine andere sehen.
- In unserem Datensatz `english` haben wir zum Beispiel die Variablen `WrittenFreuqency` und `RTlexdec`
  + Welche Art von Beziehung werden diese beiden Variablen Ihrer Meinung nach haben?
  + Denken Sie z.B., dass Wörter mit einer niedrigeren WrittenFrequency in einer lexikalischen Entscheidungsaufgabe tendenziell längere oder kürzere Reaktionszeiten haben werden?
  + Wie könnte man sich eine solche Beziehung vorstellen?
  
### {.unnumbered .unlisted}

```{r}
## + geom_?
df_english |> 
  ggplot() +
  aes(x = WrittenFrequency, y = RTlexdec) 
```

### {.unnumbered .unlisted}

```{r}
df_english |> 
  ggplot() +
  aes(x = WrittenFrequency, y = RTlexdec) +
  geom_point()
```

::: {.content-visible when-format="revealjs"}
### {.unnumbered .unlisted}

```{r}
#| echo: false
df_english |> 
  ggplot() +
  aes(x = WrittenFrequency, y = RTlexdec) +
  geom_point()
```
:::

- Nehmen Sie sich einen Moment Zeit, um diese Grafik zu betrachten und eine Interpretation zu finden
  + Welchen Einfluss hat die Schrifthäufigkeit eines Wortes auf die Reaktionszeit bei einer lexikalischen Entscheidungsaufgabe?
  + Vervollständigen Sie den Satz: "Wörter mit einer höheren Worthäufigkeit lösten ___________ Reaktionszeiten aus"

- Wo gab es mehr Variation in den Reaktionszeiten? Wo gab es weniger Variation?

### Hinzufügen weiterer Variablen

- Erinnern Sie sich daran, dass wir andere Ästhetiken wie `fill` oder `colour` verwenden können
  + für `geom_point()` ist es auch hilfreich, `shape` zu verwenden
  
```{r}
#| output-location: column-fragment
df_english |> 
  ggplot() +
  aes(x = WrittenFrequency, y = RTlexdec,
      colour = AgeSubject,
      shape = AgeSubject) +
  geom_point()
```

- In der Mitte des Diagramms gibt es viele Überschneidungen.
  + Wie können wir die Deckkraft der Punkte ändern?

::: {.content-visible when-format="revealjs"}
### {.unlisted .unnumbered}
:::

```{r}
#| output-location: column-fragment
df_english |> 
  ggplot() +
  aes(x = WrittenFrequency, y = RTlexdec,
      colour = AgeSubject,
      shape = AgeSubject) +
  geom_point(alpha = .5)
```

- den Zusammenhang zwischen Altersgruppe und Reaktionszeit beschreiben

::: {.content-visible when-format="revealjs"}
### Aufgabe {.unlisted .unnumbered}
:::

::: callout-tip

#### [Aufgabe @exm-add]: `Adding another variable`
::: {#exm-add .custom}
::: nonincremental
Wie könnten Sie eine vierte Variable in die obige Darstellung einfügen? Versuchen Sie, `CV` hinzuzufügen. Ergibt die Darstellung immer noch eine klare Geschichte?
:::
:::
:::


### Facet grids

- Wenn Sie mehr als drei Variablen darstellen wollen, ist es im Allgemeinen eine gute Idee, kategorische Variablen in *Facetten* aufzuteilen.
  + Facetten sind Teilplots, die Teilmengen der Daten anzeigen
- wir können `facet_wrap()` verwenden, das eine Formel als Argument annimmt
  + Diese Formel enthält `~` und den Namen einer kategorialen Variable, z. B. `~CV`
  
### {.unnumbered .uncounted}

```{r}
#| code-line-numbers: "7"
## + geom_?
df_english |> 
  ggplot() +
  aes(x = WrittenFrequency, y = RTlexdec,
      colour = AgeSubject,
      shape = AgeSubject) +
  facet_wrap(~CV) 
```

### {.unnumbered .uncounted}

```{r}
#| code-line-numbers: "6-7"
df_english |> 
  ggplot() +
  aes(x = WrittenFrequency, y = RTlexdec,
      colour = AgeSubject,
      shape = AgeSubject) +
  facet_wrap(~CV) +
  geom_point(alpha = .5)
```

## Bearbeitete Daten

- Wir können unsere Daten auch bearbeiten, bevor wir sie in `ggplot()` eingeben.
  - Dies ist nützlich, wenn wir keine permanenten Änderungen an den Daten vornehmen wollen, sondern nur eine Teilmenge der Daten darstellen wollen

- Vielleicht wollen wir nur die Wörter betrachten, die mit einem Vokal beginnen. Wie könnten wir das mit einem `dplyr`-Verb machen?

### {.unnumbered .unlisted}

```{r}
#| output-location: column-fragment
df_english |> 
  filter(CV == "V") |> 
  ggplot() +
  aes(x = WrittenFrequency, y = RTlexdec,
      colour = AgeSubject,
      shape = AgeSubject) +
  geom_point()
```


::: {.content-visible when-format="revealjs"}
### Aufgabe {.unlisted .unnumbered}
:::

::: callout-tip

#### [Aufgabe @exm-labels]: Plot-Anmerkung
::: {#exm-labels .custom}
::: nonincremental

- Vergessen Sie nicht, Ihre Diagramme mit nützlichen Beschriftungen zu versehen, um dem Leser die Interpretation des Diagramms zu erleichtern
- Fügen wir einen Titel und Beschriftungen für die x- und y-Achse hinzu

```{r}
#| output-location: slide
df_english |> 
  filter(CV == "V") |> 
  ggplot() +
  aes(x = WrittenFrequency, y = RTlexdec,
      colour = AgeSubject,
      shape = AgeSubject) +
  labs(title = "WrittenFrequency scores by reaction time",
       x = "WrittenFrequency score",
       y = "Reaction time (ms)",
       colour = "Age group",
       shape = "Age group") +
  geom_point()
```

:::
:::
:::

## Quarto Code Chunk Einstellungen

- lange Codeabschnitte können zu sehr unübersichtlichen Ausgabedokumenten führen
- normalerweise ist nur die Darstellung für den Leser wichtig, nicht der Code, der sie erzeugt hat
- wir können die Darstellung und Auswertung von Code Chunks durch Code Chunk Optionen steuern
  + diese beginnen mit `#|`
  + und befinden sich direkt unter ```` ```{r}``` ````

::: {.content-visible when-format="revealjs"}
### {.unlisted .unnumbered}
:::

- wichtige Code-Chunk-Optionen:

```{r}
#| label: tbl-chunks
#| tbl-cap: Most common chunk options
#| echo: false
tribble(
  ~"option", ~"values", ~"function",
  "#| echo: ", "true/false", "should this code chunk be printed when rendering?",
  "#| eval: ", "true/false", "should this code chunk be run when rendering?"
) |> 
  kable() |> kable_styling()
```

### Verwendung von Code-Bausteinen

- warum sehen wir das Ergebnis dieser Darstellung nicht?

```{r}
#| echo: fenced
#| eval: false
df_english |> 
  ggplot() +
  aes(x = RTlexdec, y = RTnaming,
      colour = AgeSubject,
      shape = AgeSubject) +
  geom_point()
```

## Plots speichern

- oft wollen wir unsere Plots in einem Dokument verwenden, das nicht in RStudio erstellt wurde
  + zum Beispiel in einer Dissertation oder einem in LaTeX geschriebenen Papier
- um dies zu tun, müssen wir unsere Zahlen als einen akzeptierten Dateityp laden, wie `jpeg` oder `png`
- Das können wir mit der Funktion `ggsave()` machen.

- Können Sie erraten, welche Arten von Argumenten `ggsave()` benötigt, um unsere Diagramme zu speichern? Einige sind erforderlich, einige sind optional.

### `ggsave()`

Als Minimum benötigt `ggsave()` Argumente:

1. den Namen des Plots in Ihrer Umgebung, den Sie speichern möchten
2. den Dateinamen, unter dem Sie Ihre Darstellung speichern möchten
    + Es ist eine gute Idee, einen Ordner zu erstellen, in dem Sie Ihre Plots speichern, und den Dateipfad in den Namen aufzunehmen

#### `ggsave()` optionale Argumente

- einige optionale Argumente sind:
  - `width = ` wie breit soll der Plot in cm, mm, Zoll oder Pixel sein?
  - `height = ` wie hoch soll der gespeichert Plot in cm, mm, Zoll oder Pixel sein?
  - `dpi = ` gewünschte Auflösung (numerisch, oder eine Reihe von Strings: "retina" = 320, "print" = 300 oder "screen" = 72)
  
::: {.content-visible when-format="revealjs"}
### `eval: false` {.unlisted .unnumbered}
:::

::: callout-warning
Setzen Sie Code-Chunks, die Dateien auf Ihrem Rechner speichern, *immer* auf `eval: false`!!! Andernfalls wird jedes Mal, wenn Sie Ihr Skript ausführen, die Datei lokal neu geschrieben.
:::

::: {.content-visible when-format="revealjs"}
### Aufgabe {.unlisted .unnumbered}
:::

::: callout-tip

#### [Aufgabe @exm-ggsave]: `ggsave()`
::: {#exm-ggsave .custom}
::: nonincremental
1. Kopieren Sie den unten stehenden Code in einen Codechunk und führen Sie ihn aus. Schauen Sie sich Ihre "Files"-Tab an, was hat sich geändert?

```{r}
#| echo: fenced
#| eval: false
ggsave(
  ## required:
  "figures/04-dataviz2/fig_lexdec_rt.png", 
  plot = fig_lexdec_rt,
  ## optional:
  width = 2000,
  height = 1000,
  units = "px",
  scale = 1,
  dpi = "print")
```

2. Versuchen Sie, mit dem Maßstab und den dpi zu spielen. Was ändert sich?
3. Versuchen Sie, die Werte für Einheiten, Breite und Höhe zu ändern. Was ändert sich?
:::
:::
:::

## Weitere Übungen {.unnumbered}

Weitere Übungen zu diesem Kapitel finden Sie in @sec-app_dataviz2.

## Session Info {.unnumbered .unlisted}

Hergestellt mit `r R.version.string` (`r R.version$nickname`) und RStudioversion 2023.9.0.463 (Desert Sunflower).

```{r}
sessionInfo()
```

```{r}
#| eval: false
#| echo: false
quarto::datenviz_render(output_format = "all")
```