set.seed(42)
# path a strength
a=.3
# path b strength
b=.3
# path c' strength
cp=.2
# people
n <- 300
# Normal distribution of time (mins)
X <- rnorm(n, 5, 2)
# Moderator
Mod<-runif(n, 0, 6)
# Mediator
M <- a*X*Mod+rnorm(n, 0, 3)
# Our equation to create Y
Y <- cp*X*Mod + b*M + M*Mod + rnorm(n, sd=7)
#Built our data frame
Marshmallow.Mod<-data.frame(Success=Y,Time=X,Trust=M,Parents=Mod)
str(Marshmallow.Mod)
'data.frame': 300 obs. of 4 variables:
$ Success: num 3.34 -9.9 45.18 8.21 7.01 ...
$ Time : num 7.74 3.87 5.73 6.27 5.81 ...
$ Trust : num 3.03 1.22 8.52 2.22 5.7 ...
$ Parents: num 2.99 1.7 4.66 1.82 3.09 ...
library(processR)
library(lavaan)
labels=list(X="Time",M="Trust",Y="Success",W="Parents")
pmacroModel(59,labels=labels)
statisticalDiagram(59,labels=labels)
moderator=list(name="Parents",site=list(c("a","b","c")))
equations=tripleEquation(labels=labels,moderator=moderator,mode=1)
cat(equations)
Trust~Time+Parents+Time:Parents
Success~Trust+Parents+Trust:Parents+Time+Parents+Time:Parents
fit=eq2fit(equations,data=Marshmallow.Mod)
modelsSummaryTable(fit,labels=labels)
Consequent | |||||||||
M(Trust) | Y(Success) | ||||||||
Antecedent | Coef | SE | t | p | Coef | SE | t | p | |
X(Time) | 0.060 | 0.184 | 0.328 | .743 | 0.092 | 0.494 | 0.186 | .852 | |
W(Parents) | -0.122 | 0.296 | -0.413 | .680 | 0.523 | 0.744 | 0.702 | .483 | |
X:W(Time:Parents) | 0.319 | 0.056 | 5.738 | <.001 | |||||
M(Trust) | 0.222 | 0.277 | 0.801 | .424 | |||||
M:W(Trust:Parents) | 1.028 | 0.079 | 13.050 | <.001 | |||||
W:X(Parents:Time) | 0.100 | 0.167 | 0.597 | .551 | |||||
Constant | -0.430 | 0.958 | -0.449 | .654 | -0.752 | 2.413 | -0.312 | .755 | |
Observations | 300 | 300 | |||||||
R2 | 0.568 | 0.914 | |||||||
Adjusted R2 | 0.564 | 0.913 | |||||||
Residual SE | 3.004 ( df = 296) | 7.549 ( df = 294) | |||||||
F statistic | F(3,296) = 129.919, p < .001 | F(5,294) = 626.344, p < .001 |
model=tripleEquation(labels=labels,moderator=moderator)
cat(model)
Trust~a1*Time+a2*Parents+a3*Time:Parents
Success~b1*Trust+b2*Parents+b3*Trust:Parents+c1*Time+c2*Parents+c3*Time:Parents
Parents ~ Parents.mean*1
Parents ~~ Parents.var*Parents
indirect :=(a1+a3*Parents.mean)*(b1+b3*Parents.mean)
direct :=c1+c3*Parents.mean
total := direct + indirect
prop.mediated := indirect / total
indirect.below :=(a1+a3*(Parents.mean-sqrt(Parents.var)))*(b1+b3*(Parents.mean-sqrt(Parents.var)))
indirect.above :=(a1+a3*(Parents.mean+sqrt(Parents.var)))*(b1+b3*(Parents.mean+sqrt(Parents.var)))
direct.below:=c1+c3*(Parents.mean-sqrt(Parents.var))
direct.above:=c1+c3*(Parents.mean+sqrt(Parents.var))
total.below := direct.below + indirect.below
total.above := direct.above + indirect.above
prop.mediated.below := indirect.below / total.below
prop.mediated.above := indirect.above / total.above
semfit=sem(model=model,data=Marshmallow.Mod,se="boot",bootstrap=200)
summary(semfit,ci=TRUE)
lavaan 0.6-3 ended normally after 58 iterations
Optimization method NLMINB
Number of free parameters 23
Number of observations 300
Estimator ML
Model Fit Test Statistic 1023.150
Degrees of freedom 4
P-value (Chi-square) 0.000
Parameter Estimates:
Standard Errors Bootstrap
Number of requested bootstrap draws 200
Number of successful bootstrap draws 200
Regressions:
Estimate Std.Err z-value P(>|z|) ci.lower ci.upper
Trust ~
Time (a1) 0.060 0.168 0.359 0.720 -0.302 0.406
Parents (a2) -0.122 0.269 -0.455 0.649 -0.671 0.372
Tim:Prnts (a3) 0.319 0.051 6.220 0.000 0.219 0.420
Success ~
Trust (b1) 0.222 0.276 0.806 0.420 -0.413 0.763
Parents (b2) 0.523 0.737 0.709 0.479 -0.786 2.108
Trst:Prnt (b3) 1.028 0.077 13.365 0.000 0.870 1.201
Time (c1) 0.092 0.589 0.156 0.876 -1.120 1.368
Tim:Prnts (c3) 0.100 0.182 0.551 0.581 -0.257 0.480
Covariances:
Estimate Std.Err z-value P(>|z|) ci.lower ci.upper
Time ~~
Time:Parents 12.535 1.370 9.153 0.000 9.841 15.335
Trust:Parents 16.526 2.527 6.539 0.000 11.593 21.562
Time:Parents ~~
Trust:Parents 200.557 16.727 11.990 0.000 169.666 238.572
Intercepts:
Estimate Std.Err z-value P(>|z|) ci.lower ci.upper
Parents (Prn.) 2.987 0.104 28.809 0.000 2.804 3.203
.Trust -0.430 0.892 -0.482 0.630 -2.168 1.461
.Success -0.752 2.699 -0.279 0.780 -6.682 4.637
Time 4.956 0.100 49.579 0.000 4.746 5.154
Tm:Prnt 15.059 0.620 24.284 0.000 13.892 16.512
Trst:Pr 17.359 1.203 14.436 0.000 15.054 19.773
Variances:
Estimate Std.Err z-value P(>|z|) ci.lower ci.upper
Parents (Prn.) 2.884 0.143 20.096 0.000 2.597 3.137
.Trust 8.906 0.679 13.118 0.000 7.476 10.191
.Success 55.849 4.657 11.993 0.000 46.316 64.079
Time 3.886 0.347 11.183 0.000 3.305 4.642
Tm:Prnt 121.480 8.642 14.058 0.000 107.237 142.084
Trst:Pr 448.494 39.953 11.225 0.000 365.429 546.664
Defined Parameters:
Estimate Std.Err z-value P(>|z|) ci.lower ci.upper
indirect 3.336 0.408 8.173 0.000 2.617 4.283
direct 0.391 0.308 1.267 0.205 -0.306 0.949
total 3.726 0.419 8.899 0.000 2.877 4.708
prop.mediated 0.895 0.080 11.138 0.000 0.748 1.093
indirect.below 0.729 0.243 3.000 0.003 0.311 1.311
indirect.above 7.833 0.761 10.293 0.000 6.185 9.583
direct.below 0.221 0.408 0.541 0.588 -0.714 1.018
direct.above 0.561 0.461 1.215 0.224 -0.363 1.467
total.below 0.950 0.397 2.391 0.017 0.212 1.715
total.above 8.394 0.788 10.648 0.000 6.696 9.882
prop.medtd.blw 0.768 1.320 0.581 0.561 0.310 3.678
prop.meditd.bv 0.933 0.053 17.607 0.000 0.834 1.048
statisticalDiagram(59,labels=labels,fit=semfit,whatLabel = "est")
estimatesTable2(semfit,vanilla=TRUE)
Variables | Predictors | B | SE | z | p | β |
Trust | Time | 0.06 | 0.17 | 0.36 | 0.720 | 0.03 |
Trust | Parents | -0.12 | 0.27 | -0.45 | 0.649 | -0.04 |
Trust | Time:Parents | 0.32 | 0.05 | 6.22 | < 0.001 | 0.75 |
Success | Trust | 0.22 | 0.28 | 0.81 | 0.420 | 0.04 |
Success | Parents | 0.52 | 0.74 | 0.71 | 0.479 | 0.04 |
Success | Trust:Parents | 1.03 | 0.08 | 13.37 | < 0.001 | 0.88 |
Success | Time | 0.09 | 0.59 | 0.16 | 0.876 | 0.01 |
Success | Time:Parents | 0.10 | 0.18 | 0.55 | 0.581 | 0.04 |
corTable2(semfit)
rowname | Trust | Success | Time | Parents | Time.Parents | Trust.Parents |
Trust | 1 | |||||
Success | 0.88*** | 1 | ||||
Time | 0.47*** | 0.39*** | 1 | |||
Parents | 0.58*** | 0.73*** | 0.08 | 1 | ||
Time.Parents | 0.75*** | 0.84*** | 0.58*** | 0.81*** | 1 | |
Trust.Parents | 0.92*** | 0.95*** | 0.40*** | 0.74*** | 0.86*** | 1 |
corPlot(semfit)
medSummaryTable(semfit)
Effect | Equation | estimate | 95% Bootstrap CI | p |
indirect | (a1+a3*Parents.mean)*(b1+b3*Parents.mean) | 3.336 | (2.616 to 4.276) | <.001 |
direct | c1+c3*Parents.mean | 0.391 | (-0.309 to 0.899) | .205 |
total | direct+indirect | 3.726 | (2.748 to 4.449) | <.001 |
prop.mediated | indirect/total | 0.895 | (0.782 to 1.097) | <.001 |
indirect.below | (a1+a3*(Parents.mean-sqrt(Parents.var)))*(b1+b3*(Parents.mean-sqrt(Parents.var))) | 0.729 | (0.336 to 1.317) | .003 |
indirect.above | (a1+a3*(Parents.mean+sqrt(Parents.var)))*(b1+b3*(Parents.mean+sqrt(Parents.var))) | 7.833 | (6.067 to 9.384) | <.001 |
direct.below | c1+c3*(Parents.mean-sqrt(Parents.var)) | 0.221 | (-0.729 to 0.965) | .588 |
direct.above | c1+c3*(Parents.mean+sqrt(Parents.var)) | 0.561 | (-0.254 to 1.655) | .224 |
total.below | direct.below+indirect.below | 0.950 | (0.131 to 1.601) | .017 |
total.above | direct.above+indirect.above | 8.394 | (6.654 to 9.806) | <.001 |
prop.mediated.below | indirect.below/total.below | 0.768 | (0.319 to 4.302) | .561 |
prop.mediated.above | indirect.above/total.above | 0.933 | (0.822 to 1.031) | <.001 |
boot.ci.type = bca.simple |
modmedSummaryTable(semfit,mod="Parents")
Indirect Effect | Direct Effect | ||||||
Parents(W) | estimate | 95% Bootstrap CI | p | estimate | 95% Bootstrap CI | p | |
1.289 | 0.729 | (0.336 to 1.317) | .003 | 0.221 | (-0.729 to 0.965) | .588 | |
2.987 | 3.336 | (2.616 to 4.276) | <.001 | 0.391 | (-0.309 to 0.899) | .205 | |
4.685 | 7.833 | (6.067 to 9.384) | <.001 | 0.561 | (-0.254 to 1.655) | .224 | |
boot.ci.type = bca.simple |
conditionalEffectPlot(semfit,data=Marshmallow.Mod,mod="Parents")