library(plssem)
#> This is plssem (0.1.2). Please report any bugs!

Higher Order Constructs

It is possible to estimate models with second order construcst with the pls() function, using the two-stage approach. Here we see an example using the TPB_2SO dataset, from the modsem package. The model below contains two second order latent variables, INT (intention) which is a second order latent variable of ATT (attitude) and SN (subjective norm), and PBC (perceived behavioural control) which is a second order latent variable of PC (perceived control) and PB (perceived behaviour).

library(modsem)
#> This is modsem (1.0.18). Please report any bugs!
#> 
#> Attaching package: 'modsem'
#> The following object is masked from 'package:plssem':
#> 
#>     parameter_estimates

tpb_2so <- '
  # First order latent variables
  ATT =~ att1 + att2 + att3
  SN  =~ sn1 + sn2 + sn3
  PB =~ pb1 + pb2 + pb3
  PC =~ pc1 + pc2 + pc3
  BEH =~ b1 + b2

  # Higher order latent variables
  INT =~ ATT + SN
  PBC =~ PC + PB

  # Structural model
  BEH ~ PBC + INT + INT:PBC
'

fit <- pls(tpb_2so, data = TPB_2SO, bootstrap = TRUE, boot.R = 50)
summary(fit)
#> plssem (0.1.2) ended normally after 5 iterations
#> 
#>   Estimator                                       PLSc
#>   Link                                          LINEAR
#>                                                       
#>   Number of observations                          2000
#>   Number of iterations                               5
#>   Number of latent variables                         7
#>   Number of observed variables                      14
#> 
#> Fit Measures:
#>   Chi-Square                                   179.935
#>   Degrees of Freedom                                67
#>   SRMR                                           0.010
#>   RMSEA                                          0.029
#> 
#> R-squared (indicators):
#>   att1                                           0.907
#>   att2                                           0.879
#>   att3                                           0.842
#>   sn1                                            0.818
#>   sn2                                            0.786
#>   sn3                                            0.729
#>   pb1                                            0.894
#>   pb2                                            0.866
#>   pb3                                            0.820
#>   pc1                                            0.938
#>   pc2                                            0.848
#>   pc3                                            0.894
#> 
#> R-squared (latents):
#>   ATT                                            0.735
#>   SN                                             0.605
#>   PC                                             0.665
#>   PB                                             0.423
#>   BEH                                            0.198
#> 
#> Latent Variables:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>   ATT =~        
#>     att1            0.952      0.008  117.615    0.000
#>     att2            0.937      0.009  108.000    0.000
#>     att3            0.918      0.009  104.264    0.000
#>   SN =~         
#>     sn1             0.904      0.011   81.369    0.000
#>     sn2             0.886      0.010   91.864    0.000
#>     sn3             0.854      0.010   82.896    0.000
#>   PB =~         
#>     pb1             0.946      0.009  100.511    0.000
#>     pb2             0.931      0.012   75.946    0.000
#>     pb3             0.906      0.013   69.381    0.000
#>   PC =~         
#>     pc1             0.969      0.008  121.554    0.000
#>     pc2             0.921      0.009  107.449    0.000
#>     pc3             0.945      0.010   95.566    0.000
#>   BEH <~        
#>     b1              0.913      0.024   37.357    0.000
#>     b2              0.847      0.023   36.924    0.000
#>   INT =~        
#>     ATT             0.877      0.033   26.511    0.000
#>     SN              0.814      0.038   21.380    0.000
#>   PBC =~        
#>     PC              0.831      0.059   14.133    0.000
#>     PB              0.668      0.054   12.441    0.000
#> 
#> Regressions:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>   BEH ~         
#>     INT             0.251      0.026    9.715    0.000
#>     PBC             0.289      0.031    9.424    0.000
#>     INT:PBC         0.250      0.032    7.753    0.000
#> 
#> Covariances:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>   INT ~~        
#>     PBC             0.035      0.030    1.151    0.250
#>     INT:PBC        -0.006      0.067   -0.089    0.929
#>   PBC ~~        
#>     INT:PBC        -0.108      0.060   -1.814    0.070
#> 
#> Variances:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>     INT             1.000                             
#>     PBC             1.000                             
#>    .BEH             0.802      0.026   30.559    0.000
#>     INT:PBC         1.006      0.075   13.491    0.000
#>    .att1            0.093      0.015    5.997    0.000
#>    .att2            0.121      0.016    7.488    0.000
#>    .att3            0.158      0.016    9.804    0.000
#>    .sn1             0.182      0.020    9.103    0.000
#>    .sn2             0.214      0.017   12.493    0.000
#>    .sn3             0.271      0.018   15.412    0.000
#>    .pb1             0.106      0.018    5.942    0.000
#>    .pb2             0.134      0.023    5.843    0.000
#>    .pb3             0.180      0.024    7.615    0.000
#>    .pc1             0.062      0.015    4.013    0.000
#>    .pc2             0.152      0.016    9.580    0.000
#>    .pc3             0.106      0.019    5.709    0.000
#>    .b1              0.167      0.045    3.698    0.000
#>    .b2              0.283      0.039    7.323    0.000
#>    .ATT             0.265      0.056    4.748    0.000
#>    .SN              0.395      0.053    7.426    0.000
#>    .PC              0.335      0.091    3.690    0.000
#>    .PB              0.577      0.062    9.363    0.000