Op deze pagina vind je een demonstratie van een statistische techniek aan de hand van een voorbeeld.
Meer informatie over hoe je deze pagina kan gebruiken vind je in deze handleiding.
De analyse gebeurt met behulp van R en RStudio. Een inleiding tot deze software vind je hier.
Referentie
Het voorbeeld op deze pagina is afkomstig van een studie van Vekeman, Devos, Valcke & Rosseel (2017). Er zijn lichte wijzigingen aangebracht om didactische redenen.
Padanalyse is een statistische techniek die je kan gebruiken om de onderliggende mechanismen bloot te leggen die een fenomeen kunnen verklaren.
Vekeman et al. (2017) probeerden onder meer te verklaren waarom leerkrachten de intentie hebben om het onderwijs te verlaten.
Anders dan bij lineaire regressie gaan we niet enkel op zoek naar het onafhankelijke effect van een reeks predictoren op een afhankelijke variabele. In padanalyse zijn we geïnteresseerd in een complexer systeem van variabelen. Kenmerkend is bijvoorbeeld dat er variabelen kunnen voorkomen die verklaard worden door andere variabelen, maar die zelf ook als verklaring fungeren van nog een andere variabele.
Over de terminologie die hoort bij padanalyse (bv. exogene en endogene variabelen, padcoëfficiënten), zie hier, in het bijzonder op slides 22 tot en met 27.
Vekeman et al. (2017) hadden een vermoeden van waarom leerkrachten de intentie hebben om het onderwijs te verlaten. Ze dachten dat een mediatie-effect en een moderatie-effect samen een goede verklaring zouden kunnen bieden voor het vertrek van leerkrachten.
De P-O fit (“hoe goed passen leerkracht en school bij elkaar?”) vormt een belangrijk deel van de verklaring. Deze fit zou een effect (a1) hebben op de jobtevredenheid, die op zijn beurt een effect (b1) zou hebben op de intentie om het onderwijs te verlaten. Dit deel van de verklaring zie je in onderstaande figuur. Er wordt natuurlijk ook rekening gehouden met een eventueel direct effect (c1) van POFit
op intentieVertrek
, dat dus niet via jobTevr
gaat.
Meer informatie over mediatie vind je hier.
De onderzoekers denken verder dat het effect van de jobtevredenheid op de intentie om het onderwijs te verlaten niet even groot is in alle omstandigheden. Specifiek gaan ze na of dit effect afhankelijk zou kunnen zijn (b3) van een andere variabele: de opties die leerkrachten denken te hebben om werk te vinden buiten het onderwijs (perceptieWerk
).
Het model met mediatie én moderatie zie je hieronder. Alle pijlen hebben opnieuw een label gekregen (a1, b1,…).
In dit model wordt jobtevredenheid (jobTevr
) verklaard door P-O fit (POFit
), maar tegelijk is jobtevredenheid zelf ook een verklaring voor de intentie om het onderwijs te verlaten (intentieVertrek
). Dit laatste hangt af van de opties voor ander werk (perceptieWerk
). Merk op dat het model ook een direct effect (b2) van perceptieWerk
op intentieVertrek
bevat. Zonder dat laatste bestaat de mogelijkheid dat we een verkeerde conclusie trekken over het moderatie-effect.
Meer informatie over moderatie (interactie) vind je hier vanaf p.61.
Ten slotte bevat het model nog een reeks controlevariabelen (niet getoond op de figuur hierboven). Deze worden opgenomen omdat ze mogelijk gerelateerd zijn aan andere variabelen in het model en dus conclusies zouden kunnen beïnvloeden. Je vindt ze in het overzicht hieronder.
Alle variabelen in deze demonstratie
intentieVertrek
: Intentie van leerkrachten om het onderwijs te verlaten
POFit
: “Person-Organisation fit”, de mate waarin een individu en organisatie bij elkaar passen
perceptieWerk
: “Perceived employability”, de mate waarin een leerkracht denkt buiten het onderwijs werk te kunnen vinden
jobTevr
: “Job satisfaction”, tevredenheid met de job
perceptieWerkXjobTevr
: product van perceptieWerk
en jobTevr
, om het interactie-effect te modelleren
GESL
: geslacht (controlevariabele)
LFTD
: leeftijd (controlevariabele)
JAARSCH
: jaren ervaring in de school (controlevariabele)
GOK
: sociaal-economische status van de school (controlevariabele)
Met een padanalysemodel kan je verschillende zaken proberen te achterhalen. Belangrijke doelen van de analyse zijn
De volgorde is hier belangrijk! Het heeft geen zin om conclusies te trekken over het al dan niet significant zijn van de afzonderlijke padcoëfficiënten in een model dat in zijn geheel niet goed fit met de data.
Voor de analyse van een padmodel kan je functies uit het lavaan
-package gebruiken.
install.packages("lavaan") # eenmalig installeren
library(lavaan) # bij de start van elke sessie
De dataset bevat gegevens van 284 variabelen geobserveerd bij 997 leerkrachten.
Deze dataset kan je inladen met read.csv()
. De data kan je best meteen in een object verloop
onderbrengen zodat je die later makkelijk opnieuw kan oproepen.
verloop <- read.csv('https://statlas.ugent.be/datasets/verloopLeerkrachten.csv')
Met str()
krijg je een opsomming van alle variabelen in de dataset. Je vindt er ook telkens bij om welk datatype het gaat. Afhankelijk van het datatype zal je sommige functies wel of juist niet kunnen gebruiken. Het heeft bijvoorbeeld geen zin om een gemiddelde te berekenen van een variabele van type chr
.
str(verloop)
In de output van str()
kan je zien dat er inderdaad 284 variabelen zijn met telkens 997 observaties.
Je kan het model fitten en alle parameters erin schatten in twee stappen.
Eerst leg je vast welke verbanden je model moet bevatten tussen welke variabelen. Die structuur stop je in een object. Vergeet de enkele aanhalingstekens '
vooraan en achteraan niet. In het model hieronder zijn verschillende soorten verbanden opgenomen, elk met een eigen syntax. Die zullen we een voor een bespreken.
Merk op dat hier een nieuwe variabele tussenstaat, namelijk perceptieWerkXjobTevr
. Die is het product van perceptieWerk
en jobTevr
. Dit product in het model opnemen als nieuwe variabele is een manier om het moderatie-effect te modelleren.
mijnModel <- '
# Directe effecten
intentieVertrek ~ c1*POFit
intentieVertrek ~ b2*perceptieWerk
intentieVertrek ~ b3*perceptieWerkXjobTevr
# Mediatie en controlevariabelen
jobTevr ~ a1*POFit + GOK + LFTD + JAARSCH + GESL
intentieVertrek ~ b1*jobTevr + GOK + LFTD + JAARSCH + GESL
# Conditioneel Indirect Effect van POFit op intentieVertrek
# voor bepaalde waarden van perceptieWerk.
# 1.02 is de standaarddeviatie van perceptieWerk.
CIE1 := a1*(b1+b3*-1.02)
CIE2 := a1*(b1+b3*0)
CIE3 := a1*(b1+b3*1.02)
# Direct en Indirect Effect van POFit op intentieVertrek
indirect := a1*b1
direct := c1
total := c1 + (a1*b1)
'
Directe effecten codeer je met de operator ~
.
De code hierboven is opgesplitst in drie lijnen. Het kan even goed in één lijn:
mijnModel <- '# Directe effecten
intentieVertrek ~ c1*POFit + b2*perceptieWerk + b3*perceptieWerkXjobTevr
'
c1
, b2
en b3
zijn labels. Die moeten enkel in je code staan als je er verderop indirecte effecten mee wil berekenen.
Een alternatieve manier om een moderatie-effect te specifiëren is door :
te gebruiken in je syntax.
mijnModel <- '# Directe effecten
intentieVertrek ~ c1*POFit + b2*perceptieWerk + b3*perceptieWerk:jobTevr
'
Meer informatie over moderatie (interactie) vind je hier vanaf p.61.
Je vermoedt dat er sprake is van mediatie. Het effect van POFit
op intentieVertrek
zou (eventueel gedeeltelijk) gemedieerd worden door jobTevr
.
Ook dit systeem van verbanden tussen variabelen codeer je als een verzameling directe effecten met ~
. Ook hier zijn labels toegevoegd om later indirecte effecten te berekenen.
Meer uitleg over mediatie vind je hier en een voorbeeld met lavaan vind je hier.
Bij een aantal directe effecten heb je labels (a1, b1,…) vastgelegd. De labels stellen schattingen van padcoëfficiënten voor. Aan de hand daarvan kan je nu ook indirecte effecten laten berekenen. Daarvoor vermenigvuldig je de padcoëfficiënten op een pad tussen twee variabelen.
Totale effecten berekenen kan ook. Die zijn niets anders dan de som van alle indirecte en directe effecten die te vinden zijn tussen twee variabelen.
Zulke berekeningen zie je op het einde van mijnModel
. Het effect dat je wil berekenen geef je een naam, gevolgd door de operator :=
met daarachter de gepaste formule met labels. Indirecte effecten die je op deze manier uitdrukkelijk laat berekenen zal je ook terugzien in de uiteindelijke output (zie verderop).
Let op: er is een moderatie-effect aanwezig in het model. Het effect van jobTevr
op intentieVertrek
kan dus verschillend zijn afhankelijk van perceptieWerk
. De syntax indirect := a1*b1
levert je een waarde op voor het indirecte effect, in de specifieke conditie dat perceptieWerk
de waarde 0 heeft. Het is met andere woorden een conditioneel indirect effect (en het is trouwens gelijk aan CIE2
wat hogerop).
In veel situaties is de conditie waarin een variabele de waarde 0 heeft onrealistisch of absurd.1 Ook hier is perceptieWerk
gelijk aan nul niet echt betekenisvol.
Om ervoor te zorgen dat dit indirect effect wel een weergave is van een realistische situatie gaat men de moderatorvariabele perceptieWerk
centreren. Dat zorgt ervoor dat de waarde 0 samenvalt met het gemiddelde van deze variabele. Dat heeft men in dit onderzoek inderdaad gedaan.
mean(verloop$perceptieWerk, na.rm=TRUE) # afgerond 0
[1] 6.202985e-16
Je kan nog een stap verder gaan en berekenen wat het indirect effect is bij andere waarden van de moderator perceptieWerk
(dus opnieuw “conditionele indirecte effecten”). Zo kies je er ook voor om het effect te berekenen wanneer perceptieWerk
één standaarddeviatie onder en boven het gemiddelde ligt (respectievelijk CIE1
en CIE3
).
sd(verloop$perceptieWerk, na.rm=TRUE) # afgerond 1.02
[1] 1.019214
In een tweede stap schat je alle parameters van het model met de functie sem()
. Deze functie heeft de specificatie van het model nodig (object mijnModel
) en de data.2
fit <- sem(mijnModel, data = verloop, se = 'bootstrap')
In de code zie je een extra argument se = 'bootstrap'
. Dit slaat op de methode om de standaardfouten (“standard error”) van parameters te berekenen. Wanneer je bv. een indirect effect schat, dan is de parameter een product van twee andere parameters en dus typisch niet normaal verdeeld over vele steekproeven heen. Met de “gewone” methode van standaardfouten berekenen kan dit tot verkeerde conclusies leiden over de significantie van het indirect effect. Daarom is het aangeraden om se = 'bootstrap'
te kiezen.
Om de resultaten te zien gebruik je de functie summary()
. Het object fit
kan uiteraard niet ontbreken. Met de argumenten kan je verder bepalen wat je precies in de output wil zien. (De output wordt besproken in paragraaf 5.)
summary(fit, fit.measures = TRUE, standardized = TRUE, rsquare = TRUE)
Enkele keuzes die je kan maken bij de summary()
-functie zijn:
fit.measures = TRUE
Indien fit.measures = FALSE
- wat standaard het geval is - wordt enkel een \(\chi^2\)-toets uitgevoerd als maat voor de fit van het model. Deze toets is niet altijd voldoende om de model fit te beoordelen, zeker bij hele grote steekproeven.
Het is aangeraden om bijkomende fitmaten te laten berekenen en te rapporteren in je publicatie, zoals CFI/TLI, RMSEA en SRMR. Al deze fitmaten zijn op een verschillende manier gevoelig voor misspecificatie van het model. Voeg deze fitmaten toe door eenvoudigweg het argument fit.measures = TRUE
te gebruiken. De lezer van je onderzoek kan zo zelf ook een oordeel vellen.
Meer uitgebreide uitleg over deze fitmaten vind je in:
Kline, R. B. (2015). Principles and practice of structural equation modeling (Fourth Edition). New York: Guilford Press.
standardized = TRUE
Het is niet zomaar mogelijk om de padcoëfficiënten onderling te vergelijken en om uitspraken te doen over welke groter of kleiner is. Dat komt omdat de getalwaarde ervan afhangt van de meeteenheid van de variabelen. Met het argument standardized = TRUE
krijg je een extra kolom Std.all
met schattingen voor gestandaardiseerde padcoëfficiënten. Wanneer er nu twee pijlen in eenzelfde variabele toekomen, zoals bij intentieVertrek
, kan je wel de grootte van de verschillende effecten vergelijken.
rsquare = TRUE
Met dit argument kan je een schatting van de proportie verklaarde variantie (m.a.w. de determinatiecoëfficiënt \(R^2\)) van elke endogene variabele laten berekenen.
Wat kan je leren uit de output van summary(fit, fit.measures = TRUE, standardized = TRUE, rsquare = TRUE)
?
Toon/verberg de output van
summary()
lavaan 0.6-10 ended normally after 2 iterations
Estimator ML
Optimization method NLMINB
Number of model parameters 15
Used Total
Number of observations 982 997
Model Test User Model:
Test statistic 17.881
Degrees of freedom 2
P-value (Chi-square) 0.000
Model Test Baseline Model:
Test statistic 366.528
Degrees of freedom 15
P-value 0.000
User Model versus Baseline Model:
Comparative Fit Index (CFI) 0.955
Tucker-Lewis Index (TLI) 0.661
Loglikelihood and Information Criteria:
Loglikelihood user model (H0) -1915.509
Loglikelihood unrestricted model (H1) -1906.568
Akaike (AIC) 3861.017
Bayesian (BIC) 3934.361
Sample-size adjusted Bayesian (BIC) 3886.721
Root Mean Square Error of Approximation:
RMSEA 0.090
90 Percent confidence interval - lower 0.055
90 Percent confidence interval - upper 0.130
P-value RMSEA <= 0.05 0.032
Standardized Root Mean Square Residual:
SRMR 0.021
Parameter Estimates:
Standard errors Bootstrap
Number of requested bootstrap draws 1000
Number of successful bootstrap draws 1000
Regressions:
Estimate Std.Err z-value P(>|z|) Std.lv Std.all
intentieVertrek ~
POFit (c1) 0.080 0.085 0.934 0.350 0.080 0.030
percptWrk (b2) 0.074 0.022 3.353 0.001 0.074 0.100
prcptWrXT (b3) -0.082 0.039 -2.108 0.035 -0.082 -0.080
jobTevr ~
POFit (a1) 0.581 0.072 8.075 0.000 0.581 0.251
GOK -0.031 0.040 -0.771 0.441 -0.031 -0.023
LFTD -0.004 0.003 -1.221 0.222 -0.004 -0.060
JAARSCH 0.000 0.003 0.058 0.954 0.000 0.003
GESL -0.095 0.069 -1.363 0.173 -0.095 -0.046
intentieVertrek ~
jobTevr (b1) -0.529 0.042 -12.490 0.000 -0.529 -0.459
GOK -0.014 0.044 -0.322 0.748 -0.014 -0.009
LFTD 0.001 0.004 0.307 0.759 0.001 0.015
JAARSCH 0.004 0.004 1.087 0.277 0.004 0.055
GESL 0.139 0.082 1.700 0.089 0.139 0.059
Variances:
Estimate Std.Err z-value P(>|z|) Std.lv Std.all
.intentieVertrk 0.431 0.029 14.629 0.000 0.431 0.764
.jobTevr 0.394 0.021 18.369 0.000 0.394 0.929
R-Square:
Estimate
intentieVertrk 0.236
jobTevr 0.071
Defined Parameters:
Estimate Std.Err z-value P(>|z|) Std.lv Std.all
CIE1 -0.259 0.044 -5.853 0.000 -0.259 -0.095
CIE2 -0.308 0.045 -6.792 0.000 -0.308 -0.115
CIE3 -0.356 0.057 -6.222 0.000 -0.356 -0.135
indirect -0.308 0.045 -6.792 0.000 -0.308 -0.115
direct 0.080 0.086 0.934 0.350 0.080 0.030
total -0.228 0.084 -2.704 0.007 -0.228 -0.085
Of het model in zijn geheel goed fit met de data kan je achterhalen met behulp van de verschillende fitmaten.
Let op! De \(\chi^2\)-toets onder Model Test User Model
interpreteren is hier anders dan je misschien intuïtief zou denken. Hier stelt de nulhypothese dat er een goede fit is. Dus als je hier een p-waarde kleiner dan 0.05 ziet, dan is de conclusie dat je de nulhypothese van goede fit moet verwerpen.
fit.measures = TRUE
heb je naast de \(\chi^2\)-toets nog andere fitmaten opgevraagd. Vuistregels voor deze fitmaten zijn dat er een goede fit is als …
In ons voorbeeld is de fit over het algemeen niet erg goed. Verschillende fitmaten wijzen op een slechte fit. Enkel de SRMR en CFI lijken aan te geven dat er een goede fit is.
In principe betekent dit dat je niet verder kan gaan met de analyse van de afzonderlijke padcoëfficiënten. Je zou eerst op zoeken moeten naar een beter fittend model. Om de demonstratie verder te kunnen zetten zullen we er nu van uitgaan dat er wél een goede fit is.
Als de fit van je model niet goed is, kan je eventueel de functie modificationIndices()
gebruiken om suggesties te krijgen voor verbeteringen. In de kolom mi
lees je welke bijkomende parameters een substantiële impact zouden hebben op de fit.3
modificationIndices(fit,
sort=TRUE, # Sorteer van grootste naar kleinste effect op de model fit
maximum.number=5L # Toon enkel de eerste vijf
)
Toon/verberg de output van
modificationIndices()
lhs op rhs mi epc sepc.lv sepc.all sepc.nox
54 POFit ~ intentieVertrek 25.869 2.517 2.517 6.730 6.730
78 GOK ~ intentieVertrek 17.426 -3.186 -3.186 -4.864 -4.864
53 jobTevr ~ perceptieWerkXjobTevr 16.720 0.112 0.112 0.127 0.173
79 GOK ~ jobTevr 15.152 1.466 1.466 1.941 1.941
55 POFit ~ jobTevr 15.113 -0.778 -0.778 -1.804 -1.804
Verschillende padcoëfficiënten blijken significant te verschillen van nul.
Dat is het geval voor onder meer
POFit
op jobTevr
(label a1)
jobTevr
op intentieVertrek
(label b1)
perceptieWerk
op de relatie tussen jobTevr
en intentieVertrek
(label b3)
Toon/verberg het model met labels
Je kan ook schattingen aflezen voor de indirecte effecten die uitdrukkelijk in mijnModel
werden gespecifieerd, bijvoorbeeld indirect
(het product van de directe effecten met labels a1 en b1). Om te bepalen of een indirect effect significant verschillend is van nul kan je geen beroep doen op de toets die wordt uitgevoerd in de output van summary()
. Daarvoor kijk je beter naar het (bootstrap-gebaseerde) betrouwbaarheidsinterval. Dit betrouwbaarheidsinterval kan je opvragen met de functie parameterEstimates()
. In dit geval blijkt bijvoorbeeld dat 0 niet in het interval ligt bij indirect
(lijn 47), dus kan je concluderen dat het effect significant verschillend is van 0.
parameterEstimates(fit)
Toon/verberg de output van
parameterEstimates()
lhs op rhs label est se z pvalue ci.lower ci.upper
1 intentieVertrek ~ POFit c1 0.080 0.085 0.934 0.350 -0.097 0.241
2 intentieVertrek ~ perceptieWerk b2 0.074 0.022 3.353 0.001 0.031 0.119
3 intentieVertrek ~ perceptieWerkXjobTevr b3 -0.082 0.039 -2.108 0.035 -0.156 -0.005
4 jobTevr ~ POFit a1 0.581 0.072 8.075 0.000 0.440 0.720
5 jobTevr ~ GOK -0.031 0.040 -0.771 0.441 -0.109 0.046
6 jobTevr ~ LFTD -0.004 0.003 -1.221 0.222 -0.010 0.002
7 jobTevr ~ JAARSCH 0.000 0.003 0.058 0.954 -0.007 0.007
8 jobTevr ~ GESL -0.095 0.069 -1.363 0.173 -0.240 0.041
9 intentieVertrek ~ jobTevr b1 -0.529 0.042 -12.490 0.000 -0.614 -0.445
10 intentieVertrek ~ GOK -0.014 0.044 -0.322 0.748 -0.094 0.070
11 intentieVertrek ~ LFTD 0.001 0.004 0.307 0.759 -0.006 0.008
12 intentieVertrek ~ JAARSCH 0.004 0.004 1.087 0.277 -0.003 0.013
13 intentieVertrek ~ GESL 0.139 0.082 1.700 0.089 -0.005 0.310
14 intentieVertrek ~~ intentieVertrek 0.431 0.029 14.629 0.000 0.370 0.486
15 jobTevr ~~ jobTevr 0.394 0.021 18.369 0.000 0.350 0.436
16 POFit ~~ POFit 0.079 0.000 NA NA 0.079 0.079
17 POFit ~~ perceptieWerk -0.001 0.000 NA NA -0.001 -0.001
18 POFit ~~ perceptieWerkXjobTevr 0.015 0.000 NA NA 0.015 0.015
19 POFit ~~ GOK -0.017 0.000 NA NA -0.017 -0.017
20 POFit ~~ LFTD 0.015 0.000 NA NA 0.015 0.015
21 POFit ~~ JAARSCH -0.149 0.000 NA NA -0.149 -0.149
22 POFit ~~ GESL -0.003 0.000 NA NA -0.003 -0.003
23 perceptieWerk ~~ perceptieWerk 1.036 0.000 NA NA 1.036 1.036
24 perceptieWerk ~~ perceptieWerkXjobTevr 0.025 0.000 NA NA 0.025 0.025
25 perceptieWerk ~~ GOK 0.012 0.000 NA NA 0.012 0.012
26 perceptieWerk ~~ LFTD -1.578 0.000 NA NA -1.578 -1.578
27 perceptieWerk ~~ JAARSCH -1.564 0.000 NA NA -1.564 -1.564
28 perceptieWerk ~~ GESL 0.025 0.000 NA NA 0.025 0.025
29 perceptieWerkXjobTevr ~~ perceptieWerkXjobTevr 0.538 0.000 NA NA 0.538 0.538
30 perceptieWerkXjobTevr ~~ GOK -0.024 0.000 NA NA -0.024 -0.024
31 perceptieWerkXjobTevr ~~ LFTD -0.436 0.000 NA NA -0.436 -0.436
32 perceptieWerkXjobTevr ~~ JAARSCH -0.388 0.000 NA NA -0.388 -0.388
33 perceptieWerkXjobTevr ~~ GESL -0.008 0.000 NA NA -0.008 -0.008
34 GOK ~~ GOK 0.242 0.000 NA NA 0.242 0.242
35 GOK ~~ LFTD -0.369 0.000 NA NA -0.369 -0.369
36 GOK ~~ JAARSCH -0.246 0.000 NA NA -0.246 -0.246
37 GOK ~~ GESL 0.008 0.000 NA NA 0.008 0.008
38 LFTD ~~ LFTD 100.755 0.000 NA NA 100.755 100.755
39 LFTD ~~ JAARSCH 74.385 0.000 NA NA 74.385 74.385
40 LFTD ~~ GESL 0.356 0.000 NA NA 0.356 0.356
41 JAARSCH ~~ JAARSCH 86.336 0.000 NA NA 86.336 86.336
42 JAARSCH ~~ GESL 0.211 0.000 NA NA 0.211 0.211
43 GESL ~~ GESL 0.101 0.000 NA NA 0.101 0.101
44 CIE1 := a1*(b1+b3*-1.02) CIE1 -0.259 0.044 -5.853 0.000 -0.352 -0.172
45 CIE2 := a1*(b1+b3*0) CIE2 -0.308 0.045 -6.792 0.000 -0.399 -0.221
46 CIE3 := a1*(b1+b3*1.02) CIE3 -0.356 0.057 -6.222 0.000 -0.469 -0.248
47 indirect := a1*b1 indirect -0.308 0.045 -6.792 0.000 -0.399 -0.221
48 direct := c1 direct 0.080 0.086 0.934 0.350 -0.097 0.241
49 total := c1+(a1*b1) total -0.228 0.084 -2.704 0.007 -0.390 -0.065
De padcoëfficiënten moet je interpreteren zoals regressiecoëfficiënten in lineaire regressie. Het is het verschil dat we verwachten te zien in de verklaarde variabele wanneer de verklarende variabele één eenheid hoger is.
Wees dus voorzichtig en grijp niet te snel naar causale interpretaties. Als de richtingen van alle effecten correct gespecifieerd zijn en er geen gemeenschappelijke oorzaken ontbreken in het model, dan kan dit effect mogelijk causaal geïnterpreteerd worden. Voorzichtigheid blijft altijd geboden!
Met het package lavaanPlot
kan je een padanalysemodel visueel weergeven.
install.packages("lavaanPlot") # eenmalig het package installeren
library(lavaanPlot) # package laden voor gebruik
lavaanPlot(model = fit,
node_options = list(shape = "box", fontname = "Helvetica"),
edge_options = list(color = "grey"),
coefs = TRUE,
sig=.05 # toon enkel significante coëfficiënten
)
Toon/verberg de plot
Een alternatief is het package semPlot
.
install.packages('semPlot') # eenmalig het package installeren
library(semPlot) # package laden voor gebruik
semPaths(fit, layout='circle')
Toon/verberg de plot
Vekeman E., Devos G., Valcke M. & Rosseel Y. (2017). Do teachers leave the profession or move to another school when they don’t fit? Educational Review 69 (4), 411-434. doi: 10.1080/00131911.2016.1228610