Auf dieser Seite findest du Übungen zu den Themen, die sich TN des Workshops gewünscht haben.

Der gesamte Code, den du hier findest, kann von dir 1:1 in R umgesetzt werden. Die größte Lernwirkung hat diese Einführung, wenn du möglichst alles einmal selbst in R durchführst.


01 Vorbereitungen

Bevor wir loslegen können, müssen wir die Packages laden, die wir für unser Vorhaben benötigen. Neben dem SfL Package laden wir zusätzliche Packages, mit denen wir Gemischte Modelle sowie Beta Regression Modelle erstellen können:

install.packages("lme4")
install.packages("lmerTest")
install.packages("LMERConvenienceFunctions")
install.packages("betareg")
library(SfL)
library(lme4)
library(lmerTest)
library(LMERConvenienceFunctions)
library(betareg)

02 Generalized Linear Mixed-Effects Models

Generalized Linear Mixed-Effects Models sind ein spezieller Typ der Gemischten Modelle. Anders als in den bisherigen Gemischten Modellen wird hier nicht eine numerische kontinuierliche Variable als abhängige Variable modelliert, sondern eine binäre Variable, deren Levels i.d.R. 0 und 1 sind.

Ein Datensatz, der dies veranschaulicht, ist Teil des SfL Packages:

data(data_r)

Hier steht 0 für eine inkorrekte Antwort und 1 für eine korrekte Antwort eines Participants. Das Datenset stellt Ergebnisse eines fiktiven Same-Different Tasks dar.


Correlation Check

Wie wir bereits wissen, ist Kollinearität ein Problem für Modelle mit vielen Prediktorvariablen. Daher testen wir zunächst die Korrelation der Variablen.

correlation_matrix(data = data_r,
                   variables = c("difference", "wordclass", "complexity", "wordlength", "subject"))

In diesem Fall haben wir Glück: Keine Variablenkombination zeigt einen hohen Korrelationskoeffizienten.


Volles Modell

Wir können also nun das volle Modell erstellen. Hierzu nutzen wir das lme4 Package:

mdl_full <- glmer(correct ~
               difference +
               wordclass +
               complexity +
               wordlength +
               (1 | subject),
             data = data_r,
             family = binomial(link = "logit"))

Wichtig ist hierbei, dass wir der Funktion über das family Argument mitteilen, dass wir eine binominal verteilte anhängige Variable, also eine Variable mit 2 unterschiedlichen Wertmöglichkeiten, modellieren.


Bestes Modell

Anders als bei vorherigen Modellen können wir die step() Funktion hier nicht nutzen. Nun haben wir zwei Möglichkeiten:

  1. Wir finden ein bestes Modell manuell.
  2. Wir bleiben beim vollen Modell.

Hier entscheiden wir uns für Möglichkeit 2.


Diagnostik / Trimming

Wie auch bei regulären Gemischten Modellen können wir mit dem LMERConvenienceFunctions Package die Daten trimmen, um einen besseres Fit zu erreichen:

library(LMERConvenienceFunctions)

data_r2 <- romr.fnc(mdl_full, # das beste Modell
                    data_r, # der Datensatz
                    trim = 2.5) # die Standardabweichung mit welcher man trimmen möchte; 2.5 ist die Standardeinstellung
n.removed = 23 
percent.removed = 3.833333 

Mit diesem Befehl trimmt man die Daten, deren Residuen im Modell \(2.5\) oder mehr Standardabweichungen vom Durchschnitt der Gesamtresiduen entfernt liegen.

Im vorliegenden Fall werden \(23\) Datenpunkte getrimmt, d.h. \(3.83\%\) der gesamten Datenmenge.

Anschließend wird das getrimmte Datenset im Environment gesichert:

data_r2 <- data_r2$data

Zuletzt wird das beste Modell mit dem getrimmten Datensatz erneut erstellt:

mdl_trim <- glmer(correct ~
               difference +
               wordclass +
               complexity +
               wordlength +
               (1 | subject),
             data = data_r2,
             family = binomial(link = "logit"))

Betrachten wir nun die AIC-Werte der beiden “besten” Modelle, sehen wir eine Verbesserung durch die getrimmten Daten:

AIC(mdl_full, mdl_trim)
         df      AIC
mdl_full  7 454.5915
mdl_trim  7 277.3121

03 Beta Regression

Was macht man, wenn die abhängige Variable nur Werte zwischen 0 und 1 annehmen, also weder unter 0, noch über 1 sein kann? Lineare Regression, egal ob simpel, multipel oder gemischt, ignoriert diesen Umstand einfach und berechnet Voraussagen für Werte unter 0 und über 1. Das ist nicht nur nicht hilfreich, sondern kann auch zu signifikant anderen Ergebnissen führen.

Möchte man derartige Variablen als abhängige Variablen nutzen, bietet sich die s.g. Beta Regression an. Simple Beta Regression kann in R mit dem betareg Package genutzt werden. Ein passender Datensatz ist Teil des SfL Packages:

data(data_k)

Dieser Datensatz enthält simulierte Korrelationskoeffizienten für die Semantik von Paaren maskuliner und femininer Rollenbezeichner (z.B. Lehrer vs. Lehrerin). Je höher der Korrelationskoeffizient, desto semantisch ähnlicher sind sich die beiden Formen.

Außerdem enthalten sind die log-transfomierte Frequenz beider Rollenbezeichnerformen sowie deren Wortlänge in Buchstaben.


Correlation Check

Wie wir bereits wissen, ist Kollinearität ein Problem für Modelle mit vielen Prediktorvariablen. Daher testen wir zunächst die Korrelation der Variablen.

correlation_matrix(data = data_k,
                   variables = c("correlation", "freq_masc_log", "freq_fem_log", "wordlength"))

In diesem Fall haben wir Glück: Keine Variablenkombination zeigt einen hohen Korrelationskoeffizienten.


Volles Modell

Wir können also nun das volle Modell erstellen. Hierzu nutzen wir das betareg Package:

mdl_full <- betareg(correlation ~
                 freq_masc_log +
                 freq_fem_log +
                 wordlength,
               data = data_k)

Bestes Modell

Wie auch bei Generalized Linear Mixed-Effects Modells können wir bei Beta Regression Modells die step() Funktion nicht nutzen.

Entsprechend haben wir die gleichen zwei Möglichkeiten:

  1. Wir finden ein bestes Modell manuell.
  2. Wir bleiben beim vollen Modell.

Hier entscheiden wir uns für Möglichkeit 2. Dieses können wir uns nun näher anschauen:

summary(mdl_full)

Call:
betareg(formula = correlation ~ freq_masc_log + freq_fem_log + 
    wordlength, data = data_k)

Standardized weighted residuals 2:
    Min      1Q  Median      3Q     Max 
-3.3531 -0.6404 -0.0236  0.6156  3.3391 

Coefficients (mean model with logit link):
               Estimate Std. Error z value Pr(>|z|)    
(Intercept)   -0.497859   0.154575  -3.221 0.001278 ** 
freq_masc_log -0.011396   0.014064  -0.810 0.417778    
freq_fem_log   0.061840   0.018562   3.332 0.000863 ***
wordlength     0.023085   0.007174   3.218 0.001292 ** 

Phi coefficients (precision model with identity link):
      Estimate Std. Error z value Pr(>|z|)    
(phi)   2.1731     0.1066   20.38   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 

Type of estimator: ML (maximum likelihood)
Log-likelihood: 11.42 on 5 Df
Pseudo R-squared: 0.03636
Number of iterations: 20 (BFGS) + 1 (Fisher scoring) 

Wir finden zwei signifikante Effekte:

  1. freq_fem_log: Mit höherer Frequenz der femininen Form sinkt die Korrelation der Rollenbezeichner.
  2. wordlength: Mit höherer Wortlänge steigt die Korrelation der Rollenbezeichner.