Ordered indicators are common in survey-based SEM applications. This vignette reuses the Theory of Planned Behavior example but illustrates how to run the model when the manifest variables are ordinal.

Theory of Planned Behavior (Ordered Indicators)

tpb <- '
# Outer Model (Based on Hagger et al., 2007)
  ATT =~ att1 + att2 + att3 + att4 + att5
  SN =~ sn1 + sn2
  PBC =~ pbc1 + pbc2 + pbc3
  INT =~ int1 + int2 + int3
  BEH =~ b1 + b2

# Inner Model (Based on Steinmetz et al., 2011)
  INT ~ ATT + SN + PBC
  BEH ~ INT + PBC
'

fit_cat <- pls(
  tpb,
  data      = TPB_Ordered,
  bootstrap = TRUE,
  boot.R    = 50,
  ordered   = colnames(TPB_Ordered) # explicitly specify ordered variables
)
summary(fit_cat)
#> plssem (0.1.3) ended normally after 3 iterations
#>   Estimator                                    OrdPLSc
#>   Link                                          PROBIT
#>                                                       
#>   Number of observations                          2000
#>   Number of iterations                               3
#>   Number of latent variables                         5
#>   Number of observed variables                      15
#> 
#> Fit Measures:
#>   Chi-Square                                   263.165
#>   Degrees of Freedom                                82
#>   SRMR                                           0.011
#>   RMSEA                                          0.033
#> 
#> R-squared (indicators):
#>   att1                                           0.862
#>   att2                                           0.777
#>   att3                                           0.825
#>   att4                                           0.743
#>   att5                                           0.867
#>   sn1                                            0.805
#>   sn2                                            0.886
#>   pbc1                                           0.863
#>   pbc2                                           0.865
#>   pbc3                                           0.781
#>   int1                                           0.815
#>   int2                                           0.821
#>   int3                                           0.754
#>   b1                                             0.781
#>   b2                                             0.773
#> 
#> R-squared (latents):
#>   INT                                            0.368
#>   BEH                                            0.198
#> 
#> Latent Variables:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>   ATT =~        
#>     att1            0.928      0.017   55.427    0.000
#>     att2            0.882      0.020   44.279    0.000
#>     att3            0.908      0.019   48.480    0.000
#>     att4            0.862      0.021   41.168    0.000
#>     att5            0.931      0.021   44.623    0.000
#>   SN =~         
#>     sn1             0.897      0.016   56.964    0.000
#>     sn2             0.941      0.014   66.291    0.000
#>   PBC =~        
#>     pbc1            0.929      0.013   69.693    0.000
#>     pbc2            0.930      0.014   65.690    0.000
#>     pbc3            0.884      0.015   59.217    0.000
#>   INT =~        
#>     int1            0.903      0.013   71.887    0.000
#>     int2            0.906      0.012   75.656    0.000
#>     int3            0.868      0.016   55.904    0.000
#>   BEH =~        
#>     b1              0.884      0.022   40.849    0.000
#>     b2              0.879      0.021   42.451    0.000
#> 
#> Regressions:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>   INT ~         
#>     ATT             0.239      0.027    8.692    0.000
#>     SN              0.209      0.025    8.389    0.000
#>     PBC             0.239      0.034    7.026    0.000
#>   BEH ~         
#>     PBC             0.286      0.026   10.800    0.000
#>     INT             0.219      0.032    6.786    0.000
#> 
#> Covariances:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>   ATT ~~        
#>     SN              0.623      0.016   37.813    0.000
#>     PBC             0.690      0.011   60.838    0.000
#>   SN ~~         
#>     PBC             0.690      0.014   49.581    0.000
#> 
#> Thresholds:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>     att1|t1        -2.968      0.397   -7.469    0.000
#>     att1|t2        -1.572      0.043  -36.401    0.000
#>     att1|t3        -0.408      0.026  -15.652    0.000
#>     att1|t4         0.255      0.027    9.437    0.000
#>     att1|t5         1.213      0.029   42.453    0.000
#>     att1|t6         2.457      0.089   27.538    0.000
#>     att2|t1        -1.911      0.059  -32.325    0.000
#>     att2|t2        -0.769      0.026  -29.301    0.000
#>     att2|t3        -0.069      0.031   -2.198    0.028
#>     att2|t4         1.290      0.033   38.948    0.000
#>     att2|t5         2.170      0.064   33.903    0.000
#>     att2|t6         2.968      0.535    5.548    0.000
#>     att3|t1        -2.652      0.119  -22.327    0.000
#>     att3|t2        -1.454      0.044  -33.005    0.000
#>     att3|t3        -0.400      0.027  -14.997    0.000
#>     att3|t4         0.457      0.028   16.249    0.000
#>     att3|t5         1.256      0.030   41.370    0.000
#>     att3|t6         2.878      0.402    7.157    0.000
#>     att4|t1        -2.878      0.400   -7.191    0.000
#>     att4|t2        -1.859      0.061  -30.626    0.000
#>     att4|t3        -0.933      0.032  -29.197    0.000
#>     att4|t4        -0.018      0.030   -0.578    0.563
#>     att4|t5         1.221      0.033   36.777    0.000
#>     att4|t6         2.144      0.069   30.855    0.000
#>     att5|t1        -2.807      0.141  -19.846    0.000
#>     att5|t2        -1.793      0.052  -34.345    0.000
#>     att5|t3        -0.389      0.030  -13.038    0.000
#>     att5|t4         0.567      0.034   16.818    0.000
#>     att5|t5         1.385      0.038   36.690    0.000
#>     att5|t6         2.484      0.090   27.480    0.000
#>     sn1|t1         -1.706      0.047  -36.537    0.000
#>     sn1|t2         -0.762      0.031  -24.542    0.000
#>     sn1|t3          0.243      0.027    9.046    0.000
#>     sn1|t4          1.305      0.046   28.064    0.000
#>     sn1|t5          2.044      0.067   30.551    0.000
#>     sn1|t6          3.090      0.893    3.459    0.001
#>     sn2|t1         -3.090      0.765   -4.041    0.000
#>     sn2|t2         -2.326      0.082  -28.345    0.000
#>     sn2|t3         -1.115      0.038  -29.539    0.000
#>     sn2|t4          0.024      0.028    0.854    0.393
#>     sn2|t5          1.030      0.038   26.943    0.000
#>     sn2|t6          2.024      0.070   29.052    0.000
#>     pbc1|t1        -1.919      0.067  -28.830    0.000
#>     pbc1|t2        -0.883      0.035  -25.410    0.000
#>     pbc1|t3        -0.005      0.029   -0.174    0.862
#>     pbc1|t4         1.065      0.035   30.285    0.000
#>     pbc1|t5         2.170      0.073   29.767    0.000
#>     pbc2|t1        -2.543      0.125  -20.332    0.000
#>     pbc2|t2        -1.392      0.041  -33.917    0.000
#>     pbc2|t3        -0.617      0.032  -19.191    0.000
#>     pbc2|t4         0.454      0.031   14.462    0.000
#>     pbc2|t5         1.491      0.045   33.250    0.000
#>     pbc2|t6         2.432      0.093   26.247    0.000
#>     pbc3|t1        -1.768      0.051  -34.680    0.000
#>     pbc3|t2        -0.845      0.029  -29.361    0.000
#>     pbc3|t3         0.145      0.029    4.988    0.000
#>     pbc3|t4         1.282      0.041   31.404    0.000
#>     pbc3|t5         1.896      0.060   31.624    0.000
#>     pbc3|t6         2.968      0.406    7.319    0.000
#>     int1|t1        -2.226      0.070  -31.907    0.000
#>     int1|t2        -1.213      0.043  -28.459    0.000
#>     int1|t3        -0.333      0.034   -9.764    0.000
#>     int1|t4         0.851      0.029   29.602    0.000
#>     int1|t5         1.818      0.045   40.668    0.000
#>     int1|t6         2.697      0.141   19.167    0.000
#>     int2|t1        -2.197      0.080  -27.613    0.000
#>     int2|t2        -1.254      0.043  -29.252    0.000
#>     int2|t3        -0.167      0.035   -4.733    0.000
#>     int2|t4         0.908      0.032   28.218    0.000
#>     int2|t5         1.670      0.045   37.118    0.000
#>     int2|t6         2.512      0.097   25.843    0.000
#>     int3|t1        -2.432      0.109  -22.254    0.000
#>     int3|t2        -1.308      0.042  -30.870    0.000
#>     int3|t3        -0.439      0.032  -13.510    0.000
#>     int3|t4         0.441      0.030   14.529    0.000
#>     int3|t5         1.375      0.037   37.441    0.000
#>     int3|t6         2.512      0.089   28.192    0.000
#>     b1|t1          -2.387      0.110  -21.618    0.000
#>     b1|t2          -1.227      0.039  -31.249    0.000
#>     b1|t3           0.004      0.024    0.158    0.874
#>     b1|t4           0.678      0.029   23.665    0.000
#>     b1|t5           1.630      0.040   40.742    0.000
#>     b1|t6           2.512      0.106   23.670    0.000
#>     b2|t1          -2.308      0.085  -27.101    0.000
#>     b2|t2          -0.972      0.038  -25.258    0.000
#>     b2|t3          -0.068      0.027   -2.513    0.012
#>     b2|t4           0.779      0.025   30.901    0.000
#>     b2|t5           1.977      0.054   36.639    0.000
#> 
#> Variances:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>     ATT             1.000                             
#>     SN              1.000                             
#>     PBC             1.000                             
#>    .INT             0.632      0.022   28.776    0.000
#>    .BEH             0.802      0.017   45.905    0.000
#>    .att1            0.138      0.031    4.457    0.000
#>    .att2            0.223      0.035    6.309    0.000
#>    .att3            0.175      0.034    5.178    0.000
#>    .att4            0.257      0.036    7.106    0.000
#>    .att5            0.133      0.039    3.437    0.001
#>    .sn1             0.195      0.028    6.901    0.000
#>    .sn2             0.114      0.027    4.268    0.000
#>    .pbc1            0.137      0.025    5.590    0.000
#>    .pbc2            0.135      0.026    5.108    0.000
#>    .pbc3            0.219      0.026    8.314    0.000
#>    .int1            0.185      0.023    8.150    0.000
#>    .int2            0.179      0.022    8.240    0.000
#>    .int3            0.246      0.027    9.115    0.000
#>    .b1              0.219      0.038    5.735    0.000
#>    .b2              0.227      0.036    6.220    0.000