Categorical Models with plssem

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,
  sample    = 50,
  ordered   = colnames(TPB_Ordered) # explicitly specify ordered variables
)
summary(fit_cat)
#> plssem (0.1.0) ended normally after 4 iterations
#> 
#>   Estimator                                    OrdPLSc
#>   Link                                          PROBIT
#>                                                       
#>   Number of observations                          2000
#>   Number of iterations                               4
#>   Number of latent variables                         5
#>   Number of observed variables                      15
#> 
#> 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.016   58.828    0.000
#>     att2            0.882      0.015   58.957    0.000
#>     att3            0.908      0.016   55.107    0.000
#>     att4            0.862      0.020   44.184    0.000
#>     att5            0.931      0.016   57.199    0.000
#>   SN =~         
#>     sn1             0.897      0.015   61.007    0.000
#>     sn2             0.941      0.016   60.587    0.000
#>   PBC =~        
#>     pbc1            0.929      0.014   67.567    0.000
#>     pbc2            0.930      0.012   77.212    0.000
#>     pbc3            0.884      0.016   54.809    0.000
#>   INT =~        
#>     int1            0.903      0.014   62.917    0.000
#>     int2            0.906      0.011   81.375    0.000
#>     int3            0.868      0.014   60.087    0.000
#>   BEH =~        
#>     b1              0.884      0.022   39.529    0.000
#>     b2              0.879      0.021   41.887    0.000
#> 
#> Regressions:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>   INT ~         
#>     ATT             0.239      0.031    7.631    0.000
#>     SN              0.209      0.030    7.047    0.000
#>     PBC             0.239      0.034    6.991    0.000
#>   BEH ~         
#>     PBC             0.286      0.031    9.338    0.000
#>     INT             0.219      0.027    8.178    0.000
#> 
#> Covariances:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>   ATT ~~        
#>     SN              0.623      0.016   38.842    0.000
#>     PBC             0.690      0.012   59.776    0.000
#>   SN ~~         
#>     PBC             0.690      0.016   42.576    0.000
#> 
#> Variances:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>     ATT             1.000                             
#>     SN              1.000                             
#>     PBC             1.000                             
#>    .INT             0.632      0.017   37.901    0.000
#>    .BEH             0.802      0.019   42.198    0.000
#>    .att1            0.138      0.029    4.727    0.000
#>    .att2            0.223      0.026    8.483    0.000
#>    .att3            0.175      0.030    5.834    0.000
#>    .att4            0.257      0.034    7.630    0.000
#>    .att5            0.133      0.030    4.395    0.000
#>    .sn1             0.195      0.026    7.398    0.000
#>    .sn2             0.114      0.029    3.896    0.000
#>    .pbc1            0.137      0.026    5.368    0.000
#>    .pbc2            0.135      0.022    6.002    0.000
#>    .pbc3            0.219      0.028    7.719    0.000
#>    .int1            0.185      0.026    7.108    0.000
#>    .int2            0.179      0.020    8.879    0.000
#>    .int3            0.246      0.025    9.793    0.000
#>    .b1              0.219      0.039    5.543    0.000
#>    .b2              0.227      0.037    6.112    0.000