Die Varianzanalyse (ANOVA) ist ein inferenzstatistisches Verfahren des Frequentismus. Welches Skalenniveau passt zu diesem Verfahren?
Welches der folgenden Beispiele ist kein Beispiel für eine Nullhypothese?
Der t-Test ist ein inferenzstatistisches Verfahren des Frequentismus. Welches Skalenniveau passt zu diesem Verfahren?
Für Statistiken (Stichprobe) verwendet man meist lateinische Buchstaben; für Parameter (Population) verwendet man entsprechend meist griechische Buchstaben.
Vervollständigen Sie folgende Tabelle entsprechend!
Kennwert | Statistik | Parameter |
---|---|---|
Mittelwert | NA | |
Mittelwertsdifferenz | NA | |
Streuung | sd | NA |
Anteil | p | NA |
Korrelation | r | NA |
Regressionsgewicht | b | NA |
Kennwert | Statistik | Parameter |
---|---|---|
Mittelwert | ||
Mittelwertsdifferenz | - | |
Streuung | sd | |
Anteil | p | |
Korrelation | r | |
Regressionsgewicht | b |
Das Testen von Nullhypothesen wird u.a. deswegen kritisiert, weil die Nullhypothese zumeist apriori als falsch bekannt ist, weswegen es keinen Sinne mache, so die Kritiker, sie zu testen.
Nennen Sie ein Verfahren von John Kruschke, das einen Äquivalenzbereich testet und insofern eine Alternative zum Testen von Nullhypothesen anbietet.
Hinweise:
rope
Wählen Sie das Diagramm, in dem kein Interaktionseffekt (in der Population) vorhanden ist (bzw. wählen Sie Diagramm, dass dies am ehesten darstellt).
Das Streudiagramm Diagramm A
zeigt keinen Interaktionseffekt.
Ein Streudiagramm von und ergibt folgende Abbildung:
Wählen Sie das am besten passende Modell aus der Liste aus!
Das dargestellte Modell lautet .
Ein Streudiagramm von und ergibt folgende Abbildung; dabei wird noch die Gruppierungsvariable (mit den Stufen 0
und 1
) berücksichtigt (vgl. Farbe und Form der Punkte). Zur besseren Orientierung ist die Regressionsgerade pro Gruppe eingezeichnet.
Wählen Sie das (für die Population) am besten passende Modell aus der Liste aus!
Hinweis: Ein Interaktionseffekt der Variablen und ist mit gekennzeichnet.
Das dargestellte Modell lautet . Der Modellfehler hat den Anteil im Vergleich zur Streuung von .
Gegeben sei ein Datensatz mit folgenden Prädiktoren, wobei Studierende die Beobachtungseinheit darstellen:
Die vorherzusagende Variable (; Kriterium) ist Gehalt nach Studienabschluss.
Folgende Modellparameter einer Regression (Least Squares) seien gegeben:
Welche der Aussagen ist korrekt?
Letzte Mathenote (z-Wert)
und Alter (z-Wert)
gilt, dass das Gehalt im Mittel höher ist bei im Vergleich zu , laut dem Modell.
Letzte Mathenote (z-Wert)
und = Alter (z-Wert)
gilt, dass das Gehalt im Mittel höher ist bei im Vergleich zu , laut dem Modell.
Geschlecht_Frau (0: nein, 1: ja)
, Letzte Mathenote (z-Wert)
, Alter (z-Wert)
, laut dem Modell.
Die richtige Lösung lautet: A.
Erklärung:
Der Wert des Kriteriums () ist durch folgende Gleichung gegeben:
.
Alle Regressionsgewichte () sind positiv, daher ist je größer, desto höher die Prädiktorwerte sind.
Hält man einige und konstant (fest, fix), so wird daher die Gruppe mit höhere Werte in aufweisen als die Gruppe mit .
Welches Ergebnis hat der R-Befehl posterior_interval()
(R-Paket rstanarm
)?
Wählen Sie die (am besten) passende Antwort aus.
Hinweis:
So können Sie sich Hilfe zu diesem Befehl ausgeben lassen:
help(posterior_interval)
Betrachten Sie folgende Ausgabe eines Bayesmodell, das mit rstanarm
“gefittet” wurde:
## stan_glm
## family: gaussian [identity]
## formula: price ~ cut
## observations: 1000
## predictors: 5
## ------
## Median MAD_SD
## (Intercept) 4571.7 675.1
## cutGood -570.2 777.2
## cutIdeal -1288.3 688.1
## cutPremium 362.5 709.8
## cutVery Good -807.4 706.3
##
## Auxiliary parameter(s):
## Median MAD_SD
## sigma 3795.0 82.4
Welche Aussage passt (am besten)?
Hinweise:
Berechnet man eine Posteriori-Verteilung mit stan_glm()
, so kann man entweder die schwach informativen Prioriwerte der Standardeinstellung verwenden, oder selber Prioriwerte definieren.
Betrachten Sie dazu dieses Modell:
stan_glm(price ~ cut, data = diamonds,
prior = normal(location = c(100, 100, 100, 100),
scale = c(100, 100, 100, 100)),
prior_intercept = normal(3000, 500))
Welche Aussage dazu passt (am besten)?
prior = normal()
werden Gruppenmittelwerte definiert.
prior_intercept = normal(3000, 500)
wird praktisch eine Gleichverteilung definiert (da die Streuung sehr hoch ist).
Berechnet man eine Posteriori-Verteilung mit stan_glm()
, so kann man entweder die schwach informativen Prioriwerte der Standardeinstellung verwenden, oder selber Prioriwerte definieren.
Betrachten Sie dazu dieses Modell:
stan_glm(price ~ cut, data = diamonds,
prior = normal(location = c(100, 100, 100, 100),
scale = c(100, 100, 100, 100)),
prior_intercept = normal(3000, 500))
Wie viele Parameter gibt es in diesem Modell?
Hinweise:
Berechnet man das Modell, so kann man sich auch Infos über die Prioris ausgeben lassen:
m1 <- stan_glm(price ~ cut, data = diamonds,
prior = normal(location = c(100, 100, 100, 100),
scale = c(100, 100, 100, 100)),
prior_intercept = normal(3000, 500),
refresh = 0)
prior_summary(m1)
## Priors for model 'm1'
## ------
## Intercept (after predictors centered)
## ~ normal(location = 3000, scale = 500)
##
## Coefficients
## ~ normal(location = [100,100,100,...], scale = [100,100,100,...])
##
## Auxiliary (sigma)
## Specified prior:
## ~ exponential(rate = 1)
## Adjusted prior:
## ~ exponential(rate = 0.00025)
## ------
## See help('prior_summary.stanreg') for more details
Wie man sieht, wird für die Streuung im Standard eine Exponentialverteilung verwendet von stan_glm()
. Gibt man also nicht an - wie im Beispiel m1
oben, so wird stan_glm()
für die Streuung, d.h. prior_aux
eine Exponentialverteilung verwenden. Zu beachten ist, dass stan_glm()
ein automatische Skalierung vornimmt.
S. hier für weitere Erläuterung.
Möchte man den Prior für die Streuung direkt ansprechen, so kann man das so formulieren:
m2 <- stan_glm(price ~ cut, data = diamonds,
prior = normal(location = c(100, 100, 100, 100),
scale = c(100, 100, 100, 100)),
prior_intercept = normal(3000, 500),
prior_aux = exponential(1)
refresh = 0)
prior_summary(m1)
## Error: <text>:6:16: unexpected symbol
## 5: prior_aux = exponential(1)
## 6: refresh
## ^
Zu beachten ist beim selber definieren der Prioris, dass dann keine Auto-Skalierung von stan_glm()
vorgenommen wird, es sei denn, man weist es explizit an:
m3 <- stan_glm(price ~ cut, data = diamonds,
prior = normal(location = c(100, 100, 100, 100),
scale = c(100, 100, 100, 100),
autoscale = TRUE),
prior_intercept = normal(3000, 500, autoscale = TRUE),
prior_aux = exponential(1, autoscale = TRUE),
chain = 1, # nur 1 mal Stichproben ziehen, um Zeit zu sparen
refresh = 0)
## Warning: Tail Effective Samples Size (ESS) is too low, indicating posterior variances and tail quantiles may be unreliable.
## Running the chains for more iterations may help. See
## http://mc-stan.org/misc/warnings.html#tail-ess
prior_summary(m3)
## Priors for model 'm3'
## ------
## Intercept (after predictors centered)
## Specified prior:
## ~ normal(location = 3000, scale = 500)
## Adjusted prior:
## ~ normal(location = 3000, scale = 2e+06)
##
## Coefficients
## Specified prior:
## ~ normal(location = [100,100,100,...], scale = [100,100,100,...])
## Adjusted prior:
## ~ normal(location = [100,100,100,...], scale = [1129833.17, 868199.02, 936606.47,...])
##
## Auxiliary (sigma)
## Specified prior:
## ~ exponential(rate = 1)
## Adjusted prior:
## ~ exponential(rate = 0.00025)
## ------
## See help('prior_summary.stanreg') for more details
Grundsätzlich ist es nützlich für die numerische Stabilität, dass die Zahlen (hier die Parameterwerte) etwa die gleiche Größenordnung haben, am besten um die 0-1 herum. Daher bietet sich oft eine z-Standardisierung an.
Unabhängig von der der Art der Parameter ist die Anzahl immer gleich.
Die Anzahl der Parameter in diesem Modell ist: 11
prior_intercept
prior_normal
prior_aux
.Sei und .
Berechnen Sie den z-Wert für !
Hinweis:
x1_z = (x1 - x_mw) / x_sd
-2
John Kruschke hat einen (Absolut-)Wert vorschlagen, als Grenze für Regressionskoeffizienten “vernachlässigbarer” Größe.
Nennen Sie diesen Wert!
Hinweise:
0.05
Im Datensatz mtcars
: Ist der (mittlere) Unterschied im Spritverbrauch zwischen den beiden Gruppen Automatik vs. Schaltgetriebe vernachlässigbar?
Definieren Sie selber, was “vernachlässigbar klein” bedeutet. Oder greifen Sie auf die Definition “höchstens eine Meile” zurück.
Prüfen Sie rechnerisch, anhand des angegebenen Datensatzes, folgende Behauptung:
Behauptung: “Der Unterschied ist vernachlässigbar klein!”
Wählen Sie die Antwortoption, die am besten zu der obigen Behauptung passt!
Hinweise:
Antwortoptionen:
Zur ersten Orientierung erstellen wir uns, rein deskriptiv, eine Darstellung des Spritverbrauchs beider Gruppen, z.B. so:
mtcars %>%
mutate(am = factor(am)) %>%
ggplot() +
aes(x = mpg, color = am, fill = am) +
geom_density(alpha = .5)
Man sieht direkt, dass es substanzielle Unterschiede zwischen den beiden Gruppen gibt. Vermutlich wird das Modell, das wir gleich berechnen, uns wenig überraschen, sondern den deskriptiven Befund widerspiegeln.
Modell berechnen:
library(rstanarm)
library(tidyverse)
data(mtcars)
m1_mtcars <- stan_glm(mpg ~ am, data = mtcars, refresh = 0)
Posteriori-Verteilung betrachten:
m1_mtcars
## stan_glm
## family: gaussian [identity]
## formula: mpg ~ am
## observations: 32
## predictors: 2
## ------
## Median MAD_SD
## (Intercept) 17.2 1.2
## am 7.3 1.8
##
## Auxiliary parameter(s):
## Median MAD_SD
## sigma 5.0 0.6
##
## ------
## * For help interpreting the printed output see ?print.stanreg
## * For info on the priors used see ?prior_summary.stanreg
coef(m1_mtcars)
## (Intercept) am
## 17.2 7.3
posterior_interval(m1_mtcars, prob = .95)
## 2.5% 97.5%
## (Intercept) 14.6 19.5
## am 3.6 11.0
## sigma 3.9 6.6
Spuckt ein PI aus, kein HDI (HDI noch nicht implementiert in rstanarm
).
Visualisieren der Posteriori-Verteilung:
plot(m1_mtcars)
Oder als Histogramm:
library(bayesplot)
mcmc_areas(m1_mtcars)
Man sieht direkt, dass der Unterschied komplett außerhalb des Rope liegt.
Rope berechnen:
library(bayestestR)
rope_m1 <- rope(m1_mtcars, range = c(-1, 1)) # ±1 Meile Unterschied
Rope visualisieren:
plot(rope_m1)
## Error: Failed at retrieving data :( Please provide original model or data through the `data` argument
Man sieht, dass der “Berg” - die Posteriori-Verteilung bzw. der Bereich plausibler Werte - außerhalb des Rope-Bereichs liegt.
Wir können also die Hypothese, dass der Unterschied zwischen beiden Gruppen praktisch Null ist, verwerfen.
Natürlich ist das nur ein deskriptiver Befund, wir können nichts dazu sagen, ob der Unterschied auch ein kausaler Effekt ist.
Alternative Rope-Definition: Z-Standardisieren.
Ein kleiner Effekt ist, laut Kruschke 2018, ein Unterschied der nicht größer ist als ±0.1 SD.
m2_mtcars <-
mtcars %>%
mutate(mpg_z = scale(mpg)) %>%
stan_glm(mpg_z ~ am, data = ., refresh = 0)
rope(m2_mtcars)
## # Proportion of samples inside the ROPE [-0.10, 0.10]:
##
## Parameter | inside ROPE
## -------------------------
## (Intercept) | 0.00 %
## am | 0.00 %
plot(rope(m2_mtcars))
## Error: Failed at retrieving data :( Please provide original model or data through the `data` argument
Einer der (bisher) größten Studien der Untersuchung psychologischer Konsequenzen (oder Korrelate) der Covid-Zeit ist die Studie COVIDiStress.
Im Folgenden sollen Sie folgende Forschungsfrage untersuchen:
Ist der Zusammenhang von Stress (PSS10_avg
, AV) und Neurotizismus (neu
, UV) vernachlässigbar klein?
Den Datensatz können Sie so herunterladen (Achtung, groß):
osf_d_path <- "https://osf.io/cjxua/?action=download"
d <- read_csv(osf_d_path)
## Warning: One or more parsing issues, see `problems()` for details
Hinweise:
Antwortoptionen
Pakete laden:
library(tidyverse)
library(rstanarm)
library(rstatix)
library(bayestestR)
Wie groß ist der Datensatz (im Speicher) eigentlich, in Megabyte?
object.size(d) / 1024 / 1024
## 156.8 bytes
Relevante Spalten auswählen:
d2 <-
d %>%
select(PSS10_avg, neu)
Datensatz aufbereiten:
d3 <-
d2 %>%
drop_na()
Modell berechnen:
m1 <-
stan_glm(PSS10_avg ~ neu,
refresh = 0,
data = d3)
Modellkoeffizienten auslesen:
coef(m1)
## (Intercept) neu
## 1.45 0.35
Posteriori-Verteilung auslesen:
posterior_interval(m1, prob = .89)
## 5.5% 94.5%
## (Intercept) 1.44 1.46
## neu 0.35 0.35
## sigma 0.63 0.64
Posteriori-Verteilung plotten:
plot(m1)
Rope berechnen:
rope_m1 <- rope(m1)
Rope visualisieren:
plot(rope_m1)
## Error in `[.data.frame`(data, , levels_order): undefined columns selected
Einer der (bisher) größten Studien der Untersuchung psychologischer Konsequenzen (oder Korrelate) der Covid-Zeit ist die Studie COVIDiStress.
Im Folgenden sollen Sie folgende Forschungsfrage untersuchen:
Forschungsfrage:
Ist der Unterschied zwischen Männern und Frauen (Dem_gender
) im Hinblick zum Zusammenhang von Stress (PSS10_avg
, AV) und Neurotizismus (neu
, UV) vernachlässigbar klein?
Den Datensatz können Sie so herunterladen (Achtung, groß):
osf_d_path <- "https://osf.io/cjxua/?action=download"
d <- read_csv(osf_d_path)
## Warning: One or more parsing issues, see `problems()` for details
Hinweise:
Antwortoptionen:
Pakete laden:
library(tidyverse)
library(rstanarm)
library(rstatix)
library(bayestestR)
Relevante Spalten auswählen:
d2 <-
d %>%
select(PSS10_avg, neu, Dem_gender)
Das sind die Variablen:
Deskriptive Statistiken zum Datensatz:
d2 %>%
get_summary_stats(type = "robust")
## # A tibble: 2 × 4
## variable n median iqr
## <chr> <dbl> <dbl> <dbl>
## 1 neu 108367 3.33 1.33
## 2 PSS10_avg 116097 2.6 1
d2 %>%
count(Dem_gender)
## # A tibble: 4 × 2
## Dem_gender n
## <chr> <int>
## 1 Female 90400
## 2 Male 33126
## 3 Other/would rather not say 1474
## 4 <NA> 306
Datensatz aufbereiten:
d3 <-
d2 %>%
filter(Dem_gender %in% c("Female", "Male")) %>%
drop_na() %>%
mutate(Female = ifelse(Dem_gender == "Female", 1, 0)) %>%
select(-Dem_gender)
Check:
d3 %>%
count(Female)
## # A tibble: 2 × 2
## Female n
## <dbl> <int>
## 1 0 28371
## 2 1 78472
Check:
d3 %>%
get_summary_stats()
## # A tibble: 3 × 13
## variable n min max median q1 q3 iqr mad mean
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Female 106843 0 1 1 0 1 1 0 0.734
## 2 neu 106843 1 6 3.33 2.67 4 1.33 0.988 3.34
## 3 PSS10_avg 106843 1 5 2.6 2.1 3.1 1 0.741 2.62
## # … with 3 more variables: sd <dbl>, se <dbl>, ci <dbl>
Modell berechnen:
m1 <-
stan_glm(PSS10_avg ~ neu + Female + PSS10_avg:Female,
refresh = 0,
data = d3)
Modellkoeffizienten auslesen:
coef(m1)
## (Intercept) neu Female PSS10_avg:Female
## 2.12 0.11 -2.29 0.92
Posteriori-Verteilung auslesen:
posterior_interval(m1, prob = .89)
## 5.5% 94.5%
## (Intercept) 2.11 2.13
## neu 0.11 0.11
## Female -2.30 -2.28
## PSS10_avg:Female 0.92 0.93
## sigma 0.35 0.35
Posteriori-Verteilung plotten:
plot(m1)
Rope berechnen:
rope(m1)
## # Proportion of samples inside the ROPE [-0.07, 0.07]:
##
## Parameter | inside ROPE
## ------------------------------
## (Intercept) | 0.00 %
## neu | 0.00 %
## Female | 0.00 %
## PSS10_avg:Female | 0.00 %
Rope visulasieren:
plot(rope(m1))
## Error in `[.data.frame`(data, , levels_order): undefined columns selected