library(tidyverse)
library(easystats)
library(rstanarm)
data("penguins", package = "palmerpenguins")
penguins-stan-06
Aufgabe
Wir untersuchen Einflussfaktoren bzw. Prädiktoren auf das Körpergewicht von Pinguinen. In dieser Aufgabe untersuchen wir in dem Zusammenhang den Zusammenhang des Geschlechts (als UV) und Körpergewicht (als AV).
Aufgabe:
Wie groß ist der statistische Einfluss der UV auf die AV?
- Geben Sie den Punktschätzer des Effekts an!
- Geben Sie die Breite eines 90%-HDI an (zum Effekt)!
- Wie groß ist die Wahrscheinlichkeit, dass der Effekt vorhanden ist (also größer als Null ist), die “Effektwahrscheinlichkeit”?
- Wie groß ist die Wahrscheinlichkeit, dass der Effekt substanziell vorhanden ist (also größer als 0.5 ist), die “Substantielle Effektwahrscheinlichkeit”?
Hinweise:
- Nutzen Sie die folgende Analyse als Grundlage Ihrer Antworten.
- Beachten Sie die Hinweise des Datenwerks.
Setup:
Dafür ist folgende Analyse gegeben.
Setup
library(rstanarm)
library(easystats)
library(tidyverse)
library(ggpubr)
Modell und Hypothese
Die Hypothese kann man wie folgt formalisieren:
\[\text{weight}_{m} > \text{weight}_{f},\]
“Der Mittelwert des Gewichts der männliche Tiere ist größer als das der weiblichen (female) Tiere”.
Die Prioris übernehmen wir vom Stan-Golem.🤖
🤖 Beep, beep!
👩🏫 An die Arbeit, Stan-Golem!
Alternativ könnten Sie den Datensatz als CSV-Datei importieren:
<- "https://vincentarelbundock.github.io/Rdatasets/csv/palmerpenguins/penguins.csv"
d_path <- data_read(d_path) # oder z.B. mit read_csv penguins
Ein Blick in die Daten zur Kontrolle, ob das Importieren richtig funktioniert hat:
glimpse(penguins)
Rows: 344
Columns: 8
$ species <fct> Adelie, Adelie, Adelie, Adelie, Adelie, Adelie, Adel…
$ island <fct> Torgersen, Torgersen, Torgersen, Torgersen, Torgerse…
$ bill_length_mm <dbl> 39.1, 39.5, 40.3, NA, 36.7, 39.3, 38.9, 39.2, 34.1, …
$ bill_depth_mm <dbl> 18.7, 17.4, 18.0, NA, 19.3, 20.6, 17.8, 19.6, 18.1, …
$ flipper_length_mm <int> 181, 186, 195, NA, 193, 190, 181, 195, 193, 190, 186…
$ body_mass_g <int> 3750, 3800, 3250, NA, 3450, 3650, 3625, 4675, 3475, …
$ sex <fct> male, female, female, NA, female, male, female, male…
$ year <int> 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007…
Wir entfernen noch alle fehlenden Werte:
<-
penguins_nona |>
penguins filter(sex == "female" | sex == "male")
$sex |> unique() penguins_nona
[1] male female
Levels: female male
<- stan_glm(body_mass_g ~ sex, # Regressionsgleichung
m1 data = penguins_nona, # Daten
seed = 42, # Reproduzierbarkeit
refresh = 0) # nicht so viel Output
<- parameters(m1, ci_method = "hdi", ci = .9)
m1_params m1_params
Parameter | Median | CI | CI_low | CI_high | pd | Rhat | ESS | Prior_Distribution | Prior_Location | Prior_Scale |
---|---|---|---|---|---|---|---|---|---|---|
(Intercept) | 3862.7923 | 0.9 | 3769.5656 | 3956.3636 | 1 | 1.000089 | 3572.529 | normal | 4207.057 | 2013.040 |
sexmale | 682.2466 | 0.9 | 547.2974 | 816.9999 | 1 | 1.000397 | 3652.939 | normal | 0.000 | 4020.192 |
Lösung
Punktschätzer
Der Punktschätzer ist in der Spalte Median
in der Tabelle parameters
zu finden. Sein Wert ist:
[1] 682.2466
Hier ist die Post-Verteilung des Effekts:
|> plot() m1_params
Alternative Visualisierung:
hdi(m1, ci = .9) |> plot()
Breite des Intervalls
Dazu liest man die Intervallgrenzen (90% CI
) in der richtigen Zeile ab (Tabelle parameters
).
Obere Grenze: 816.9999226.
Untere Grenze: 547.2974274.
Differenz = Obere_Grenze - Untere_Grenze:
[1] 269.7025
Einheit: mm
Effektwahrscheinlichkeit
Man erkennt schon im Diagramm zum Konfidenzintervall, dass 100% des Intervalls positiv ist. Daher ist die Effektwahrscheinlichkeit auch positiv.
Man kann diesen Wert aus der Tabelle oben (Ausgabe von parameters()
) einfach in der Spalte pd
ablesen. pd
steht für probability of direction, s. Details hier.
Oder so, ist auch einfach:
<- p_direction(m1) # aus Paket easystats
pd_m1 pd_m1
Parameter | pd | Effects | Component |
---|---|---|---|
(Intercept) | 1 | fixed | conditional |
sexmale | 1 | fixed | conditional |
Und plotten ist meist hilfreich: plot(pd_m1)
.
plot(pd_m1)
Substanzielle Effektwahrscheinlichkeit
Die Frage ist nichts anderes als nach ROPE zu fragen.
<- rope(m1, range = c(-500,+500))
rope_m1 rope_m1
Parameter | CI | ROPE_low | ROPE_high | ROPE_Percentage | Effects | Component |
---|---|---|---|---|---|---|
(Intercept) | 0.95 | -500 | 500 | 0 | fixed | conditional |
sexmale | 0.95 | -500 | 500 | 0 | fixed | conditional |
plot(rope_m1)
Das 90%-Intervall ist knapp außerhalb des ROPE.
Wir können die ROPE-Hypothese daher zurückweisen.