Website-Icon Björn Walther

Mediation in R

1 Ziel der Mediation in R

Eine Mediation beschreibt eine Wirkung einer unabhängigen Variable (X) auf eine abhängige Variable (Y) über den Zwischenschritt einer Mediatorvariable (M).
Man kann also getrost von einer Kette sprechen: unabhängige Variable > Mediator > abhängige Variable.

Neben der hier gezeigten Vorgehenswese in R, habe ich noch einen Artikel zur Mediation in SPSS.

Ein Beispiel wäre ein mathematischer Score und wie er auf einen wissenschaftlichen Score wirkt – mediiert durch einen Schreibscore (entnommen aus dem hsb2-Datensatz, siehe unten).
Grafisch sieht eine einfache Mediation ohne weitere unabhängige Variablen wie folgt aus:

 

2 Voraussetzungen der Mediation

Die wichtigsten Voraussetzungen sind, analog zur multiplen linearen Regression:  

Weil es immer wieder zu Missverständnissen kommt. X muss nicht signifikant auf Y wirken! Baron, Kenny (1986) haben dies als Voraussetzung für die Untersuchung einer Mediation postuliert. Dies ist inzwischen widerlegt. Dieses Vorgehen führt häufig dazu, dass “competitive mediation” nicht erkannt wird (Zhao, Lynch (2010), S.199). Unten mehr dazu.

 

3 Prinzip der Mediation in R

Eine Mediation kann nicht in einem Modell gerechnet werden. Vielmehr ist für jede abhängige Variable, ein separates Modell zu rechnen. Im einfachsten Fall sind dies 2 Modelle, zum einen ist M die abhängige Variable, zum anderen Y.
Modell 1 ist im Beispiel die Wirkung von X auf M. Modell 2 rechnet die gleichzeitige Wirkung von X auf Y und M auf Y.

Anders ausgedrückt, prüft man zunächst in Modell 1, ob der Pfad a signifikant ist (X>M) und dann in Modell 2, ob die Pfade b und c signifikant sind (M>Y sowie X>Y):

Hinweis: Die Benennung der Pfade (speziell c) ist in der Literatur nicht einheitlich. Ich orientiere mich an Zhao, Lynch, Chen (2010), was bei der Einordnung für weniger Verwirrung sorgt. Hayes (2022) verwendet c’ statt c für den direkten Effekt von X auf Y.

 

4 Durchführung der Mediation in R

Zunächst lade ich den oben schon erwähnten Beispieldatensatz “hsb2”:


install.packages("openintro")
library(openintro)
data(hsb2)
force(hsb2)

Im Anschluss rechne ich die einzelnen Modelle

 

5 Ergebnis der Mediation in R

5.1 Direkter Effekt von X auf M (Pfad a)

Hierzu wird die lm()-Funktion verwendet und die Ergebnisse in “pfad_a” gespeichert:


pfad_a<-lm(write~math,hsb2)
summary(pfad_a)

Die Ergebnisse (wichtiges in fett) sind wie folgt:


Call:
lm(formula = write ~ math, data = hsb2)

Residuals:
     Min       1Q   Median       3Q      Max 
-24.4956  -4.5277   0.3797   5.3785  16.4997 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 19.88724    3.02411   6.576  4.2e-10 ***
math         0.62471    0.05656  11.045  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 7.475 on 198 degrees of freedom
Multiple R-squared:  0.3812,	Adjusted R-squared:  0.3781 
F-statistic:   122 on 1 and 198 DF,  p-value: < 2.2e-16

 

5.2 Direkter Effekt von X auf Y und Effekt von M auf Y (Pfad c und b)


pfad_b_c<-lm(science~math+write, hsb2)
summary(pfad_b_c)

Die Ergebnisse (wichtiges in fett) sind wie folgt:


Call:
lm(formula = science ~ math + write, data = hsb2)

Residuals:
     Min       1Q   Median       3Q      Max 
-20.8827  -4.8924  -0.2717   4.0738  23.6972 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 10.68138    3.29339   3.243  0.00139 ** 
math         0.47570    0.07094   6.706 2.07e-10 ***
write        0.30555    0.07012   4.358 2.11e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 7.375 on 197 degrees of freedom
Multiple R-squared:  0.4508,	Adjusted R-squared:  0.4452 
F-statistic: 80.84 on 2 and 197 DF,  p-value: < 2.2e-16

 

5.3 Untersuchung des Mediationseffektes

Im nächsten Schritt ist zu prüfen, welcher Anteil des Effektes von "math" auf "science" über den Mediator, also Pfad a und b läuft.
Hierzu wird das mediation-Paket benötigt. Es kann zwar auch händisch berechnet werden, hiermit ist es aber bequemer und übersichtlicher:


install.packages("mediation")
library(mediation)

Anschließend werden in die mediate()-Funktion die beiden obigen Modellergebnisse hineingegeben und mit treat = "math" die X-Variable und mit mediator = "write" die Mediatorvariable definiert.
Mit boot = TRUE werden die Konfidenzintervalle mithilfe des Bootstrappings berechnet.


results <- mediate(pfad_a, pfad_b_c, 
                   treat = "math", mediator = "write", 
                   boot = TRUE)
summary(results)

Das Ergebnis ist nun folgendes:


Causal Mediation Analysis 

Nonparametric Bootstrap Confidence Intervals with the Percentile Method

               Estimate 95% CI Lower 95% CI Upper p-value    
ACME             0.1909       0.0963         0.30  <2e-16 ***
ADE              0.4757       0.3206         0.63  <2e-16 ***
Total Effect     0.6666       0.5548         0.77  <2e-16 ***
Prop. Mediated   0.2864       0.1407         0.47  <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Sample Size Used: 200 


Simulations: 1000 

Zum indirekten Effekt:

Zum direkten Effekt

Gesamteffekt ("Totaler Effekt")

Stärke der Mediation

 

6 Einordnung der Mediation

Schließlich ist die Mediation noch einzuordnen. Hierfür ist Zaho, Lynch (2010) auf S. 201 anwendbar.

Das Flussdiagramms wird von oben nach unten durchgearbeitet und die oben eingeführten und berechneten Pfade verwendet.
Aus didaktischen Gründen arbeite ich die 5 möglichen Ausgänge ab und deren unterschiedliche Pfade.

Abschließende Hinweise:


install.packages("openintro")
library(openintro)
data(hsb2)
force(hsb2)

 

Die mobile Version verlassen