R - Moderationsanalyse mit PROCESS Model 1

Testen einer Interaktion mit Hayes' PROCESS-Makro mit R

Arndt Regorz, Dipl. Kfm. & M.Sc. Psychologie, 09.12.2024


Dieses Tutorial zeigt Ihnen, wie Sie mit PROCESS in R / RStudio eine Moderationsanalyse durchführen können.

Inhalt

  1. Video-Tutorial
  2. Download von PROCESS
  3. Initialisieren des R-Codes
  4. Test eines Moderationsmodells
  5. Beispieloutput 1 – Moderation
  6. Zusätzliche Parameter
  7. Mein bevorzugter Moderations R-Code
  8. Beispieloutput 2 – Moderation mit Zusatzoptionen
  9. Weitere Informationen

1. YouTube-Video-Tutorial


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

2. Download von PROCESS

PROCESS für R ist kein R-Modul, Sie können es also auch nicht über install.packages() herunterladen. R-Packages mit dem Namensbestandteil "process" sind nicht das Original Process-Makro von Hayes, sondern mehr oder weniger gelungene Versuche von anderen, das nachzubauen.

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

Dann finden Sie im heruntergeladenen Zip-Ordner Verzeichnisse für die verschiedenen Statistikprogramme (SPSS, SAS, R). Im Verzeichnis zu R ist eine R-Datei mit Namen "process.r" enthalten.

3. Initialisieren des R-Codes

Da PROCESS kein R-Package ist, können Sie die sonst von R gewohnten Kommandos install.packages() und library() dafür nicht nutzen. Als eine benutzerdefinierte Funktion müssen Sie PROCESS installieren, indem Sie die o.g. Datei "process.r" in RStudio ausführen.

Wenn man process.r in RStudio öffnet, kann man es einfach ausführen. Das dauert eine oder zwei Minuten, und anschließend haben Sie eine neue R-Funktion zur Verfügung, process(). Mit dieser Funktion können Sie das PROCESS-Makro in Ihrer R-Umgegbung während der aktiven R-Session ausführen.

4. Test eines Moderationsmodells

Der einfachste R/PROCESS-Code für eine Moderationsmodell ist der folgende. Sie geben dabei nur die Datendatei an, die verwendeten Variablennamen und die Modellnummer (für Moderation: 1):

process (data = my_data_frame, y = "my_DV", x = "my_IV", w ="my_MOD", model = 1)

In diesem Beispielcode habe ich folgende Variablennamen verwendet, die Sie mit den relevanten Namen aus Ihren Daten ersetzen müssten:

  • my_data_frame: Mein Data-Frame mit den Daten, die ich für den Moderationstest nutzen möchte.
  • my_DV: Der Name für die abhängige Variable in meinen Daten
  • my_IV: Der Name für die unabhängige Variable in meinen Daten
  • my_MOD: Der Namen für den Moderator in meinen Daten


Für Ihre Variablennamen sind einige wichtige Punkte zu bedenken:

  • Der Variablenname muss in amerikanische Anführungszeichen (doppeltes Hochkomma) gesetzt werden.
  • Bei Variablennamen unterscheidet R Klein- und Großbuchstaben - "moderator" ist z.B. in R eine andere Variable als "Moderator".
  • Wenn Sie eine binäre Variable verwenden, dann darf diese nicht als Faktor in R definiert sein. Falls doch, müssten Sie diese zunächst in eine numerische Variable umwandeln.

Und zuletzt: Der Funktionsname "process" muss in Kleinbuchstaben geschrieben werden.

5. Beispiel-Output 1 – Moderation

Hier ist ein Beispiel des Outputs für den o.g. Code:

Output Moderation PROCESS Model 1


(A): Unstandardisiertes Regressionsgewicht (b) für die unabhängige Variable mit Test-Statistik, p-Wert und Konfidenzintervall

(B): Unstandardisiertes Regressionsgewicht (b) für den Moderator mit Test-Statistik, p-Wert und Konfidenzintervall

(C): Unstandardisiertes Regressionsgewicht (b) für die Interaktion mit Test-Statistik, p-Wert und Konfidenzintervall. Wenn es signifikant ist, liegt eine Moderation vor.

(D): Schlüssel für den Interaktionsterm (nur wichtig, wenn man ein Modell mit mehr als einer Interaktion hat)

(E): R2-chng: Effektstärke der Moderation (Wie viel zusätzliclhe Varianz erklärt die Interaktion über UV und Moderator hinaus?)

Output Simple Slopes Moderation PROCESS Model 1


(F): Effekt (=b, zweite Spalte) der UV auf die AV für niedrige Werte des Moderators (16. Perzentil, erste Spalte) – Simple Slope

(G): Effekt (=b, zweite Spalte) der UV auf die AV für mittlere Werte des Moderators (50. Perzentil = Median, erste Spalte) – Simple Slope

(H): Effekt (=b, zweite Spalte) der UV auf die AV für hohe Werte des Moderators (84. Perzentil, erste Spalte) – Simple Slope

6. Zusätzliche Parameter

Auch wenn der obige Code Ihnen bereits einen Moderationstest liefert, sind in vielen Fällen noch zusätzliche Informationen hilfreich. Nachfolgend finden Sie einige zusätzliche PROCESS-Parameter, die für Ihren Test, ob es eine Interaktion gibt, sinnvoll sein könnten.

Mean Centering

In einer Moderationsanalyse ist die Interpretation der Regressionsgewichte einfacher, wenn Sie den Moderator (und vielleicht auch die unabhängige Variable) zentrieren. Wenn Sie den Parameter center auf 1 setzen, sind alle Variablen, die in Interaktionsterme eingehen (IV und Moderator), zentriert. Wenn Sie ihn stattdessen auf 2 setzen, werden nur kontinuierliche Variablen zentriert. Da die Zentrierung von binären Variablen die Interpretation der Ergebnisse erschwert, verwende ich nur diesen zweiten Parameterwert.
Beispiel:
center = 2

Ändern der Werte für Interaktionsdiagramm und Simple Slopes

Als Voreinstellung werden Interaktionsplots und Simple Slopes für den Median, das 16. und das 84. Perzentil ermittelt. Das können Sie jedoch ändern zu -1 SD, Mittelwert, + 1 SD (was ich bevorzuge), indem Sie den moments Parameter auf 1 setzen.
Beispiel:
moments = 1

Signifikanzregionen Johnson-Neyman

Um Signifikanzregionen nach Johnson-Neyman anzufordern, setzen Sie den jn Parameter auf 1 (das sinnvoll bei kontinuierlichem Moderator).
Beispiel:
jn = 1

Diagramm für eine signifikante Interaktion^

Bei einer signifikanten Interaktion ist es sinnvoll, die Simple Slopes (Regressionsgeraden für verschiedene Werte des Moderators) graphisch darzustellen. Die dafür nötigen Daten können Sie erzeugen, indem der plot Parameter auf 1 gesetzt wird.
Beispiel:
plot = 1

Für mich ist das jedoch in R (im Gegensatz zu SPSS) wenig hilfreich, weil ich dann ja immer noch R Code schreiben muss, um aus den Daten ein Diagramm zu machen. Daher würde ich dann bei einer signifikanten Interaktion eher auf ein R Package zugreifen, die wirklich direkt ein Interaktionsdiagramm mit Simple Slopes erzeugt: https://cran.r-project.org/web/packages/rockchalk/vignettes/rockchalk.pdf, siehe Kapitel 4.1 (Interaction in Linear Regression).

Hier wäre dann ein Code-Beispiel für Simple Slopes
(Zunächst muss man einmalig die rockchalk-Package installieren mit install.packages("rockchalk").)

library(rockchalk)
my_fit <- lm(my_DV ~ my_IV * my_MOD, data = my_data_frame)
summary(my_fit)
plotSlopes (my_fit, plotx ="my_IV" , modx = "my_MOD", modxVals = "std.dev." )

Berücksichtigung von Kontrollvariablen

Wenn Sie Kontrollvariablen/Kovariaten zusätzlich im Modell berücksichtigen möchten, können Sie cov = ... nutzen. Bei einer einzelnen Kontrollvariable kann man diese einfach in die Formel einschließen. Bei mehr als einer Kontrollvariable müssen diese mit c(....) zusammen gebunden werden.

Beispiele:
cov = "age"
cov = c("age", "gender")

Bootstrapping

Wenn Sie robuste Konfidenzintervalle für Ihre Schätzungen erhalten möchten, können Sie den modelbt Parameter auf 1 setzen.
Beispiel:
modelbt = 1

Anzahl an Bootstrap-Stichproben

Die Voreinstellung beim Bootstrapping sind 5000 Stichproben. Diesen Wert können Sie ggf. ändern über den boot Parameter.

Beispiel:
boot = 10000

Bootstrapping - Startwert für den Zufallszahlengenerator

Bootstrapping enthält eine Zufallskomponente. Mit einem Zufallszahlengenerator werden Zufallsstichproben aus der Stichprobe gezogen. Das hat zur Konsequenz, dass bei jedem Mal, wenn Sie PROCESS mit den gleichen Daten ausführen, etwas andere Ergebnisse für die Konfidenzintervalle herauskommen. Das ist recht nervig, wenn man später die Ergebnisse zu Papier bringen möchte. Durch die Vorgabe eines (beliebigen ganzzahligen) Startwertes über den seed Parameter lässt sich das verhindern und jedes Mal kommt mit den gleichen Daten auch das Gleiche heraus.

Beispiel:
seed = 654321

7. Mein bevorzugter Moderations R-Code

Der folgende Beispielcode für eine Moderation mit zwei Kontrollvariablen (my_COV1, my_COV2) zeigt die Optionen, die ich meistens bei einem Test einer Moderationshypothese nutze.

process(data = my_data_frame, y = "my_DV",
x = "my_IV", w ="my_MOD",
model = 1, center = 2, moments = 1,
jn = 1, cov = c("my_COV1", "my_COV2"),
modelbt = 1, boot = 10000, seed = 654321)

8. Beispieloutput 2 – Moderation mit Zusatzoptionen

Hier ist ein Beispiel-Output mit den o.g. Zusatzoptionen. Kommentiert werden nur diejenigen Elemente, die nicht schon beim ersten Output erläutert worden sind.

Output Moderation Process Model 1 mit Zusatzoptionen


(I): Regressionsgewicht für die erste Kontrollvariable mit Test-Statistik, p-Wert und Konfidenzintervall

(J): Regressionsgewicht für die zweite Kontrollvariable mit Test-Statistik, p-Wert und Konfidenzintervall

Output Moderation Process Model 1 Johnson-Neyman Signifikanzregionen


(K): Effekt (=b) der UV auf die AV für niedrige Werte des Moderators (1 SD unter Mittelwert) – Simple Slope

(L): Effekt (=b) der UV auf die AV für mittlere Werte des Moderators (arithmetischer Mittelwert) – Simple Slope

(M): Effekt (=b) der UV auf die AV für hohe Werte des Moderators (1 SD über Mittelwert) – Simple Slope

(N): Verschiedene Werte des Moderators

(O): Bedingter Effekt (b) der UV für diese Ausprägung des Moderators

(P): Signifikanztest für den bedingten Effekt

Output Moderation PROCESS Model 1 Bootstrap-Konfidenzintervalle


(Q): Untergrenze des Bootstrap-Konfidenzintervalls

(R): Obergrenze des Bootstrap-Konfidenzintervalls

Wenn die Null nicht im Konfidenzintervall liegt (also beide Grenzen positiv oder beide Grenzen negativ sind), dann zeigt das Konfidenzintervall einen signifikanten Effekt.

(S): Verwendete Bootstrappingmethode (Perzentil Bootstrap)

(T): Anzahl der Bootstrap-Stichproben (basierend auf der von Ihnen gewählten Anzahl)

9. Weitere Informationen

Wenn Sie mehr über die Theorie hinter der Moderationsanalys erfahren möchten, empfehle ich Andrew Hayes' exzellentes Buch:
“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


Weitere Tutorials zur Moderationsanalyse: