1 Einführung

Der Workshop vermittelt die theoretischen Grundlagen von Multilevel-Modellierung sowie wichtige methodische und statistische Anwendungen. Ziel ist es zu lernen wie man Datensätze mit hierarchischen Strukturen in R analysiert, die Ausgabe interpretiert und die Ergebnisse in schönen Tabellen präsentiert.

Download mich für Daten und Projekt

Folgenden Code könnt ihr schon einmal ausführen für die benötigten packages:

#### R Code für Multilevel-Workshop ####
needed.packages <- c("ggplot2", "texreg", "sjPlot", "sjmisc", "sjstats", "lme4", 
    "haven")
lapply(needed.packages, require, character.only = TRUE)

2 Datenstrukturen

Multilevel-Modelle (manchmal auch: hierarchical linear models, mixed models, random effects models oder variance components models) eignen sich um Daten zu analysieren, welche eine hierarchische Struktur aufweisen. In einer hierarchischen Datenstruktur können wir Einheiten identifizieren welche in weitere Einheiten gruppiert sind. Oft, aber nicht immer, sind diese Untereinheiten einzelne Individuen. Einzelpersonen werden dann in übergeordnete Einheiten gruppiert, zum Beispiel Schulen, Firmen, Länder usw. Statt gruppieren spricht man auch von Fällen welche in einem gewissen Kontext genested sind. Man sagt dann, dass sich Schüler/Arbeiter/Bürger auf Level 1 und die Schulen/Firmen/Länder auf Level 2 unserer Datenstruktur befinden.

Schema genestede Daten - Schüler in Schulen

Schema genestede Daten - Schüler in Schulen

Das Prinzip von genesteden Einheiten folgt dem exakt selben Prinzip für mehrere Zeitpunkte, welche in einem Individuum genested sind.

Schema genestede Daten - Messzeitpunkte in Einzelpersonen

Schema genestede Daten - Messzeitpunkte in Einzelpersonen

Nun eine bildliche Darstellung einer hierarchischen Datenstruktur visualisiert mit Strichmännchen:

Aufwendige Visualisierung von hierarchischen Datenstrukturen

Aufwendige Visualisierung von hierarchischen Datenstrukturen

Die folgende Tabelle soll die Daten verständlicher machen. So zeigen die ersten beiden Reihen der Tabelle die angenommene hierarchische Datenstruktur (Level 1 = die Schüler und Level 2 = die Schulen). Typischerweise wird Level 1 mit einem \(i\) notiert während Level 2 Einheiten mit einem \(j\) ausgestattet werden. Darauf folgend werden die Punktzahl der Schüler für einen Test (0-100) eingetragen, welche als mögliche abhängige Variable gesehen werden kann. Die Notierung \(ij\) beschreibt dabei die Punktzahl eines Schüler \(i\) in der Schule \(j\). Im Anschluss befinden sich drei Prädiktor-/Erklärungs-/x-Variablen: die Punktzahl der Schüler in einer vorherigen Klausur, das Geschlecht des Schülers sowie ob die Schule staatlich oder privat finanziert ist. Die letzte Variable ist insofern besonders, als dass sie eine Level 2 Variable darstellt, eine Variable welche sich nur auf die spezielle Ausprägung der Schule bezieht (und nicht auf die individuellen Schüler).

Schüler ij Schule j Punkte ij Lernstunden ij Geschlecht ij Schultyp j
1a A 75 6 W Staat
2a A 71 5 M Staat
3a A 25 6 M Staat
1b B 91 2 W Staat
2b B 68 9 W Staat
3b B 91 2 W Staat
1c C 37 4 M Privat
2c C 61 6 M Privat
3c C 33 7 M Privat
1d D 33 5 W Privat
2d D 62 10 M Privat
3d D 31 3 M Privat

Was sind die Vorteile von Multilevel-Modellen?

  1. Standardfehler werden richtig geschätzt: Traditionelle Regressionstechniken behandeln die Analyseeinheiten als unabhängige Beobachtungen. In hierarchischen Datenstrukturen sind Beobachtungen allerdings nicht unabhängig voneinander sondern hängern von ihrem Jeweilgen Kontext ab. Wenn solche hierarchische Strukturen ignoriert werden, wird der Standardfehler der Regressionskoeffizienten unterschätzt, was zu einer Überschätzung statistischer Signifikanz führt. Standardfehler für die Koeffizienten von Prädiktorvariablen zweiter Ordnung (Level 2 Prädiktor) werden besonders dadruch gebiased.

  2. Wesentliches Interesse an Gruppeneffekten: Mit Hilfe von Multilevel-Modellen können wir Forschungsfragen stellen welche sich spezifisch auf die Kontexte von Daten beziehen.

  3. Schätzung von Gruppeneffekten gleichzeitig mit den Auswirkungen von Gruppenebenen-Prädiktoren: Eine alternative Möglichkeit, Gruppeneffekte zu berechnen besteht darin, Dummy-Variablen für Gruppen in einem traditionellen Regressionsmodell einzubeziehen. In vielen Fällen werden die Prädiktoren auf Gruppenebene definiert, zB die Art der Schule (gemischt oder Geschlechter-getrennt). In einem solchen Modell ist es nicht möglich, Effekte aufgrund von beobachteten und nicht beobachteten Gruppenmerkmalen zu trennen.

  4. Inferenz für eine Population von Gruppen: In einem Multilevel Modell werden die Gruppen als Stichprobe behandelt, was uns erlaubt auf eine Grundgesamtheit zu schließen.

3 Multilevel Einführung

3.1 Theoretische Einführung

Vor der Einführung von Multilevel-Modellen, betrachten wir das einfachste mögliche Regressionsmodell: ein Modell für den Mittelwert der abhängigen Variablen \(y\) ohne erklärende Variablen. Ein solches Nullodell kann geschrieben werden

\[y_i = \beta_0 + e_i \] \[y_i = \bar y + e_i\]

Wobei \(y_i\) den y-Wert für die \(i\)-te Person angibt und \(\beta_0\) den Intercept der Regressionsgeraden angibt (welche im Falle eines Nullmodells gleich dem Mittelwert von \(y\) ist). \(e_i\) ist der “Fehler” für das \(i\)-te Individuum, d.h. der Abstand zwischen dem Wert eines Individuums und der Regressionsgeraden (hier: der Mittelwert). Die nachfolgende Darstellung zeigt die Residuen für 8 Beobachtungen (n = 8).

Wir nehmen für gewöhnlich an, dass die Residuen einer Normalverteilung mit einem mittleren Nullpunkt und der Varianz \(\sigma^2\) folgen, d.h. \(e_i \sim N (0, \sigma^2)\). Die Varianz fasst die Variabilität um den Mittelwert zusammen: Wenn diese null ist, hätten alle Punkte den gleichen y-Wert und würden daher auf der \(y = \beta_0\) Geraden liegen. Je größer die Varianz, desto größer die Abweichungen vom Mittelwert.

Einfaches Nullmodell

Einfaches Nullmodell

Nun gehen wir in die einfachste Form eines Multilevel Modells, welches Gruppenunterschiede im Mittelwert von \(y\) erlaubt. Wir sehen nun die Daten als eine zweistufige Struktur mit Individuen auf Level 1, die in Gruppen auf Level 2 verschachtelt sind. Um die Gruppe anzugeben, fügen wir einen zweiten Index \(j\) hinzu, so dass \(y_{ij}\) den Wert von \(y\) für die \(i\)-te Person in der \(j\)-ten Gruppe angibt.

In einem Multilevel Modell teilen wir die Fehler in zwei Komponente auf, welche den beiden Ebenen der Datenstruktur entsprechen. Wir bezeichnen die Residuen auf Level 2 mit \(u_j\) und die Residuen von Level 1 mit \(e_{ij}\). Die Multilevel Erweiterung des einfachen Nullmodells wird folgendermaßen notiert:

\[y_{ij} = \beta_0 + u_j + e_{ij}\]

Wobei \(\beta_0\) der Gesamtmittelwert von \(y\) (über alle Gruppen hinweg) ist.

Der Mittelwert von \(y\) für die Gruppe \(j\) is \(\beta_0 + u_j\), und daher zeigen die Level 2 Resdiuen \(u_j\) den Unterschied zwischen dem Mittelwert der Gruppe \(j\) und dem Gesamtmittelwert. Die Level 1 Residuen-\(e_{ij}\) ist die Differenz zwischen dem y-Wert für das \(i\)-te Individuum und dem individuellen Gruppenmittelwert.

Die folgende Abbildung zeigt die Punktzahl für acht Schüler in zwei Schulen, wobei Schüler in Schule 1 mit grünen Kreisen und Schule in Schule 2 mit roten Quadraten gekennzeichnet sind.

Multilevel Nullmodell

Multilevel Nullmodell

Das Gesamtmittel (oder grand-mean) wird durch die durchgezogene Linie dargestellt, und die Mittel für die Schulen 1 und 2 sind gestrichelt dargestellt. Ebenfalls gezeigt sind die Level 2 Residuen.

Schule 2 hat ein unterdurchschnittliches Mittel (negatives \(u_j\)), während Schule 1 überdurchschnittlich ist (positives \(u_j\)). Die Verteilung von \(u_j\) wird auch folgendermaßen dargestellt:

\[u_j \sim N(0,\sigma_u^2)\]

= der LEVEL 2 Fehler ist normalverteilt um 0 herum mit Varianz \(\sigma_u^2\). Dies nennt man auch die Zwischen-Gruppen Varianz basierend auf Abweichungen von Gruppenmitteln zu dem Gesamtmittel.

\[e_{ij} \sim N(0,\sigma_e^2)\] = LEVEL 1 Fehler ist normalverteilt um 0 herum mit Varianz \(\sigma_e^2\) In-group Varianz basierend auf individuellen Abweichungen von den Gruppenmitteln.

\[ICC = \frac{\sigma_u^2}{\sigma_u^2+\sigma_e^2}\] \[ICC = \frac{Varianz_{L2}}{Varianz_{L2}+Varianz_{L1}}\]

Der intra-class correlation coefficient (ICC) gibt an, wie viel Varianz auf Level 1 durch Level 2 aufgeklärt werden kann (in Prozent). Wenn der ICC 0,2 ist, würden wir zum Beispiel sagen, dass 20% der Variation zwischen Gruppen und 80% innerhalb der Gruppen befindet. Sobald der ICC positive Werte annimmt werden die Standardfehler bei nicht Berücksichtigung der hierarchischen Struktur unterschätzt (Muthen/Satorra 1995: 289)! Berechnung eines Multilevel Modells ab 10% Varianzaufklärung. Gegebenenfalls log-likelihood ratio test im Vergleich zu simplen linearen Modell.

Fügen wir jetzt noch eine X-Variable mit hinzu, dann ergibt sich folgendes exemplarisches Modell:

Multilevel random intercept

Multilevel random intercept

Als letzten Schritt erlauben wir der Regressionsgerade pro Schule zu varrieren, wir haben also einen random effect für unsere Variable eingeführt. Ein exemplarisches Modell sieht wie folgt aus:

Multilevel random intercept + random slope

Multilevel random intercept + random slope

Hier noch einmal die verschiedenen Arten eines Mulitlevel Modells:

Verschiedene Arten von Multilevel Modellen

Verschiedene Arten von Multilevel Modellen

3.2 Beispiel

Laden wir zunächst den Beispieldatensatz ein. Dazu benutzen wir das sehr komfortable package haven

# install.packages('haven') library(haven)
# testdata<-read_sav('testdata.sav')
Variablen Observationen Mittelwert Standardabweichung Median Min Max
lernstunden 1,000 5.464 2.594 5.430 0 10
y 1,000 56.928 20.732 58.973 0 100
schule 1,000 - - - 1 8

3.2.1 Null-Modell - Random Intercept Modell

Rechnen wir erst einmal eine normale lineare Regression.. als Nullmodell.

fit0 <- lm(y ~ 1, data = testdata)

Mit dem package texreg lassen sich Ergebnisse sehr schnell und leicht in eine Tabelle packen.

  • texreg() erstellt eine Tabelle als Latex code

  • htmlreg() erstellt eine Tabelle als html code

  • screenreg() erstellt eine Tabelle als Text (perfekt zum schnellen visualisieren)

mit Befehl file="filename.html" lässt sich die html File auch abspeichern und in Word einladen.

# install.packages('texreg')
library(texreg)
htmlreg(fit0)
Statistical models
Model 1
(Intercept) 51.54***
(0.71)
R2 0.00
Adj. R2 0.00
Num. obs. 1000
RMSE 22.37
p < 0.001, p < 0.01, p < 0.05

Mit screenreg() können wir uns auch schnell eine Tabelle aus purem Text zeigen lassen. Perfekt für ein schnelles intuitives der wichtigsten Werte.

screenreg(fit0)
## 
## ========================
##              Model 1    
## ------------------------
## (Intercept)    51.54 ***
##                (0.71)   
## ------------------------
## R^2             0.00    
## Adj. R^2        0.00    
## Num. obs.    1000       
## RMSE           22.37    
## ========================
## *** p < 0.001, ** p < 0.01, * p < 0.05

Bevor wir Multilevelmodelle berechnen können, benöten wir das leistungsstarke Pakage lme4

# install.packages('lme4')
library(lme4)

Fitten wir nun das einfachste Multilevel-Modell das wir kennen! Das Null-Modell

\[Punktzahl = \beta_0 + u_j + e_{ij}\] Die Funktion für ein Multilevel Nullmodell sieht sehr ähnlich aus:

fit00 <- lmer(y ~ 1 + (1 | schule), data = testdata)

Das obige Modell enthält nur einen Intercept und ist somit ein Nullmodell. Die Konstante muss explizit durch 1 angegeben werden, gefolgt von einer einzigen vertikalen Leiste und dann mit dem Level 2 Identifier (schule). Als letztes spezifiziert “data = testdata” das dataframe, welches verwendet wird um das Modell anzupassen.

summary(fit00)
## Linear mixed model fit by REML ['lmerMod']
## Formula: y ~ 1 + (1 | schule)
##    Data: testdata
## 
## REML criterion at convergence: 8881.8
## 
## Scaled residuals: 
##      Min       1Q   Median       3Q      Max 
## -2.19240 -0.86107  0.08895  0.86034  1.85379 
## 
## Random effects:
##  Groups   Name        Variance Std.Dev.
##  schule   (Intercept) 100.5    10.03   
##  Residual             412.3    20.31   
## Number of obs: 1000, groups:  schule, 8
## 
## Fixed effects:
##             Estimate Std. Error t value
## (Intercept)   51.542      3.603   14.31

Die Ausgabe von lmer besteht aus drei Teilen. Der erste Teil zeigt Formel und Daten. Der zweite Teil unter random effects: fasst die Varianz und Standardabweichung jedes random effects zusammen: dabei ist Schule (intercept) die Zwischen-Gruppen Varianz und Residual die In-Group Varianz.

Darunter wird die Gesamtzahl der Beobachtungen zusammen mit der Anzahl der Einheiten (oder Gruppen) für jede höhere Ebene im Modell angezeigt. Hier sind die Schulen unsere einzige höhere Ebene und die Ausgabe berichtet, dass wir 8 verschiedene Schulen haben.

Der letzte Teil der Ausgabe sind die Fixed Effects: eine Tabelle, die den Schätzwert (Estimate) Standardfehler (Std. Error) und t-Wert (t value) für jeden Parameter im Modell meldet.

Bei Modellen mit zusätzlichen x-Variablen wird auch eine Korrelationstabelle zwischen diesen Variablen unterhalb der Tabelle der Parameterschätzungen bereitgestellt.

Eine einfachere Darstellung kann auch durch Tabellenform erreicht werden:

htmlreg(fit00)
Statistical models
Model 1
(Intercept) 51.54***
(3.60)
AIC 8887.85
BIC 8902.57
Log Likelihood -4440.92
Num. obs. 1000
Num. groups: schule 8
Var: schule (Intercept) 100.53
Var: Residual 412.31
p < 0.001, p < 0.01, p < 0.05

Der Gesamtmittelwert (über alle Schulen hinweg) wird auf 51.54 geschätzt und die Schätzung der Gesamtvarianz beträgt \(100.53 + 412.31 = 512.84\). Diese Gesamtvarianz setzt sich aus der Abweichung zwischen den Schulen (\(Varianz_{L2} = 100.53\)) und der innerhalb einer Schule liegenden In-Group Varianz (\(Varianz_{L1} = 412.31\)) zusammen. Mit diesen Werten können wir auch den ICC für unser Modell berechnen:

\[ICC = \frac{Varianz_{L2}}{Varianz_{L2}+Varianz_{L1}}\]

\[ICC = \frac{100.53}{100.53+412.31}\]

100.53/(100.53 + 412.31)
## [1] 0.1960261

Oder einfacher per Formel aus dem sjstats package

# install.packages('sjstats')
library(sjstats)
icc(fit00)
## Linear mixed model
##  Family: gaussian (identity)
## Formula: y ~ 1 + (1 | schule)
## 
##   ICC (schule): 0.196027

Der ICC befindet sich demnach 0.1960, daher würden wir sagen dass \(19.60\%\) der Varianz von der Testpunktzahl zwischen Schulen liegt. Ein Multilievelmodell ist daher angebracht.

Mit den folgenden Befehlen können wir uns die fixed Effekte (normale Parameter wie wir sie aus der Regression kennen), sowie die random Effekte (die Abweichungen von dem geschätzten fixed Wert pro Gruppe) zeigen lassen

fixef(fit00)
## (Intercept) 
##    51.54196
ranef(fit00)
## $schule
##              (Intercept)
## Blattenacker    6.184253
## Eugen-Gauss    -9.491724
## Frankfurter     7.212022
## Harring        -4.287697
## Hellenstein    14.572828
## Max-Planck    -13.269190
## Rastler         6.386618
## Rumboren       -7.307109

Kommen wir nun zu der Visualisierung von Multilevel-Modellen. Das sjPlot package macht es uns sehr einfach wunderschöne Grafiken zu erstellen. Hier die wichtigsten Einstellungen der sjp.lmer() Funktion (auch nachzulesen in der helpfile)

type =

  • "re" ist die default Einstellung und zeigt die random effects als Koeffizentienplot

  • "fe" zeigt die fixed effects als Koeffizentienplot

  • "ri.slope" zeigt lineare Zusammenhänge mit random intercepts

  • "rs.ri" zeigt lineare Zusammenänge mit random intercepts und random slopes

sort.est =

  • NULL wenn nicht angegeben keine Sortierung

  • "sort.all" sortiert alle Koeffizienten der Größe nach

benötigt allerdings

facet.grid = FALSE

  • facet.grid = TRUE ist die Standardeinstellung und sorgt dafür dass alle Effekte in EINEM Plot angezeigt werden.

mit dem sjplot package können wir uns auch sehr einfach die random effects zeigen lassen:

sjp.lmer(fit00,                   #das Modell
         facet.grid = FALSE,      #kein facetting - eigene Plots
         sort.est = "sort.all",   #sortieren nach Größe
         y.offset = 0.3,          #Koeffizientenlabels etwas nach oben
         p.kr=F)                  #Kenword-Roger estimation aus - RATSAM

3.2.2 X-Variable hinzufügen - Random Intercept

\[Punktzahl = \beta_0 + \beta_1 \times X_{ij} + u_j + e_{ij}\]

Nun fügen wir eine x-Variable hinzu: Lernstunden.

fit1 <- lmer(y ~ lernstunden + (1 | schule), data = testdata)

Schauen wir uns doch das neue Modell im Vergleich an:

htmlreg(list(fit00, fit1))
Statistical models
Model 1 Model 2
(Intercept) 51.54*** 43.10***
(3.60) (3.71)
lernstunden 1.68***
(0.22)
AIC 8887.85 8832.31
BIC 8902.57 8851.95
Log Likelihood -4440.92 -4412.16
Num. obs. 1000 1000
Num. groups: schule 8 8
Var: schule (Intercept) 100.53 97.57
Var: Residual 412.31 389.07
p < 0.001, p < 0.01, p < 0.05

Eine weitere Stunde lernen erhöht die Punktzahl eines Schülers um 1.68 Punkte.

Das Tolle an der `texreg`` Tabellenfunktion ist dass man alles modifizieren kann. Zum Beispiel:

htmlreg(list(fit00,fit1),                               #Regressionsobjekte
        custom.model.names = c("Nullmodel","Model 1"),  #Benenne die Modelle
        custom.coef.names = c("Intercept","Lernstunden"), #Benenne die Koeffienten
        custom.gof.names = c("AIC","BIC",                #Benenne die fit Statistik
                               "Log Likelihood","Observationen",
                               "Schulen","Zwischen-Gruppen Varianz",
                               "In-Group Varianz"))
Statistical models
Nullmodel Model 1
Intercept 51.54*** 43.10***
(3.60) (3.71)
Lernstunden 1.68***
(0.22)
AIC 8887.85 8832.31
BIC 8902.57 8851.95
Log Likelihood -4440.92 -4412.16
Observationen 1000 1000
Schulen 8 8
Zwischen-Gruppen Varianz 100.53 97.57
In-Group Varianz 412.31 389.07
p < 0.001, p < 0.01, p < 0.05

Modellvergleich

Die Werte für AIC and BIC sind Gütemaße. Umso kleiner der Wert, desto besser passt das Modell auf die Daten.

Wenn die beiden aufeinander aufbauen, dann vergleicht die anova die beiden Modelle, weichen diese signifkant ab, dann kann das komplexere Modell angenommen werden.

anova(fit00, fit1)
## Data: testdata
## Models:
## fit00: y ~ 1 + (1 | schule)
## fit1: y ~ lernstunden + (1 | schule)
##       Df    AIC    BIC  logLik deviance  Chisq Chi Df Pr(>Chisq)    
## fit00  3 8892.2 8906.9 -4443.1   8886.2                             
## fit1   4 8835.4 8855.0 -4413.7   8827.4 58.789      1  1.755e-14 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Der signifkante Test zeigt, dass fit1 einen besseren Fit der Daten angibt und somit zu bevorzugen ist!

Mit dem folgenden sjPlot Befehl können wir uns die verschiedenen random intercepts anzeigen lassen:

sjp.lmer(fit1, 
         type="ri.slope",
         geom.size = 1.2 , #Größe des verwendeten geoms; hier: Linie
         p.kr=F)

3.2.3 Random Intercept und Random Slope

\[Punktzahl = \beta_0 + (\beta_1 + u_{1j}) \times X_{ij} + u_j + e_{ij}\]

Ein random slope wird nun hinzugefügt. Dieser wird dem Modell hinzugefügt indem man in Klammern lernstunden als random effect spezifiziert

fit2 <- lmer(y ~ lernstunden + (lernstunden | schule), data = testdata)

htmlreg(list(fit00, fit1, fit2))
Statistical models
Model 1 Model 2 Model 3
(Intercept) 51.54*** 43.10*** 43.04***
(3.60) (3.71) (2.95)
lernstunden 1.68*** 1.69***
(0.22) (0.27)
AIC 8887.85 8832.31 8832.46
BIC 8902.57 8851.95 8861.90
Log Likelihood -4440.92 -4412.16 -4410.23
Num. obs. 1000 1000 1000
Num. groups: schule 8 8 8
Var: schule (Intercept) 100.53 97.57 56.96
Var: Residual 412.31 389.07 387.52
Var: schule lernstunden 0.21
Cov: schule (Intercept) lernstunden 3.48
p < 0.001, p < 0.01, p < 0.05

Der Vergleich von AIC zeigt eine marginale Verkleinerung. Das BIC wird hingegen größer.

anova(fit00, fit1, fit2)
## Data: testdata
## Models:
## fit00: y ~ 1 + (1 | schule)
## fit1: y ~ lernstunden + (1 | schule)
## fit2: y ~ lernstunden + (lernstunden | schule)
##       Df    AIC    BIC  logLik deviance   Chisq Chi Df Pr(>Chisq)    
## fit00  3 8892.2 8906.9 -4443.1   8886.2                              
## fit1   4 8835.4 8855.0 -4413.7   8827.4 58.7888      1  1.755e-14 ***
## fit2   6 8835.5 8865.0 -4411.8   8823.5  3.8488      2      0.146    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Der Chi-Quadrat Test zeigt eine Verbesserung des Fits auf dem \(95\%\)-Signifkanzniveau.

sjPlot hilft uns wieder etwas bei der Visualisierung:

sjp.lmer(fit2,                     #
         facet.grid = F,           #
         sort.est = "sort.all",    #
         y.offset = 0.3,           #
         p.kr=F)                   #

sjp.lmer(fit2, 
         facet.grid = FALSE, 
         type="rs.ri",
         sort.est = "sort.all",
         geom.size = 1.2, 
         show.legend = T)

4 Projekt

Human Empowerment Framework

Human Empowerment Framework

Variablen Observationen Mittelwert Standardabweichung Median Min Max
eman 34,793 0.414 0.179 0.402 0 1
education 34,793 0.609 0.293 0.625 0 1
income 34,793 0.436 0.245 0.444 0 1
inform 34,793 0.575 0.223 0.594 0 1
cntry 34,793 - - - 0 25
ggplot(wvs, aes(x=cntry, y=eman, colour = cntry)) + 
  geom_boxplot(outlier.shape=NA) + #avoid plotting outliers twice
  geom_jitter(position=position_jitter(width=.1, height=0), alpha=0.3) + coord_flip()

Aufgaben

Aufgabe 1: Berechnet ein Nullmodell, die abhhängige Variable Emancipative Values

  • Berechnet und interpretiert den ICC. Ist ein Multilevel Modell angebracht?

  • Stelle das Modell in einer Tabelle dar. screenreg() ist dein Freund!

  • Gib jeweils die Zwischen-Gruppen und In-Group Varianz an!

  • Visualisiere den random intercept.

Aufgabe 2: Berechnet ein multivariates Modell, abhängige Variable Emancipative Values und unabhängige Variable die Action Resources Material Resources, Intellectual Resources und Connective Resources

  • Vergleiche das Modell mit dem Nullmodell! Haben die x-Variablen den Fit verbessert?

  • Stelle das Modell im Vergleich zum Nullmodell in einer Tabelle dar. screenreg() ist immernoch dein Freund!

  • Interpretiere die Koeffizienten!

  • Visualisiere den random intercept.

5 Was wir nicht behandeln konnten:

  • Level 2 Variablen

  • Crosslevelinteraktionen

  • Zentrieren von Variablen

Centering or Not Centering in Multilevel Models? The Role of the Group Mean and the Assessment of Group Effects

Group-mean-centering independent variables in multi-level models is dangerous

  • Residuendiagnostik (jep das gibt’s auch noch)

Genauso wie bei einer handelsüblichen linearen Regressionen auf der ersten Ebene gibt es einige Gütekriterien welche eine Multilevel-Regression einhalten muss.

Nähere Informationen findet ihr dazu unter folgenden Links:

HLMdiag: A Suite of Diagnostics for Hierarchical Linear Models in R

DHARMa - Residual Diagnostics for HierArchical (Multi-level / Mixed) Regression Models

6 Weitere Ressourcen

Unter folgendem Link findet ihr ein tolles Tutorial für Multilevel-Modelle inklusive Anwendungen in R, STATA, SPSS und Mlwin:

LEMMA (Learning Environment for Multilevel Methods and Applications)

Guter Artikel für lineare sowie logistische Multilevelmodelle:

Multi-level Models by Corey Sparks