Parameterschätzung, Posterior zusammenfassen, und lineare Modelle.
Die Aufgaben, die Sie bearbeiten sollen, finden Sie in einem gelben Kasten. Optionale Aufgaben sind in orangen Kästen.
Sie haben für diese Übung 10 Tage Zeit. Laden Sie Ihre Lösung als Rmarkdown File bis Sonntag, 4. April um 00:00 Uhr, in den Order für Übung 2 auf ILIAS. Falls Rmarkdown nicht funkionieren sollte, werden auch Lösungen in Form eines R Skriptes akzeptiert. Nennen Sie Ihr File Matrikelnummer_Nachname_uebung-2.Rmd oder Matrikelnummer_Nachname_uebung-2.R, z. B. 15-172-874_Nachname_uebung-2.Rmd.
Bevor Sie einreichen, vergewissern Sie sich bitte, dass Ihr Rmarkdown File geknittet werden kann, und dass der R Code ohne Fehler läuft.
In der ersten Aufgabe untersuchen Sie einen Datensatz einer Studie, bei der die Arbeitsgedächtnisleitung mittels eines N-Back Tasks bei \(21\) Kindern mit einer ADHS Diagnose untersucht wurde. Gleichzeitig wurde derselbe Task mit einer Kontrollgruppe (\(n=30\)) durchgeführt. Die behavioralen Resultate wurde parallel zu einer fMRI Untersuchung erhoben, damit im Antwortverhalten der Kinder ein Unterschied zur Kontrollgruppe gezeigt werden konnte.
Bei einem N-Back Test wird den Versuchspersonen eine Serie von Stimuli dargeboten (z.B. Buchstaben), und man muss mit einem Tastendruck reagieren, wenn der aktuelle Stimulus gleich dem N-letzten Stimulus war.
Hier sehen Sie ein Beispiel für einen 3-Back Test. Bei den gelb markierten Buchstaben muss die Versuchsperson reagieren.
T A A F A G H R Y Z R V D …
Bei diesem Task untersuchen wir die Reaktionszeiten der Versuchspersonen bei korrekten Antworten. Im Datensatz erhalten Sie die gemittelten Reaktionszeiten der Kinder in der ADHD
und der Control
Gruppe.
Laden Sie zuerst die Daten:
glimpse(nback1)
Rows: 51
Columns: 2
$ rt <dbl> 1.0267571, 2.0671470, 1.6728257, 1.0355146, 1.0310874,…
$ group <chr> "adhd", "adhd", "adhd", "adhd", "adhd", "adhd", "adhd"…
Konvertieren Sie die Gruppierungsvariable group
zu einem Faktor:
nback1 <- nback1 %>%
mutate(group = as_factor(group))
Verändern Sie die Reihenfolgen der Faktorstufen:
levels(nback1$group)
NULL
nback1 <- nback1 %>%
mutate(group = fct_relevel(group, "control"))
levels(nback1$group)
[1] "control" "adhd"
Einen kurzen Blick auf die Daten werfen:
glimpse(nback1)
Rows: 51
Columns: 2
$ rt <dbl> 1.0267571, 2.0671470, 1.6728257, 1.0355146, 1.0310874,…
$ group <fct> adhd, adhd, adhd, adhd, adhd, adhd, adhd, adhd, adhd, …
Aufgabe 1.1
Berechnen Sie Mittelwerte und SD pro Gruppe.
%>%
nback1 group_by(group) %>%
summarise(___,
---)
Aufgabe 1.2
Stellen Sie die Daten mit grafisch dar, zum Beispiel mit Histogrammen, Boxplots oder Violin Plots.
Sie sollte ungefähr solche Grafiken erhalten:
Vielleicht hilft Ihnen folgender Code Block:
nback1 %>%
ggplot(aes(rt)) +
geom_histogram(bins = 15) +
facet_wrap(~group) +
theme_bw(base_size = 14)
Aufgabe 1.3
Mit welcher Methode würden Sie diese Daten analysieren? Beschreiben Sie Ihre Wahl in 1-2 Sätzen und führen Sie einen Test durch. Was können Sie damit aussagen?
Wir wollen nun die beiden Gruppenmittelwerte Bayesianisch schätzen. Sie haben zwei Möglichkeiten kennengelernt, die Formel zu spezifieren.
Aufgabe 1.4
Entscheiden Sie sich für eine der beiden, und schätzen sie die Mittelwerte mit brms. Schauen Sie sich vorher mit der Funktion get_prior
die Default Prior Verteilungen an. Wenn sie wollen, können Sie anstelle der Defaults eigene Priors spezifieren. Falls Sie das tun, begründen Sie kurz Ihre Wahl.
library(brms)
get_prior(rt ~ ___,
data = nback1)
Aufgabe 1.5
Schätzen Sie nun die Parameter Ihres Modells.
summary
den Output an.Rhat
Werte in Ordnung sind.library(brms)
<- brm(___ ~ ___,
m1 data = nback1,
file = "nback1")
Optionale Aufgabe: fassen Sie die Posterior Verteilung des/der relevanten Parameter(s) mit Hilfe der Funtion mean_qi()
im tidybayes
Packages zusammen.
Anstatt sich nur eine Tabelle anzuschauen, ist es hilfreich, die Verteilungen grafisch darzustellen.
Aufgabe 1.6
Stellen Sie die Posterior Verteilung(en) grafisch dar. Sie können dies entweder mit der Funktion mcmc_plots()
im brms
Package, oder (optional) mit dem tidybayes
Package machen. Eine Anleitung für das tidybayes
Package finden Sie im 3. Kapitel des Skripts.
%>%
m1 mcmc_plot(___)
Aufgabe 1.7
In der zweiten Aufgabe untersuchen Sie einen Datensatz einer Studie, bei der die Arbeitsgedächtnisleitung mittels eines N-Back Tasks bei 20 gesunden Erwachsenen unter verschiedenen Cognitive Loads untersucht wurde. Ziel dieser Studie war es, die Auswirkung von Cognitive Load auf den Präfrontalen Cortex mittels fMRI zu untersuchen. Wir erwarten, dass bei höherem Cognitive Load die Versuchspersonen länger brauchen, um beim N-Back Task eine korrekte Antwort zu geben.
Wir laden die Daten:
library(tidyverse)
library(rmarkdown)
nback2 <- read_csv("https://raw.githubusercontent.com/kogpsy/neuroscicomplab/main/data/cognitive-load-nback.csv") %>%
mutate(across(-rt, as_factor))
nback2 %>% paged_table()
Wir haben 20 Personen
nback2 %>%
summarize(n_subjects = n_distinct(id))
# A tibble: 1 x 1
n_subjects
<int>
1 20
mit 60 Trials pro Person pro Bedingung. Für jeden Trial haben wir die Reaktionszeit in Millisekunden.
nback2 %>%
group_by(id, load) %>%
count() %>%
rmarkdown::paged_table()
Da die Standardfehler Funktion in R nicht existiert, schreiben wir selber eine:
Aufgabe 2.1
Fassen Sie die Daten mit Mittelwert, Standardabweichung und Standardfehler pro Person pro Bedingung zusammen.
Aufgabe 2.2
Sie haben die Kennzahlen für jede Person berechnet. Meistens wollen wir aber nicht nur die Effekte der experimentellen Manipulationen für Individuen, sondern für die ganze Gruppe.
Berechnen Sie die mittlere RT für die beiden Bedingungen, aggregiert über Personen. Wie würden Sie vorgehen? Überlegen Sie sich, was die Vor- und Nachteile eines solches Vorgehens sind, und beschreiben Sie sie kurz.
Auch hier ist es sinnvoll, die Daten zuerst grafisch darzustellen.
Aufgabe 2.3
Stellen Sie die mittleren RTs für jede Bedingung aggregiert über Personen grafisch dar.
Sie brauchen wahrscheinlich folgenden Code:
aggregated %>%
ggplot(aes(load, mean)) +
geom_line(aes(group = 1), linetype = 3) +
geom_point(size = 4) +
theme_bw()
Aufgabe 2.4
Überlegen Sie sich, wie Sie diesen Datensatz frequentistisch analysieren könnten. Beschreiben Sie in 1-2 Sätzen, was Sie tun würden, und welche Aussagen Sie damit machen könnten.
Wir wollen nun die population-level Effects mit brms
schätzen, und zwar die Mittelwerte der beiden Cognitive Load Bedingungen. Dafür benutzen wir die Formel ~ 0 + load
.
Wir erhalten folgende Default Priors:
get_prior(rt ~ 0 + load + (1 | id),
data = nback2)
prior class coef group resp dpar nlpar bound
(flat) b
(flat) b loadhi
(flat) b loadlo
student_t(3, 0, 94.1) sd
student_t(3, 0, 94.1) sd id
student_t(3, 0, 94.1) sd Intercept id
student_t(3, 0, 94.1) sigma
source
default
(vectorized)
(vectorized)
default
(vectorized)
(vectorized)
default
Die beiden flachen Priors der Parameter loadhi
und loadlo
wollen wir nun durch eigene Priors ersetzen. Wir nehmen hier einfach Normalverteilungen, mit einem Mittelwert, der dem Gesamtmittelwert entspricht, und einer etwas arbiträr gewählten Standardabweichung von \(10\).
Priors können mit set_prior()
oder einfach nur prior()
definiert werden.
Wir schätzen das Model nun mit unseren Prior Verteilungen.
m2 <- brm(rt ~ 0 + load + (1 | id),
prior = priors,
data = nback2,
file = "nback2")
Aufgabe 2.5
Überprüfen Sie, ob die Rhat
Werte in Ordnung sind. Falls ja, fassen Sie die Posterior Verteilung der wichtigen Parameter zusammen. Stellen Sie die Posterior Verteilungen der beiden Bedingungsparameter grafisch dar, z.B. mit mcmc_plot()
.
Falls Sie die Verteilung der Differenz wollen, können Sie entweder das Modell so parametrisieren: ~ 1 + load + (1 | id)
, oder die Differenz nachträglich für jede Iteration berechnen. Dies können Sie so machen.
samples_m2 <- posterior_samples(m2) %>%
transmute(hi = b_loadhi,
lo = b_loadlo,
diff = hi - lo)
Diese Differenz können Sie jetzt auch zusammenfassen
diff .lower .upper .width .point .interval
1 48.46462 46.51335 50.4016 0.95 median qi
und grafisch darstellen.
samples_m2 %>%
select(diff) %>%
ggplot(aes(x = diff)) +
stat_halfeye(point_interval = median_qi) +
theme_tidybayes()
Aufgabe 2.6
If you see mistakes or want to suggest changes, please create an issue on the source repository.
Text and figures are licensed under Creative Commons Attribution CC BY 4.0. Source code is available at https://github.com/kogpsy/neuroscicomplab, unless otherwise noted. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".
For attribution, please cite this work as
Ellis (2021, June 22). neuroscicomplab: Übung 2. Retrieved from https://kogpsy.github.io/neuroscicomplab/exercise-2.html
BibTeX citation
@misc{ellis2021übung, author = {Ellis, Andrew}, title = {neuroscicomplab: Übung 2}, url = {https://kogpsy.github.io/neuroscicomplab/exercise-2.html}, year = {2021} }