vis-penguins

vis
yacsda
ggquick
penguins
string
Published

September 12, 2023

Aufgabe

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

Sie können den Datensatz so beziehen:

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

Oder so:

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

Ein Codebook finden Sie hier.

Die Forschungsfrage lautet:

Was ist der Einfluss der Spezies und der Schnabellänge auf das Körpergewicht?

  • Abhängige Variable (metrisch), y: Körpergewicht
  • Unabhängige Variable 1 (nominal), x1: Spezies
  • Unabhängige Variable 2 (metrisch), x2: Schnabellänge

Visualisieren Sie dazu folgende Aspekte der Forschungsfrage!

Hinweise:

Aufgaben

  1. Visualisieren Sie die Verteilung von y auf zwei verschiedene Arten.
  2. Fügen Sie relevante Kennzahlen 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)
library(DataExplorer)

Los geht’s

Umbenennen

Für weniger Tippen nenne ich die Variablen um:

d <-
  d |> 
  rename(y = body_mass_g, x1 = species, x2 = bill_length_mm)

Das ist aber nicht unbedingt nötig und bringt auch vielleicht keinen Vorteil für Sie.

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")
Warning: Removed 2 rows containing non-finite outside the scale range
(`stat_density()`).

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`.
Warning: Removed 2 rows containing non-finite outside the scale range
(`stat_bin()`).

Alternativ könnte man das R-Paket {DataExplorer} verwenden:

d |> 
  select(y) |> 
  plot_density()

Fügen Sie relevante Kennzahlen 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.

Natürlich könnte man sich typische deskriptive Statistiken auch anderweitig ausgeben lassen, etwa mit {easystats}:

d |> 
  select(y) |> 
  describe_distribution()
Variable |    Mean |     SD |     IQR |              Range | Skewness | Kurtosis |   n | n_Missing
--------------------------------------------------------------------------------------------------
y        | 4201.75 | 801.95 | 1206.25 | [2700.00, 6300.00] |     0.47 |    -0.72 | 342 |         2

Visualisieren Sie die Verteilung von x1 und x2.

x1

Mit ggpubr:

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

Mit DataExplorer:

d |> 
  select(x1) |> 
  plot_bar()

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`.
Warning: Removed 2 rows containing non-finite outside the scale range
(`stat_bin()`).

Oder so:

gghistogram(d, x = "y", facet.by = "x1")
Warning: Using `bins = 30` by default. Pick better value with the argument
`bins`.
Warning: Removed 2 rows containing non-finite outside the scale range
(`stat_bin()`).

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")
Warning: Removed 2 rows containing missing values or values outside the scale range
(`geom_point()`).

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")
Warning: Removed 2 rows containing missing values or values outside the scale range
(`geom_point()`).

Synonym könnten wir schreiben:

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

ggscatter(d_logged, x = "x2", y = "y")
Warning: Removed 2 rows containing missing values or values outside the scale range
(`geom_point()`).

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"))
Warning: Removed 2 rows containing non-finite outside the scale range
(`stat_smooth()`).
Warning: Removed 2 rows containing missing values or values outside the scale range
(`geom_point()`).

Ersetzen Sie die Regressionsgerade durch eine LOESS-Gerade

ggscatter(d_logged, x = "x2", y = "y", add = "loess", 
             add.params = list(color = "blue"))
Warning: Removed 2 rows containing non-finite outside the scale range
(`stat_smooth()`).
Warning: Removed 2 rows containing missing values or values outside the scale range
(`geom_point()`).

Gruppieren Sie das letzte Diagramm nach x1

ggscatter(d_logged, x = "x2", y = "y", add = "loess", 
             add.params = list(color = "blue"),
          facet.by = "x1")
Warning: Removed 2 rows containing non-finite outside the scale range
(`stat_smooth()`).
Warning: Removed 2 rows containing missing values or values outside the scale range
(`geom_point()`).

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: 3 × 3
  y_dicho x1            n
  <lgl>   <fct>     <int>
1 NA      Adelie      152
2 NA      Chinstrap    68
3 NA      Gentoo      124
ggbarplot(d_count, x = "y_dicho", y = "n", facet.by = "x1", label = TRUE)

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: 3 × 4
  y_dicho x1            n  prop
  <lgl>   <fct>     <int> <dbl>
1 NA      Adelie      152  0.44
2 NA      Chinstrap    68  0.2 
3 NA      Gentoo      124  0.36

Check:

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

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.


Categories:

  • vis
  • yacsda
  • ggquick
  • penguins
  • string