The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

Multilevel Models with plssem

This vignette shows examples of multilevel random slopes and intercept models, with both continuous and ordinal data.

Random Slopes Model

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)
"

Continuous Indicators

fit_slopes_cont <- pls(
  slopes_model,
  data      = randomSlopes,
  bootstrap = TRUE,
  boot.R    = 50
)
summary(fit_slopes_cont)
#> plssem (0.1.2) ended normally after 3 iterations
#>   Estimator                                   PLSc-MLM
#>   Link                                          LINEAR
#>                                                       
#>   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.009   98.579    0.000
#>     x2              0.826      0.012   70.255    0.000
#>     x3              0.879      0.007  128.185    0.000
#>   Z =~          
#>     z1              0.916      0.010   88.526    0.000
#>     z2              0.833      0.013   65.224    0.000
#>     z3              0.871      0.011   82.705    0.000
#>   Y =~          
#>     y1              0.915      0.010   94.080    0.000
#>     y2              0.852      0.013   65.821    0.000
#>     y3              0.866      0.012   69.595    0.000
#>   W =~          
#>     w1              0.916      0.010   88.332    0.000
#>     w2              0.834      0.013   66.117    0.000
#>     w3              0.878      0.014   60.905    0.000
#> 
#> Regressions:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>   Y ~           
#>     X               0.293      0.020   14.518    0.000
#>     Z               0.444      0.043   10.358    0.000
#>   W ~           
#>     X               0.393      0.039   10.027    0.000
#>     Z               0.248      0.056    4.425    0.000
#> 
#> Intercepts:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>    .Y               0.010      0.035    0.280    0.779
#>    .W               0.010      0.032    0.310    0.757
#> 
#> Covariances:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>   X ~~          
#>     Z               0.175      0.011   15.874    0.000
#>   Y~X ~~        
#>     Y~1            -0.004      0.006   -0.622    0.534
#>   Y~Z ~~        
#>     Y~1            -0.025      0.014   -1.822    0.068
#>     Y~X             0.012      0.008    1.590    0.112
#>   W~X ~~        
#>     W~1             0.003      0.011    0.281    0.779
#>   W~Z ~~        
#>     W~1             0.009      0.011    0.850    0.395
#>     W~X             0.013      0.014    0.982    0.326
#> 
#> Variances:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>     X               1.000                             
#>     Z               1.000                             
#>    .Y               0.458      0.049    9.391    0.000
#>    .W               0.447      0.062    7.164    0.000
#>    .x1              0.140      0.017    8.027    0.000
#>    .x2              0.317      0.019   16.312    0.000
#>    .x3              0.228      0.012   18.886    0.000
#>    .z1              0.161      0.019    8.521    0.000
#>    .z2              0.306      0.021   14.291    0.000
#>    .z3              0.241      0.018   13.223    0.000
#>    .y1              0.162      0.018    9.154    0.000
#>    .y2              0.274      0.022   12.516    0.000
#>    .y3              0.250      0.021   11.645    0.000
#>    .w1              0.160      0.019    8.444    0.000
#>    .w2              0.305      0.021   14.430    0.000
#>    .w3              0.229      0.025    9.110    0.000
#>     Y~1             0.086      0.019    4.425    0.000
#>     Y~X             0.018      0.006    3.141    0.002
#>     Y~Z             0.105      0.019    5.433    0.000
#>     W~1             0.059      0.013    4.684    0.000
#>     W~X             0.095      0.016    5.760    0.000
#>     W~Z             0.144      0.025    5.831    0.000

Ordered Indicators

fit_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.2) 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.535
#>   W                                              0.547
#> 
#> Latent Variables:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>   X =~          
#>     x1              0.933      0.013   72.758    0.000
#>     x2              0.818      0.012   70.376    0.000
#>     x3              0.888      0.012   71.849    0.000
#>   Z =~          
#>     z1              0.917      0.011   82.699    0.000
#>     z2              0.845      0.013   63.888    0.000
#>     z3              0.871      0.011   76.727    0.000
#>   Y =~          
#>     y1              0.918      0.011   84.803    0.000
#>     y2              0.843      0.015   57.262    0.000
#>     y3              0.869      0.013   64.376    0.000
#>   W =~          
#>     w1              0.914      0.012   78.395    0.000
#>     w2              0.825      0.019   43.281    0.000
#>     w3              0.886      0.016   56.650    0.000
#> 
#> Regressions:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>   Y ~           
#>     X               0.290      0.023   12.752    0.000
#>     Z               0.451      0.047    9.671    0.000
#>   W ~           
#>     X               0.391      0.042    9.244    0.000
#>     Z               0.245      0.059    4.138    0.000
#> 
#> Intercepts:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>    .Y               0.011      0.040    0.276    0.783
#>    .W               0.009      0.033    0.268    0.788
#> 
#> Covariances:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>   X ~~          
#>     Z               0.168      0.013   12.905    0.000
#>   Y~X ~~        
#>     Y~1            -0.006      0.005   -1.242    0.214
#>   Y~Z ~~        
#>     Y~1            -0.024      0.013   -1.829    0.067
#>     Y~X             0.012      0.008    1.524    0.128
#>   W~X ~~        
#>     W~1             0.004      0.011    0.323    0.746
#>   W~Z ~~        
#>     W~1             0.009      0.011    0.831    0.406
#>     W~X             0.016      0.012    1.376    0.169
#> 
#> Variances:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>     X               1.000                             
#>     Z               1.000                             
#>    .Y               0.465      0.056    8.339    0.000
#>    .W               0.453      0.051    8.799    0.000
#>    .x1              0.130      0.024    5.440    0.000
#>    .x2              0.331      0.019   17.413    0.000
#>    .x3              0.211      0.022    9.636    0.000
#>    .z1              0.159      0.020    7.758    0.000
#>    .z2              0.286      0.022   12.801    0.000
#>    .z3              0.242      0.020   12.299    0.000
#>    .y1              0.156      0.020    7.856    0.000
#>    .y2              0.289      0.025   11.690    0.000
#>    .y3              0.246      0.023   10.494    0.000
#>    .w1              0.165      0.021    7.773    0.000
#>    .w2              0.319      0.031   10.229    0.000
#>    .w3              0.215      0.028    7.777    0.000
#>     Y~1             0.080      0.017    4.673    0.000
#>     Y~X             0.018      0.005    3.508    0.000
#>     Y~Z             0.102      0.015    6.737    0.000
#>     W~1             0.055      0.015    3.644    0.000
#>     W~X             0.099      0.018    5.415    0.000
#>     W~Z             0.142      0.028    5.054    0.000

Random Intercepts Model

intercepts_model <- '
  f =~ y1 + y2 + y3
  f ~ x1 + x2 + x3 + w1 + w2 + (1 | cluster)
'

Continuous Indicators

fit_intercepts_cont <- pls(
  intercepts_model,
  data      = randomIntercepts,
  bootstrap = TRUE,
  boot.R    = 50
)
summary(fit_intercepts_cont)
#> plssem (0.1.2) ended normally after 2 iterations
#>   Estimator                                   PLSc-MLM
#>   Link                                          LINEAR
#>                                                       
#>   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.007  136.498    0.000
#>     y2              0.886      0.009   93.458    0.000
#>     y3              0.902      0.008  114.737    0.000
#> 
#> Regressions:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>   f ~           
#>     x1              0.238      0.006   42.342    0.000
#>     x2              0.162      0.005   31.859    0.000
#>     x3              0.077      0.005   14.336    0.000
#>     w1              0.128      0.039    3.318    0.001
#>     w2              0.091      0.041    2.232    0.026
#> 
#> Intercepts:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>    .f              -0.013      0.035   -0.356    0.722
#> 
#> Covariances:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>   x1 ~~         
#>     x2              0.104      0.010   10.850    0.000
#>     x3              0.004      0.010    0.444    0.657
#>     w1              0.000                             
#>     w2              0.000                             
#>   x2 ~~         
#>     x3              0.097      0.014    7.083    0.000
#>     w1              0.000                             
#>     w2              0.000                             
#>   x3 ~~         
#>     w1              0.000                             
#>     w2              0.000                             
#>   w1 ~~         
#>     w2             -0.041      0.048   -0.857    0.392
#> 
#> Variances:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>    .f               0.256      0.037    6.994    0.000
#>     x1              1.000                             
#>     x2              1.000                             
#>     x3              1.000                             
#>     w1              1.000                             
#>     w2              1.000                             
#>    .y1              0.109      0.013    8.331    0.000
#>    .y2              0.215      0.017   12.794    0.000
#>    .y3              0.186      0.014   13.117    0.000
#>     f~1             0.621      0.040   15.429    0.000

Ordered Indicators

fit_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.2) 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.685
#> 
#> Latent Variables:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>   f =~          
#>     y1              0.941      0.010   90.683    0.000
#>     y2              0.888      0.014   64.297    0.000
#>     y3              0.899      0.017   53.861    0.000
#> 
#> Regressions:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>   f ~           
#>     x1              0.234      0.006   37.993    0.000
#>     x2              0.154      0.005   29.110    0.000
#>     x3              0.078      0.007   10.795    0.000
#>     w1              0.118      0.038    3.101    0.002
#>     w2              0.079      0.045    1.764    0.078
#> 
#> Intercepts:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>    .f              -0.011      0.035   -0.331    0.741
#> 
#> Covariances:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>   x1 ~~         
#>     x2              0.110      0.011    9.893    0.000
#>     x3              0.012      0.011    1.111    0.267
#>     w1              0.001      0.004    0.208    0.835
#>     w2              0.001      0.003    0.327    0.743
#>   x2 ~~         
#>     x3              0.099      0.012    8.351    0.000
#>     w1             -0.003      0.003   -1.022    0.307
#>     w2             -0.001      0.003   -0.425    0.671
#>   x3 ~~         
#>     w1             -0.003      0.003   -1.080    0.280
#>     w2              0.003      0.003    1.002    0.316
#>   w1 ~~         
#>     w2             -0.025      0.043   -0.571    0.568
#> 
#> Variances:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>    .f               0.315      0.032    9.811    0.000
#>     x1              1.000                             
#>     x2              1.000                             
#>     x3              1.000                             
#>     w1              1.000                             
#>     w2              1.000                             
#>    .y1              0.115      0.019    5.878    0.000
#>    .y2              0.212      0.025    8.634    0.000
#>    .y3              0.191      0.030    6.369    0.000
#>     f~1             0.569      0.034   16.725    0.000

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.