vis-gapminder

vis
yacsda
ggquick
gapminder
string
Published

September 12, 2023

Aufgabe

In dieser Fallstudie (YACSDA: Yet another Case Study on Data Analysis) untersuchen wir den Datensatz gapminder.

Sie können den Datensatz so beziehen:

#install.packages("gapminder")
library(gapminder)
data("gapminder")
d <- gapminder 

Oder so:

d <- read.csv("https://vincentarelbundock.github.io/Rdatasets/csv/gapminder/gapminder.csv")

Ein Codebook finden Sie hier.

Die Forschungsfrage lautet:

Was ist der Einfluss des Kontinents und des Bruttosozialprodukts auf die Lebenswartung?

  • Abhängige Variable (metrisch), y: Lebenserwartung
  • Unabhängige Variable 1 (nominal), x1: Kontinent
  • Unabhängige Variable 2 (metrisch), x2: Bruttosozialprodukt

Visualisieren Sie dazu folgende Aspekte der Forschungsfrage!

Aufgaben

  1. Visualisieren Sie die Verteilung von y auf zwei verschiedene Arten.
  2. Fügen Sie relevante Kennzahlen zur letzten Visualisierung hinzu.
  3. Visualisieren Sie die Verteilung von x1 und x2.
  4. Visualisieren Sie die Verteilung von y bedingt auf x1.
  5. Fügen Sie relevante Kennzahlen zur letzten Visualisierung hinzu.
  6. Visualisieren Sie den Zusammenhang von y und x2.
  7. Verbessern Sie das letzte Diagramm, so dass es übersichtlicher wird.
  8. Fügen Sie dem letzten Diagramm relevante Kennzahlen hinzu.
  9. Fügen Sie dem Diagramm zum Zusammenhang von y und x2 eine Regressionsgerade hinzu.
  10. Ersetzen Sie die Regressionsgerade durch eine LOESS-Gerade.
  11. Gruppieren Sie das letzte Diagramm nach x1.
  12. Dichotomisieren Sie y und zählen Sie die Häufigkeiten. Achtung: Dichotomisieren wird von einigen Statistikern mit Exkommunikation bestraft. Proceed at your own risk.
  13. Gruppieren Sie das letzte Diagramm nach den Stufen von x1.
  14. Variieren Sie das letzte Diagramm so, dass Anteile (relative Häufigkeiten) statt absoluter Häufigkeiten gezeigt werden.

Hinweise:











Lösung

Pakete starten

library(tidyverse) 
library(easystats)
library(ggpubr)
library(ggstatsplot)

Los geht’s

Umbenennen

Zur einfacheren Verarbeitung nenne ich die Variablen um:

d <-
  d |> 
  rename(y = lifeExp, x1 = continent, x2 = gdpPercap)

Visualisieren Sie die Verteilung von y auf zwei verschiedene Arten.

Das R-Paket ggpubr erstellt schöne Diagramme (basierend auf ggplot) auf einfache Art. Nehmen wir ein Dichtediagramm; die Variable y soll auf der X-Achse stehen:

ggdensity(d, x = "y")

Beachten Sie, dass die Variable in Anführungsstriche gesetzt werden muss: x = "y".

Oder ein Histogramm:

gghistogram(d, x = "y")
Warning: Using `bins = 30` by default. Pick better value with the argument
`bins`.

Fügen Sie relevante Kennzahlen zur letzten Visualisierung hinzu.

Um Diagramme mit Statistiken anzureichen, bietet sich das Paket ggstatsplot an:

gghistostats(d, x = y)

Beachten Sie, dass die Variable nicht in Anführungsstriche gesetzt werden darf: x = y.

Visualisieren Sie die Verteilung von x1 und x2.

x1

d_counted <- 
  d |> 
  count(x1) 
ggbarplot(data = d_counted, y = "n", x = "x1", label = TRUE)

x2

gghistostats(d, x = x2)

Visualisieren Sie die Verteilung von y bedingt auf x1

gghistogram(d, x = "y", fill = "x1")
Warning: Using `bins = 30` by default. Pick better value with the argument
`bins`.

Oder so:

gghistogram(d, x = "y", facet.by = "x1")
Warning: Using `bins = 30` by default. Pick better value with the argument
`bins`.

Fügen Sie relevante Kennzahlen zur letzten Visualisierung hinzu

grouped_gghistostats(d, x = y, grouping.var = x1)

Visualisieren Sie den Zusammenhang von y und x2

ggscatter(d, x = "x2", y = "y")

Verbessern Sie das letzte Diagramm, so dass es übersichtlicher wird

Es gibt mehrere Wege, das Diagramm übersichtlicher zu machen. Logarithmieren ist ein Weg.

d |> 
  mutate(x2 = log(x2)) |> 
  ggscatter(x = "x2", y = "y")

Synonym könnten wir schreiben:

d_logged <- 
  d |> 
  mutate(x2 = log(x2))
  

ggscatter(d_logged, x = "x2", y = "y")

Fügen Sie dem letzten Diagramm relevante Kennzahlen hinzu

ggscatterstats(d_logged, x = "x2", y = "y")

Fügen Sie dem Diagramm zum Zusammenhang von y und x2 eine Regressionsgerade hinzu

ggscatter(d_logged, x = "x2", y = "y", add = "reg.line", 
             add.params = list(color = "blue"))

Ersetzen Sie die Regressionsgerade durch eine LOESS-Gerade

ggscatter(d_logged, x = "x2", y = "y", add = "loess", 
             add.params = list(color = "blue"))

Gruppieren Sie das letzte Diagramm nach x1

ggscatter(d_logged, x = "x2", y = "y", add = "loess", 
             add.params = list(color = "blue"),
          facet.by = "x1")

Dichotomisieren Sie y und zählen Sie die Häufigkeiten

Nehmen wir einen Mediansplit, um zu dichotomisieren.

d <-
  d |> 
  mutate(y_dicho = ifelse(y > median(y), "high", "low"))
d |> 
  count(y_dicho) |> 
  ggbarplot(x = "y_dicho", y = "n")

Gleich viele! Das sollte nicht verwundern.

Gruppieren Sie das letzte Diagramm nach den Stufen von x1

d_count <- 
d |> 
  count(y_dicho, x1) 

d_count
# A tibble: 9 × 3
  y_dicho x1           n
  <chr>   <fct>    <int>
1 high    Africa      64
2 high    Americas   211
3 high    Asia       207
4 high    Europe     346
5 high    Oceania     24
6 low     Africa     560
7 low     Americas    89
8 low     Asia       189
9 low     Europe      14
ggbarplot(d_count, x = "y_dicho", y = "n", facet.by = "x1")

Variieren Sie das letzte Diagramm so, dass Anteile (relative Häufigkeiten) statt absoluter Häufigkeiten gezeigt werden

d_count <-
  d_count |> 
  mutate(prop = n / sum(n)) |> 
  mutate(prop = round(prop, 2))

d_count
# A tibble: 9 × 4
  y_dicho x1           n  prop
  <chr>   <fct>    <int> <dbl>
1 high    Africa      64  0.04
2 high    Americas   211  0.12
3 high    Asia       207  0.12
4 high    Europe     346  0.2 
5 high    Oceania     24  0.01
6 low     Africa     560  0.33
7 low     Americas    89  0.05
8 low     Asia       189  0.11
9 low     Europe      14  0.01

Check:

d_count |> 
  summarise(sum(prop))
# A tibble: 1 × 1
  `sum(prop)`
        <dbl>
1        0.99

Gut! Die Anteile summieren sich zu ca. 1 (100 Prozent).

ggbarplot(d_count, x = "y_dicho", y = "prop", facet.by = "x1", label = TRUE)

Man beachten, dass sich die Anteile auf das “Gesamt-N” beziehen.

Vielleicht möchten wir die Anteile lieber pro Stufe von x1 beziehen. Dazu gruppieren wir nach (und pro Stufe von) x1.

d_count <-
  d_count |> 
  group_by(x1) |> 
  mutate(prop = n / sum(n)) |> 
  mutate(prop = round(prop, 2))

d_count
# A tibble: 9 × 4
# Groups:   x1 [5]
  y_dicho x1           n  prop
  <chr>   <fct>    <int> <dbl>
1 high    Africa      64  0.1 
2 high    Americas   211  0.7 
3 high    Asia       207  0.52
4 high    Europe     346  0.96
5 high    Oceania     24  1   
6 low     Africa     560  0.9 
7 low     Americas    89  0.3 
8 low     Asia       189  0.48
9 low     Europe      14  0.04
ggbarplot(d_count, x = "y_dicho", y = "prop", facet.by = "x1", label = TRUE)


Categories:

  • vis
  • yacsda
  • ggquick
  • gapminder
  • string