R - Mediationsanalyse mit dem PROCESS Modell 4

Das PROCESS-Makro von Hayes (Version 3.5 and später) mit R

Arndt Regorz, Dipl. Kfm. & BSc. Psychologie, 21.04.2021


Seit Jahren ist das PROCESS-Makro die Standardmethode zum Testen indirekter Effekte bei der Verwendung von SPSS. Ende 2020 hat Hayes die PROCESS-Funktion auch für R veröffentlicht. Dieses Tutorial zeigt Ihnen, wie Sie eine Mediationsanalyse mit der PROCESS-Funktion von Hayes für R / RStudio durchführen und interpretieren können.

Inhalt

  1. Video-Tutorial
  2. Download von PROCESS für R
  3. Initialisieren des Codes
  4. Testen eines Mediationsmodells
  5. Beispiel-Output 1 - einfache Mediation
  6. Zusätzliche Parameter
  7. Mein bevorzugter Mediations-Code in R
  8. Beispiel-Output 2 – Mediation mit Zusatzoptionen
  9. Parallele Mediation
  10. Parallele Mediation R-Code
  11. Beispiel-Output 3 – Parallele Mediation
  12. Weitere Informationen

1. YouTube-Video-Tutorial


(Hinweis: Mit Anklicken des Videos wird ein Angebot des Anbieters YouTube genutzt.)

2. Download von PROCESS für R

Sie können PROCESS für R hier herunterladen:
https://www.processmacro.org/download.html

Aktuell (April 2021) finden Sie einen Ordner namens "PROCESS v3.5beta for R". Dort finden Sie eine R-Datei "process.r". Bitte beachten Sie, dass es sich zu diesem Zeitpunkt noch um eine Beta-Version handelt, so dass es noch Fehler im Code geben kann.

Bitte beachten Sie, dass es auch R-Packages mit dem Namensbestandteil "process" gibt. Diese sind nach meinem Kenntnisstand nicht das Original-PROCESS-Makro von Hayes, sondern Versuche, Teile von PROCESS nachzuprogrammieren.

3. Initialisieren des Codes

Da PROCESS kein R-Paket ist, können Sie die Befehle install.packages() und library() nicht mit ihm verwenden. Als benutzerdefinierte Funktion muss es durch Ausführen der Datei "process.r" installiert werden.

Wenn Sie diese Datei in RStudio öffnen, können Sie sie ausführen. Es wird ein oder zwei Minuten dauern, bis der Code fertig ausgeführt ist. Danach haben Sie eine neue R-Funktion erhalten, process(). Mit dieser Funktion können Sie PROCESS in der R-Umgebung in Ihrer aktiven R-Sitzung ausführen.

Wenn Sie nicht jedes Mal, wenn Sie R öffnen, den Code von process.r erneut ausführen möchten, empfiehlt Hayes, Ihren R-Arbeitsbereich nach dem Ausführen von process.r zu speichern

4. Testen eines Mediationsmodells

Der einfachste R/PROCESS Code für eine Mediationsanalyse wäre:

process (data = my_data_frame, y = "my_DV", x = "my_IV", m ="my_mediator", model = 4)

In diesem Beispiel habe ich die folgenden Variablennamen verwendet (ggf. durch Ihre eigenen ersetzen):

  • my_data_frame: Der Name des Data-Frames, den ich auswerten will.
  • my_DV: Name der abhängigen Variable/Kriteriumsvariable.
  • my_IV: Name der unabhängigen Variable/Prädiktorvariable
  • my_mediator: Name der Mediatorvariable


Bei den Variablen muss man folgendes beachten:

  • Die Variablennamen müssen in englische Anführungszeichen (doppelte Hochkommmas) eingeschlossen sein.
  • R unterscheidet bei Variablennamen zwischen Groß- und Kleinschreibung.
  • Wenn man, z.B. als unabhängige Variable, eine binäre Variable verwendet, darf diese nicht als Faktorvariable definiert sein. Eine Faktorvariable muss also vorher in eine normale numerische Variable (mit zwei Ausprägungen) umcodiert werden.

Und der Funktionsname, "process", muss klein geschrieben werden.

5. Beispiel-Output 1 – Einfache Mediation

Hier ist ein Beispiel für den Output, den man mit o.g. Code bekommen könnte:

image 1 PROCESS for R Mediation


(A): Der a-Pfad der Mediation (UV->MED). Hier ist er signifikant, weil p < .05
coeff: unstandardisiertes Regressionsgewicht b.
LLCI und ULCI: Untergrenze (LL = lower limit) und Obergrenze (UL = upper limit) eines Konfidenzintervalls für b; basiert auf der Anname der Normalverteilung der Residuen.

(B): Der c'-Pfad (direkter Effekt) der Mediation (UV->AV). Er ist nicht signifikant, weil p > .05

(C): Der b-Pfad der Mediation (MED->AV); signifikant, weil p < .05

image 2 PROCESS for R Mediation


(D): Der c'-Pfad ein zweites Mal, siehe (B).

(E): Der indirekte Effekt (a*b). Er ist signifikant, weil das Boostrap-Konfidenzintervall die Null nicht einschließt.
BootLLCI and BootULCI: Die Grenzen eines Konfidenzintervalls für das Regressionsgewicht b des indirekten Effekts basieren auf Bootstrapping, sind also nicht abhängig von einer Normalverteilung der Residuen. Das ist die Angabe im Output, auf die es für die Mediationsprüfung ankommt. Um eine Mediation zu zeigen, muss der indirekte Effekt signifikant sein. Ein signifikanter a-Pfad und b-Pfad sind weder notwendig noch hinreichend als Beleg einer Mediation.

6. Zusätzliche Parameter

Auch wenn der recht kurze Code oben bereits einen vollwertigen Test einer Mediationshypothese ergibt, sind doch in den meisten Fällen für die bessere Interpretierbarkeit noch Zusatzinformationen von Interesse. Nachfolgend sind einige zusätzliche PROCESS Parameter aufgeführt, die nach meiner Erfahrung hilfreich bei der Interpretation Ihres Mediationsmodells sein können.

Effektstärke (indirekter Effekt)

Effektstärken für den indirekten Effekt, sowohl teilweise standardisierte Effekte (partially standardized = ps) als auch vollständig standardisierte Effekte (completely standardized = cs) kann man anfordern, wenn man denn effsize-Parameter auf 1 setzt.
Beispiel:
effsize =1

Totaler Effekt

Den totalen Effekt (c-Pfad von UV auf AV ohne Berücksichtigung eines Mediators) können Sie testen, indem Sie den total-Paramter auf 1 setzen.
Beispiel:
total =1

Sobel-Test in PROCESS

Sie können den Sobel-Test aufrufen, indem Sie den normal-Parameter auf 1 setzen.
Beispiel:
normal = 1
(Im Allgemeinen empfehle ich, den Sobel-Test nicht zu verwenden. In kleinen und mittelgroßen Stichproben (bei ca. N < 500) kann der Test bei einer Verletzung der Normalverteilungsannahme zu falschen Ergebnissen führen. Und auch bei größeren Stichproben ist das Ergebnis per Bootstrapping mindestens genauso gut.

Standardisierte Effekte

Man kann standardisierte Effekte (Betas) für die ganzen anderen Regressionseffekte außer dem indirekten Effekt erhalten, indem man den stand-Parameter auf 1 setzt.
Beispiel:
stand =1

Kontrollvariablen einschließen

Wenn Sie eine oder mehrere Kontrollvariablen in Ihrem Modell berücksichtigen wollen, können Sie den Paramter cov = ... nutzen. Wenn Sie nur eine Kontrollvariable haben, können Sie diese einfach nach dem Gleichheitszeichen (in englischen Anführungszeichen/Hochkommas) aufführen. Bei mehreren Kontrollvariablen müssen Sie diese mit c(...) zusammenbinden.

Beispiele:
cov = "Alter"
cov = c("Alter", "Geschlecht")

Anzahl der Bootstrap-Stichproben

Die Voreinstellung von PROCESS sind 5,000 Bootstrap-Stichproben. Diesen Wert können Sie ändern, indem Sie dem boot-Parameter die gewünschte Anzahl an Stichproben übergeben.

Beispiel:
boot = 10000

Bootstrapping nicht nur für die indirekten Effekte

Als Voreinstellung verwendet PROCESS Bootstrapping für den indirekten Effekt. Wenn Sie auch für die anderen geschätzten Pfade (a-Pfad, b-Pfad, c'-Pfad) robuste Konfidenzintervalle erhalten haben, um sich nicht mehr mit der Normalverteilungsannahme auseinandersetzen zu müssen, können Sie das anfordern, indem Sie den modelbt-Paramter auf 1 setzen. Anderenfalls müssten Sie die Normalverteilungsannahme gesondert prüfen, bevor Sie Effekte für a-Pfad, b-Pfad oder c'-Pfad berichten.
Beispiel:
modelbt = 1

Bootstrapping - Startwert für den Zufallszahlen-Generator

Bootstrapping basiert auf einem Zufallsprozess. Mit einem Zufallszahlen-Generator werden viele Zufallsstichproben aus der Stichproben nach dem Modell Urnenziehung mit Zurücklegen gezogen. Das führt dazu, dass bei wiederholter Durchführung von Bootstrapping die Ergebnisse sich zumindest geringfügig unterscheiden werden (SE, p-Werte, Konfidenzintervalle). Das ist relativ lästig, wenn man dann die eigenen Ergebnisse verschriftlichen möchte. Wenn Sie jedes Mal die gleichen Ergebnisse für die gleichen Daten erhalten wollen, können Sie einen Startwert für den Zufallszahlen-Generator festsetzen, indem Sie den seed-Parameter auf eine beliebige Ganzzahl setzen.

Beispiel:
seed = 654321

7. Mein bevorzugter Mediations-Code in R

Der folgende Beispielcode für eine Mediation mit zwei Kontrollvariablen zeigt die Optionen, die ich in der Regel für ein Mediationsmodell mit PROCESS verwende:

process (data = my_data_frame, y = "my_DV", x = "my_IV", m ="my_mediator", model = 4, effsize =1, total =1, stand =1, cov = c("my_covariate1", "my_covariate2"), boot = 10000 , modelbt = 1, seed = 654321)

8. Beispiel-Output 2 – Mediation mit Zusatzoptionen

Hier ist ein Beispiel für eine Auswertung, die Sie mit den verwendeten Zusatzoptionen erhalten könnten:

image 3 PROCESS for R Mediation


(F): Ergebnisse für die Kontrollvariablen.

(G): Standardisierte Regressionsgewichte (Betas)

image 4 PROCESS for R Mediation


(H): Total effect model = Modell für den Einfluss der unabhängigen Variable auf die abhängige Variable ohne Beachtung des Mediators

(I): Effekt der unabhängigen Variable auf die abhängige Variable ohne Beachtung des Mediators

image 5 PROCESS for R Mediation


(J): ps = Teilweise standardisierter Effekt (partially standardized effect) = standardisierte abhängige Variable

(K): cs = Vollständig standardisierter Effekt (completely standardized effect = standardisierte unabhängige und abhängige Variable

(L): Teilweise standardisierter indirekter Effekt = standardisierte abhängige Variable

(M): Vollständig standardisierter indirekter Effekt = standardisierte unabhängige und abhängige Variable

image 6 PROCESS for R Mediation


(N): Bootstrap-Ergebnisse für den a-Pfad (robust gegen Verletzungen der Normalverteilungsannahme)

(M): Bootstrap-Ergebnisse für den c'-Pfad (robust gegen Verletzungen der Normalverteilungsannahme)

(O): Bootstrap-Ergebnisse für den b-Pfad (robust gegen Verletzungen der Normalverteilungsannahme)

9. Parallele Mediation

Man kann PROCESS model 4 auch mit mehr als einem Mediator auf einmal nutzen. In diesem Fall schätzt PROCESS eine parallele Mediation, bei dem mehrere Mediatoren nebeneinander den Effekt mediieren (für eine serielle Mediation würden Sie stattdessen PROCESS model 6 verwenden).

Wenn man an PROCESS mehrere Mediatoren übergeben möchte, um eine parallele Mediation zu schätzen, müssen diese mit c(.....) verbunden werden.

Beispiel:
m = c("anger","hostility")

Das führt zu einem weiteren Hilfreichen Zusatzparameter:

Indirekte Effekte in einer parallelen Mediation vergleichen (Kontraste)

Wenn Sie eine parallele Mediation mit Modell 4 prüfen, können Sie die verschiedenen indirekten Effekte mit dem contrast-Parameter miteinander vergleichen. Wenn man den Parameter auf 1 setzt, werden die Regressionsgewichte der verschiedenen indirekten Effekte miteinander verglichen. Wenn man hingegen den Parameter hingegen auf 2 setzt, werden die Absolutwerte der Regressionsgewicht für die indirekten effekte miteinander verglichen (das kann sinnvoll sein, wenn ein indirekter Effekt positiv ist und der andere negativ, und man prüfen möchte, ob der positive signifikant stärker ist als der negative).

Beispiele:
contrast = 1
contrast = 2

10. Parallele Mediation R-Code

Der folgende Beispielcode für eine parallele Mediation (hier mit zwei Kontrollvariablen) zeigt die Optionen, die ich für eine parallele Mediation normalerweise nutze:

process(data = my_data_frame, y = "my_DV", x = "my_IV", m =c("my_mediator1", "my_mediator2"), model = 4, effsize =1, total =1, stand =1, cov = c("my_covariate1", "my_covariate2"), contrast =1, boot = 10000 , modelbt = 1, seed = 654321)

11. Beispiel-Output 3 – Parallele Mediation

Hier finden Sie ein Beispiel für die Ergebnisse einer Mediation mit zwei parallelen Mediatoren:

image 7 PROCESS for R Mediation


(Q): A-Pfad zum ersten Mediator

image 8 PROCESS for R Mediation


(R ): A-Pfad zum zweiten Mediator

(S): B-Pfad vom ersten Mediator

(T): B-Pfad vom zweiten Mediator

image 9 PROCESS for R Mediation


image 10 PROCESS for R Mediation


(U): Totaler indirekter Effekt. Indirekte Effekte über Mediator 1 und zwei zusammen genommen.
Getestet über Bootstrapping, hier signifikant, da das Konfidenzintervall die 0 nicht umschließt.

(V): Indirekter Effekt über Mediator 1
Getestet über Bootstrapping, hier signifikant, da das Konfidenzintervall die 0 nicht umschließt.

(W): Indirekter Effekt über Mediator 2.
Getestet über Bootstrapping, hier signifikant, da das Konfidenzintervall die 0 nicht umschließt.

(X): Kontrast zwischen den beiden indirekten Effekten (über Mediator 1 vs. über Mediator 2).
Getestet über Bootstrapping, hier signifikant, da das Konfidenzintervall die 0 nicht umschließt. In diesem Fall ist der Effekt über Mediator 1 signifikant stärker als über Mediator 2.

(Y): Kontrastdefinition (ist vor allem wichtig, wenn man mehr als zwei Mediatoren hat).

image 11 PROCESS for R Mediation


12. Weitere Informationen

Weitere grundlegende Informationen über Mediationsanalysen finden Sie in meinem Tutorial:
Mediatoranalyse 1 - Grundlagen und Schema nach Baron und Kenny

Wenn Sie mehr über Power/Stichprobenumfangsplanung im Zusammenhang mit einer Mediationsanalyse erfahren wollen, könnte Ihnen folgendes Tutorial weiterhelfen.
Mediator Poweranalyse - Wie berechnet man die nötige Stichprobengröße?

Und als Grundlagenwerk zur Theorie von Mediation und Moderation empfehel ich das excellente Buch von Andrew Hayes, dem Schöpfer von PROCESS:
“Introduction to Mediation, Moderation, and Conditional Process Analysis: A Regression-Based Approach”
http://www.afhayes.com/introduction-to-mediation-moderation-and-conditional-process-analysis.html