This vignette shows examples of multilevel random slopes and intercept models, with both continuous and ordinal data.
slopes_model <- "
X =~ x1 + x2 + x3
Z =~ z1 + z2 + z3
Y =~ y1 + y2 + y3
W =~ w1 + w2 + w3
Y ~ X + Z + (1 + X + Z | cluster)
W ~ X + Z + (1 + X + Z | cluster)
"fit_slopes_cont <- pls(
slopes_model,
data = randomSlopes,
bootstrap = TRUE,
boot.R = 50
)
summary(fit_slopes_cont)
#> plssem (0.1.1) ended normally after 3 iterations
#>
#> Estimator PLSc-MLM
#> Link PROBIT
#>
#> Number of observations 5000
#> Number of iterations 3
#> Number of latent variables 4
#> Number of observed variables 18
#>
#> Fit Measures:
#> Chi-Square 127.210
#> Degrees of Freedom 49
#> SRMR 0.008
#> RMSEA 0.018
#>
#> R-squared (indicators):
#> x1 0.860
#> x2 0.683
#> x3 0.772
#> z1 0.839
#> z2 0.694
#> z3 0.759
#> y1 0.838
#> y2 0.726
#> y3 0.750
#> w1 0.840
#> w2 0.695
#> w3 0.771
#>
#> R-squared (latents):
#> Y 0.542
#> W 0.553
#>
#> Latent Variables:
#> Estimate Std.Error z.value P(>|z|)
#> X =~
#> x1 0.927 0.010 96.515 0.000
#> x2 0.826 0.010 79.841 0.000
#> x3 0.879 0.007 118.521 0.000
#> Z =~
#> z1 0.916 0.009 106.571 0.000
#> z2 0.833 0.011 74.956 0.000
#> z3 0.871 0.009 97.399 0.000
#> Y =~
#> y1 0.915 0.009 105.080 0.000
#> y2 0.852 0.013 65.547 0.000
#> y3 0.866 0.013 67.926 0.000
#> W =~
#> w1 0.916 0.011 84.423 0.000
#> w2 0.834 0.013 62.526 0.000
#> w3 0.878 0.011 83.457 0.000
#>
#> Regressions:
#> Estimate Std.Error z.value P(>|z|)
#> Y ~
#> X 0.293 0.022 13.346 0.000
#> Z 0.444 0.041 10.747 0.000
#> W ~
#> X 0.393 0.030 13.077 0.000
#> Z 0.248 0.054 4.591 0.000
#>
#> Intercepts:
#> Estimate Std.Error z.value P(>|z|)
#> .Y 0.010 0.005 2.149 0.032
#> .W 0.010 0.008 1.312 0.190
#>
#> Covariances:
#> Estimate Std.Error z.value P(>|z|)
#> X ~~
#> Z 0.175 0.013 13.799 0.000
#> Y~X ~~
#> Y~1 -0.004 0.005 -0.707 0.480
#> Y~Z ~~
#> Y~1 -0.025 0.011 -2.337 0.019
#> Y~X 0.012 0.009 1.413 0.158
#> W~X ~~
#> W~1 0.003 0.012 0.263 0.793
#> W~Z ~~
#> W~1 0.009 0.014 0.645 0.519
#> W~X 0.013 0.012 1.120 0.263
#>
#> Variances:
#> Estimate Std.Error z.value P(>|z|)
#> X 1.000
#> Z 1.000
#> .Y 0.458 0.028 16.444 0.000
#> .W 0.447 0.031 14.645 0.000
#> .x1 0.140 0.018 7.836 0.000
#> .x2 0.317 0.017 18.641 0.000
#> .x3 0.228 0.013 17.494 0.000
#> .z1 0.161 0.016 10.218 0.000
#> .z2 0.306 0.019 16.521 0.000
#> .z3 0.241 0.016 15.538 0.000
#> .y1 0.162 0.016 10.185 0.000
#> .y2 0.274 0.022 12.375 0.000
#> .y3 0.250 0.022 11.442 0.000
#> .w1 0.160 0.020 8.065 0.000
#> .w2 0.305 0.022 13.799 0.000
#> .w3 0.229 0.018 12.426 0.000
#> Y~1 0.086 0.021 4.087 0.000
#> Y~X 0.018 0.007 2.747 0.006
#> Y~Z 0.105 0.015 6.773 0.000
#> W~1 0.059 0.012 4.977 0.000
#> W~X 0.095 0.014 6.676 0.000
#> W~Z 0.144 0.027 5.270 0.000fit_slopes_ord <- pls(
slopes_model,
data = randomSlopesOrdered,
bootstrap = TRUE,
boot.R = 50,
ordered = colnames(randomSlopesOrdered) # explicitly specify variables as ordered
)
summary(fit_slopes_ord)
#> plssem (0.1.1) ended normally after 3 iterations
#>
#> Estimator OrdPLSc-MLM
#> Link PROBIT
#>
#> Number of observations 5000
#> Number of iterations 3
#> Number of latent variables 4
#> Number of observed variables 18
#>
#> Fit Measures:
#> Chi-Square 263.372
#> Degrees of Freedom 49
#> SRMR 0.010
#> RMSEA 0.030
#>
#> R-squared (indicators):
#> x1 0.870
#> x2 0.669
#> x3 0.789
#> z1 0.841
#> z2 0.714
#> z3 0.758
#> y1 0.844
#> y2 0.711
#> y3 0.754
#> w1 0.835
#> w2 0.681
#> w3 0.785
#>
#> R-squared (latents):
#> Y 0.539
#> W 0.550
#>
#> Latent Variables:
#> Estimate Std.Error z.value P(>|z|)
#> X =~
#> x1 0.933 0.013 74.052 0.000
#> x2 0.818 0.011 74.996 0.000
#> x3 0.888 0.011 83.460 0.000
#> Z =~
#> z1 0.917 0.013 72.433 0.000
#> z2 0.845 0.012 72.353 0.000
#> z3 0.871 0.013 67.845 0.000
#> Y =~
#> y1 0.918 0.011 80.060 0.000
#> y2 0.843 0.013 65.426 0.000
#> y3 0.869 0.014 63.020 0.000
#> W =~
#> w1 0.914 0.015 62.284 0.000
#> w2 0.825 0.019 43.446 0.000
#> w3 0.886 0.014 63.524 0.000
#>
#> Regressions:
#> Estimate Std.Error z.value P(>|z|)
#> Y ~
#> X 0.290 0.020 14.553 0.000
#> Z 0.451 0.032 13.963 0.000
#> W ~
#> X 0.391 0.042 9.281 0.000
#> Z 0.245 0.061 4.008 0.000
#>
#> Intercepts:
#> Estimate Std.Error z.value P(>|z|)
#> .Y 0.011 0.005 2.500 0.012
#> .W 0.009 0.007 1.370 0.171
#>
#> Covariances:
#> Estimate Std.Error z.value P(>|z|)
#> X ~~
#> Z 0.168 0.012 13.759 0.000
#> Y~X ~~
#> Y~1 -0.007 0.004 -1.526 0.127
#> Y~Z ~~
#> Y~1 -0.025 0.013 -1.902 0.057
#> Y~X 0.012 0.010 1.277 0.202
#> W~X ~~
#> W~1 0.004 0.010 0.392 0.695
#> W~Z ~~
#> W~1 0.010 0.014 0.697 0.486
#> W~X 0.016 0.009 1.803 0.071
#>
#> Variances:
#> Estimate Std.Error z.value P(>|z|)
#> X 1.000
#> Z 1.000
#> .Y 0.461 0.025 18.742 0.000
#> .W 0.450 0.040 11.276 0.000
#> .x1 0.130 0.023 5.590 0.000
#> .x2 0.331 0.018 18.508 0.000
#> .x3 0.211 0.019 11.156 0.000
#> .z1 0.159 0.023 6.800 0.000
#> .z2 0.286 0.020 14.542 0.000
#> .z3 0.242 0.022 10.839 0.000
#> .y1 0.156 0.021 7.436 0.000
#> .y2 0.289 0.022 13.316 0.000
#> .y3 0.246 0.024 10.263 0.000
#> .w1 0.165 0.027 6.208 0.000
#> .w2 0.319 0.031 10.240 0.000
#> .w3 0.215 0.025 8.708 0.000
#> Y~1 0.084 0.023 3.693 0.000
#> Y~X 0.018 0.005 3.806 0.000
#> Y~Z 0.101 0.015 6.807 0.000
#> W~1 0.058 0.012 4.732 0.000
#> W~X 0.099 0.016 6.375 0.000
#> W~Z 0.142 0.026 5.494 0.000intercepts_model <- '
f =~ y1 + y2 + y3
f ~ x1 + x2 + x3 + w1 + w2 + (1 | cluster)
'fit_intercepts_cont <- pls(
intercepts_model,
data = randomIntercepts,
bootstrap = TRUE,
boot.R = 50
)
summary(fit_intercepts_cont)
#> plssem (0.1.1) ended normally after 2 iterations
#>
#> Estimator PLSc-MLM
#> Link PROBIT
#>
#> Number of observations 10000
#> Number of iterations 2
#> Number of latent variables 1
#> Number of observed variables 9
#>
#> Fit Measures:
#> Chi-Square 24.372
#> Degrees of Freedom 10
#> SRMR 0.003
#> RMSEA 0.012
#>
#> R-squared (indicators):
#> y1 0.891
#> y2 0.785
#> y3 0.814
#>
#> R-squared (latents):
#> f 0.744
#>
#> Latent Variables:
#> Estimate Std.Error z.value P(>|z|)
#> f =~
#> y1 0.944 0.009 99.515 0.000
#> y2 0.886 0.009 98.843 0.000
#> y3 0.902 0.009 95.623 0.000
#>
#> Regressions:
#> Estimate Std.Error z.value P(>|z|)
#> f ~
#> x1 0.238 0.008 28.898 0.000
#> x2 0.162 0.007 23.392 0.000
#> x3 0.077 0.006 13.149 0.000
#> w1 0.128 0.038 3.378 0.001
#> w2 0.091 0.033 2.746 0.006
#>
#> Intercepts:
#> Estimate Std.Error z.value P(>|z|)
#> .f -0.013 0.008 -1.636 0.102
#>
#> Covariances:
#> Estimate Std.Error z.value P(>|z|)
#> x1 ~~
#> x2 0.104 0.011 9.068 0.000
#> x3 0.004 0.010 0.426 0.670
#> w1 0.000
#> w2 0.000
#> x2 ~~
#> x3 0.097 0.010 9.333 0.000
#> w1 0.000
#> w2 0.000
#> x3 ~~
#> w1 0.000
#> w2 0.000
#> w1 ~~
#> w2 -0.041 0.050 -0.819 0.413
#>
#> Variances:
#> Estimate Std.Error z.value P(>|z|)
#> .f 0.256 0.014 17.816 0.000
#> x1 1.000
#> x2 1.000
#> x3 1.000
#> w1 1.000
#> w2 1.000
#> .y1 0.109 0.018 6.056 0.000
#> .y2 0.215 0.016 13.486 0.000
#> .y3 0.186 0.017 10.985 0.000
#> f~1 0.621 0.021 30.153 0.000fit_intercepts_ord <- pls(
intercepts_model,
data = randomInterceptsOrdered,
bootstrap = TRUE,
boot.R = 50,
ordered = colnames(randomInterceptsOrdered) # explicitly specify variables as ordered
)
summary(fit_intercepts_ord)
#> plssem (0.1.1) ended normally after 2 iterations
#>
#> Estimator OrdPLSc-MLM
#> Link PROBIT
#>
#> Number of observations 10000
#> Number of iterations 2
#> Number of latent variables 1
#> Number of observed variables 9
#>
#> Fit Measures:
#> Chi-Square 25.508
#> Degrees of Freedom 10
#> SRMR 0.003
#> RMSEA 0.012
#>
#> R-squared (indicators):
#> y1 0.885
#> y2 0.788
#> y3 0.809
#>
#> R-squared (latents):
#> f 0.723
#>
#> Latent Variables:
#> Estimate Std.Error z.value P(>|z|)
#> f =~
#> y1 0.941 0.012 78.652 0.000
#> y2 0.888 0.013 69.164 0.000
#> y3 0.899 0.014 63.554 0.000
#>
#> Regressions:
#> Estimate Std.Error z.value P(>|z|)
#> f ~
#> x1 0.241 0.009 27.424 0.000
#> x2 0.158 0.008 20.447 0.000
#> x3 0.080 0.007 11.671 0.000
#> w1 0.121 0.044 2.726 0.006
#> w2 0.081 0.043 1.897 0.058
#>
#> Intercepts:
#> Estimate Std.Error z.value P(>|z|)
#> .f -0.012 0.008 -1.422 0.155
#>
#> Covariances:
#> Estimate Std.Error z.value P(>|z|)
#> x1 ~~
#> x2 0.110 0.011 10.357 0.000
#> x3 0.012 0.013 0.899 0.369
#> w1 0.001 0.004 0.214 0.831
#> w2 0.001 0.003 0.361 0.718
#> x2 ~~
#> x3 0.099 0.011 8.741 0.000
#> w1 -0.003 0.003 -1.012 0.311
#> w2 -0.001 0.003 -0.455 0.649
#> x3 ~~
#> w1 -0.003 0.003 -1.034 0.301
#> w2 0.003 0.003 1.071 0.284
#> w1 ~~
#> w2 -0.025 0.054 -0.454 0.650
#>
#> Variances:
#> Estimate Std.Error z.value P(>|z|)
#> .f 0.277 0.015 18.173 0.000
#> x1 1.000
#> x2 1.000
#> x3 1.000
#> w1 1.000
#> w2 1.000
#> .y1 0.115 0.023 5.067 0.000
#> .y2 0.212 0.023 9.284 0.000
#> .y3 0.191 0.025 7.543 0.000
#> f~1 0.601 0.021 28.497 0.000