Hoofdstuk 24 Moderatieanalyse

24.1 Intro

Als er een verband bestaat tussen twee variabelen, dan kan het zo zijn dat dit effect alleen aanwezig is bij een bepaalde groep mensen of dat het verband sterker is bij de ene groep in vergelijking tot een andere groep. De variabele die het verschil tussen de groepen aangeeft (bijvoorbeeld opleiding of sekse) wordt dan een moderator genoemd. Een moderator is dus een variabele die het verband tussen twee variabelen beïnvloedt. Dit betekent dat voor mensen die hoog scoren op de moderator het effect van de predictor op de afhankelijke variabele anders is dan voor mensen die laag scoren op de moderator. Een moderator kan een groepsindeling representeren, zoals bij opleiding of sekse. De moderator is dan een categorische of dichotome (twee categorieën) variabele, maar een moderator kan ook een intervalvariabele zijn, zoals een eigenschap die iemand in meer of mindere mate bezit (bijvoorbeeld veerkracht). Bij een intervalvariabele zijn er geen natuurlijke groepen, maar we kunnen nog steeds mensen onderscheiden die relatief hoog scoren op zo’n variabele en mensen die er relatief laag op scoren.

24.1.1 Voorbeeld dataset

Voor het eerste voorbeeld wordt gebruik gemaakt van de dataset Statistiekangst. Hiermee gaan we kijken of iemands toename in statistiekkennis wordt beïnvloed door de cursus die is gevolgd, en of dit wordt gemodereerd door iemands geslacht. Voor de laatste twee voorbeelden wordt gebruik gemaakt van de dataset roken. Hier gaan we eerst uitzoeken of de zin in een sigaret beïnvloedt wordt door de mate van stress en of dit gemodereerd wordt door het gezelschap waarin de persoon zich bevindt (samen/alleen). Daarna gaan we uitzoeken of de leeftijd een moderatie-effect heeft op de mate van stress. Informatie over deze datasets is te vinden in 3 en informatie over hoe je data kunt laden staat beschreven in 4.

24.2 jamovi

24.2.1 Moderatie met categorische variabelen

Voor een moderatie met categorische variabelen, waarbij de uitkomst wel een intervalvariabele is, kunnen we gebruik maken van de variantieanalyse. Voor meer informatie over het uitvoeren hiervan, kun je eerst het hoofdstuk 15 lezen.

Voor het uitvoeren van een moderatieanalyse hoef je hier weinig op uit te breiden. We nemen het voorbeeld van een factoriële anova. Je begint met het toevoegen van de variabele Cursus en vervolgens klik je ook op de variabele Gender. Jamovi voegt dan behalve de twee hoofdeffecten ook automatisch het interactie-effect toe. Verder kan het helpen om een grafiek te maken om het moderatie-effect te visualiseren. Dit kun je doen door onderaan bij de opties op Estimated Marginal Means te klikken, en daar dan vervolgens beide variabelen in de box gelabeld “Marginal Means, Term 1” in te plaatsen.

Volgens de syntax ziet het er als volgt uit om een moderatieanalyse met grafiek uit te voeren:

jmv::ANOVA(
    formula = dif_Stat ~ Cursus + Gender + Cursus:Gender,
    data = data,
    emMeans = ~ Cursus:Gender)

24.2.2 Moderatie met predictor op intervalniveau

Om een moderatie uit te voeren waarbij één van de twee predictoren op intervalniveau is en de ander is dichotoom, dan moet je eerst een regressieanalyse uitvoeren. Instructies hierover kun je vinden onder 16 en 22.

Voor het uitvoeren van een moderatieanalyse moeten we eerst een regressie doen met de predictorvariabele. Deze moeten we centreren, omdat we anders straks het interactie-effect niet kunnen uitrekenen. Een variabele centreren doe je als volgt:

c_stress = stress - VMEAN(stress)

In het menu doe je dit door in het tabblad Data op Compute te klikken. Hier kun je dan vervolgens de nieuwe naam (c_stress) en de bijbehorende formule (stress - VMEAN(stress)) invullen.

Vervolgens kunnen we een regressie uitvoeren. Hierbij voegen we de variabele zin in bij Dependent variable, en de predictoren bij Covariates. Nu berekent jamovi echter niet uit zichzelf het interactie-effect, dus dat moet je handmatig toevoegen. Dit doe je door naar Model Builder te gaan en daar zowel c_stress als samen te selecteren, en dan op het onderste pijltje te klikken. Hier kun je nu kiezen voor “Interaction”. De uitgevoerde regressie ziet er in de onderliggende syntax als volgt uit:

jmv::linReg(
    data = data,
    dep = zin,
    covs = vars(c_stress, samen),
    blocks = list(
        list(
            "c_stress",
            "samen",
            c("c_stress", "samen"))),
    refLevels = list(),
    modelTest = TRUE)

Omdat een dichotome variabele eigenlijk een speciale vorm is van een intervalvariabele, kun je deze soort variabele makkelijk meenemen in een analyse. Je kunt echter ook direct aangeven dat het een factor is in je model in plaats van een covariaat. Hiervoor moet binnen jamovi de variabele wel als nominaal geclassificeerd zijn, anders snapt het programma de berekening niet. Deze manier maakt het wel makkelijker om het interactie-effect te visualiseren. Je kunt als je de regressie hebt uitgevoerd zoals hierboven namelijk onderaan naar “Estimated Marginal Means”. Hier kun je weer beide variabelen tegelijk selecteren en verplaatsen naar het vak rechts. Als het goed is, staat “marginal plots” automatisch aangevinkt, waardoor je nu een grafiek krijgt met stress op de x-as, zin in roken op de y-as, en de twee categorieën van samen als twee afzonderlijke lijnen. De syntax verandert hierdoor een beetje, zie hieronder:

jmv::linReg(
    data = data,
    dep = zin,
    covs = c_stress,
    factors = samen,
    blocks = list(
        list(
            "c_stress",
            "samen",
            c("c_stress", "samen"))),
    refLevels = list(
        list(
            var="samen",
            ref="nee, alleen")),
    emMeans = ~ c_stress:samen)

24.2.3 Moderatie met intervalvariabelen

Een analyse waarbij het moderatie-effect bestaat uit twee intervalvariabelen kan simpelweg met een regressieanalyse worden uitgevoerd. De procedure hierbij is hetzelfde als wat hierboven beschreven staat in het stuk over een predictor op intervalniveau, alleen zijn nu allebei de variabelen op intervalniveau. Wel moet je steeds handmatig toevoegen welke interacties je wilt laten toevoegen via Model Builder, dus in dit geval willen we dat doen voor de combinatie van leeftijd en stress. Ook hier is het wel weer van belang om beide variabelen eerst te centreren of standaardiseren, anders kun je de waarden niet goed interpreteren. Mocht je ook deze interactie willen visualiseren, dan kan dat via Estimated Marginal Means. Het verschil wat je nu zult zien met een dichotome variabele, is dat er nu drie lijnen zullen zijn. De eerste lijn is voor de gemiddelde waarde van de moderator (0 als je hebt gestandaardiseerd), en de twee lijnen daaromheen zijn voor 1 standaarddeviatie boven en 1 standaarddeviatie onder dit gemiddelde. Zo kun je een beetje een beeld krijgen wat het effect is van de predictor voor mensen die hoog of laag scoren op de moderator. Voor ons voorbeeld ziet de syntax er daarvoor als volgt uit:

jmv::linReg(
    data = data,
    dep = zin,
    covs = vars(c_stress, c_leeftijd),
    blocks = list(
        list(
            "c_stress",
            "c_leeftijd",
            c("c_stress", "c_leeftijd"))),
    refLevels = list(),
    emMeans = ~ c_stress:c_leeftijd)

24.3 R

24.3.1 Moderatie met categorische variabelen

Voor een moderatie met categorische variabelen, waarbij de uitkomst wel een intervalvariabele is, kunnen we gebruik maken van de variantieanalyse. Voor meer informatie over het uitvoeren hiervan, kun je eerst het hoofdstuk 15 lezen.

Voor het uitvoeren van een moderatieanalyse hoef je hier weinig op uit te breiden. We nemen het voorbeeld van een factoriële anova. In R wordt hiermee automatisch ook het interactie-effect toegevoegd, dus je hoeft daar niets in te veranderen. Wel kun je deze moderatie laten visualiseren door plot = TRUE toe te voegen aan de code.

fanova(data=dat, y='dif_Stat', between = c('Cursus', 'Gender'), plot=TRUE)

In R wordt een interactie weergegeven met de dubbele punt, omdat de asterisk die we vaak zien al gebruikt wordt voor de significantie van de p-waarden. In dit geval zie je eerst de hoofdeffecten voor Cursus en Gender, en zie je daaronder Cursus:Gender staan, dit is dan het interactie-effect.

24.3.2 Moderatie met predictor op intervalniveau

Om een moderatie uit te voeren waarbij één van de twee predictoren op intervalniveau is en de ander is dichotoom, dan moet je eerst een regressieanalyse uitvoeren. Instructies hierover kun je vinden onder 16 en 22.

Hierbij geldt wel dat een interactie moeilijk te interpreteren is als de variabelen niet gecentreerd of gestandaardiseerd zijn. In R kun je als volgt een variabele centreren:

c_stress <- scale(roken$stress, scale = FALSE)
roken <- cbind(roken, c_stress)

De laatste regel is om de nieuwe variabele die we gemaakt hebben weer toe te voegen aan de originele dataset. In R komen variabelen namelijk niet automatisch in een dataset, maar allemaal los als objecten.

Zoals in het hoofdstuk over multipele regressie al is uitgelegd, kun je vrij gemakkelijk een interactie toevoegen. In ons voorbeeld zou je dan het volgende commando krijgen:

rosetta::regr(zin ~ c_stress + samen + c_stress:samen,
                data = roken)

Via deze functie is het echter niet mogelijk om makkelijk een visualisatie te krijgen van het interactie-effect. Om dit wel te kunnen doen, kunnen we een extra package installeren genaamd sjPlot. Hiermee kun je vervolgens in twee stappen een plot genereren. Eerst moeten we via lm opnieuw de regressie uitvoeren en opslaan. Dit model kunnen we vervolgens in de functie voor de grafiek stoppen:

fit <- lm(zin ~ c_stress * samen, data= roken)
plot_model(fit, type="int")

24.3.3 Moderatie met intervalvariabelen

Een moderatieanalyse met twee intervalvariabelen is in R eigenlijk exact hetzelfde als wat hierboven al beschreven is. Let er hierbij wel op dat het makkelijker is als beide variabelen gecentreerd of gestandaardiseerd zijn, omdat anders de interpretatie van de verschillende coëfficiënten erg ingewikkeld wordt.

In ons huidige voorbeeld zou dat tot de volgende code leiden:

rosetta::regr(zin ~ c_stress + c_leeftijd + c_stress:c_leeftijd, 
     data = roken)

Om dit te visualiseren, kunnen we ook weer gebruik maken van de package sjPlot. Omdat de moderator nu niet dichotoom is, zijn er heel veel verschillende waarden mogelijk. Dit maakt het iets lastiger om te visualiseren, waardoor we extra na moeten denken. Binnen de functie plot_model kun je de waarden van de moderator specificeren via mdrt.values. Hier kun je bijvoorbeeld kiezen uit de minimale waarde en de maximale waarde van de moderator. Een veel gebruikte manier is om het gemiddelde te nemen, en 1 standaarddeviatie boven en onder het gemiddelde. Zo krijg je een beeld van het effect van de predictor voor mensen die hoog en laag op de moderator scoren. Dit is de methode die is gekozen voor de onderstaande code.

fit2 <- lm(zin ~ c_stress * c_leeftijd, data=roken)
plot_model(fit2, type = "int", mdrt.values = "meansd")

24.4 SPSS

24.4.1 Moderatie met categorische variabelen

Voor een moderatie met categorische variabelen, waarbij de uitkomst wel een intervalvariabele is, kunnen we gebruik maken van de variantieanalyse. Voor meer informatie over het uitvoeren hiervan, kun je eerst het hoofdstuk 15 lezen.

In principe verandert er weinig ten opzichte van het uitvoeren van een tweeweg anova, aangezien SPSS automatisch een “Full factorial model” uitrekent, wat inhoudt dat zowel hoofdeffecten als interactie-effecten worden meegenomen.

Wel kun je er nog voor kiezen om dit interactie-effect te visualiseren. Als je in het menu bent van “Univariate”, kun je aan de zijkant op “Plots” klikken. Hier kun je aangeven welke variabele je op de x-as wilt hebben, en voor welke variabele je verschillende lijnen wilt. Meestal is het gebruikelijk dat de predictor op de x-as komt en de moderator als lijnen wordt weergegeven.

Je kunt dit ook via de syntax doen, dan voeg je een regel toe voor PLOT. De gehele analyse ziet er dan zo uit:

UNIANOVA dif_Stat BY Cursus Gender
  /METHOD=SSTYPE(3)
  /INTERCEPT=INCLUDE
  /PLOT=PROFILE(Cursus*Gender) TYPE=LINE ERRORBAR=NO MEANREFERENCE=NO YAXIS=AUTO
  /CRITERIA=ALPHA(.05)
  /DESIGN=Cursus Gender Cursus*Gender.

24.4.2 Moderatie met predictor op intervalniveau

Om een moderatie uit te voeren waarbij één van de twee predictoren op intervalniveau is en de ander is dichotoom, dan moet je eerst een regressieanalyse uitvoeren. Instructies hierover kun je vinden onder 16 en 22.

Voor het uitvoeren van een moderatieanalyse waarbij er intervalvariabelen bij betrokken zijn, is het van belang om deze variabelen te centreren. Als je dit niet doet, dan wordt het bij ingewikkelde analyses bijna onmogelijk om de uitkomst te interpreteren.

In SPSS kun je een variabele als volgt centreren:

AGGREGATE
  /OUTFILE=* MODE=ADDVARIABLES
  /BREAK=
  /stress_mean=MEAN(stress).
  
COMPUTE c_stress=stress - stress_mean.
EXECUTE.

Via het menu doe je dit door op Data te klikken, dan op Aggregate. Verplaats hier je gekozen variabele naar het rechterscherm in het vak “Aggregated variables - Summaries of variable(s)”. Klik op OK, nu is er een nieuwe variabele voor het gemiddelde berekend. Vervolgens kun je via Transform en Compute Variable de nieuwe variabele maken door die variabele voor het gemiddelde af te trekken van de originele variabele.

In SPSS kun je helaas niet zomaar een interactie-effect toevoegen in de regressieanalyse zelf. Dit kan wel met de Process macro die ook wordt gebruikt in het hoofdstuk 25, maar het uitleggen van deze macro is voor een simpele moderatie niet nodig. Je moet dus handmatig de twee predictoren met elkaar vermenigvuldigen, en dit als variabele toevoegen in de analyse. Deze interactieterm maken doe je ook weer via Transform en Compute Variabele.

COMPUTE inter_stress_samen=c_stress * samen.
EXECUTE.

Vervolgens voer je een regressieanalyse uit, waarbij je zowel de twee variabelen los invoert, als de nieuwe variabele die we net gemaakt hebben.

REGRESSION
  /MISSING LISTWISE
  /STATISTICS COEFF OUTS R ANOVA
  /CRITERIA=PIN(.05) POUT(.10)
  /NOORIGIN 
  /DEPENDENT zin
  /METHOD=ENTER c_stress samen inter_stress_samen.

In SPSS kun je via Graphs allerlei grafieken maken. Om de moderatie te visualiseren kiezen we voor een scatterplot. Klik hiervoor op Graphs, Legacy Dialogs, en dan Scatter/Dot. Kies voor “Simple Scatter”. In het menu selecteer je de afhankelijke variabele voor op de y-as, de variabele die interval is voor op de x-as, en de dichotome variabele verplaats je naar “Set markers by”.

GRAPH
  /SCATTERPLOT(BIVAR)=c_stress WITH zin BY samen
  /MISSING=LISTWISE.

SPSS laat hierbij nu niet automatisch lijnen zien, alleen de kleuren van de observaties verschillen. Als je de grafiek wilt bewerken kun je erop dubbelklikken. Je komt dan in een menu waarin je allerlei dingen kunt aanpassen, zoals de kleuren, de labels en de legenda. Om lijnen weer te geven per groep, klik je op “Add Fit line at Subgroups”. Dit is helaas iets wat je niet via de syntax kunt doen.

24.4.3 Moderatie met intervalvariabelen

Een moderatie met intervalvariabelen werkt eigenlijk hetzelfde als het voorbeeld hierboven. Ook hier zul je de variabelen moeten centreren of standaardiseren, en we moeten weer handmatig een interactieterm maken door de variabelen met elkaar te vermenigvuldigen. Vervolgens kun je alle drie de termen in je regressieanalyse stoppen. Dit ziet er in de syntax uiteindelijk als volgt uit:

  /MISSING LISTWISE
  /STATISTICS COEFF OUTS R ANOVA
  /CRITERIA=PIN(.05) POUT(.10)
  /NOORIGIN 
  /DEPENDENT zin
  /METHOD=ENTER c_stress c_leeftijd inter_stress_leeftijd.

Deze moderatie is helaas niet makkelijk te visualiseren in SPSS. Het is handmatig wel mogelijk, maar het is niet aan te raden. Het is beter om hiervoor één van de andere programma’s te gebruiken. Online zijn ook nog tutorials te vinden hoe je dit in Excel zou kunnen doen, mocht je geen jamovi of R hebben.