Higher Order Models

library(plssem)

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.20). 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                                70
#>   SRMR                                           0.010
#>   RMSEA                                          0.028
#> 
#> 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  124.706    0.000
#>     att2            0.937      0.007  125.141    0.000
#>     att3            0.918      0.009  100.061    0.000
#>   SN =~         
#>     sn1             0.904      0.009  100.818    0.000
#>     sn2             0.886      0.011   83.952    0.000
#>     sn3             0.854      0.009   91.111    0.000
#>   PB =~         
#>     pb1             0.946      0.010   91.965    0.000
#>     pb2             0.931      0.013   74.335    0.000
#>     pb3             0.906      0.013   72.012    0.000
#>   PC =~         
#>     pc1             0.969      0.009  106.231    0.000
#>     pc2             0.921      0.009   98.812    0.000
#>     pc3             0.945      0.011   84.821    0.000
#>   INT =~        
#>     ATT             0.877      0.040   21.956    0.000
#>     SN              0.814      0.040   20.151    0.000
#>   PBC =~        
#>     PC              0.831      0.052   15.854    0.000
#>     PB              0.668      0.044   15.300    0.000
#> 
#> Composites:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>   BEH <~        
#>     b1              0.913      0.021   43.330    0.000
#>     b2              0.847      0.023   37.592    0.000
#> 
#> Regressions:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>   BEH ~         
#>     INT             0.251      0.020   12.578    0.000
#>     PBC             0.289      0.026   11.147    0.000
#>     INT:PBC         0.250      0.028    9.091    0.000
#> 
#> Covariances:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>   INT ~~        
#>     PBC             0.035      0.026    1.327    0.185
#>     INT:PBC        -0.006      0.048   -0.123    0.902
#>   PBC ~~        
#>     INT:PBC        -0.108      0.058   -1.863    0.062
#> 
#> Variances:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>     INT             1.000                             
#>     PBC             1.000                             
#>    .BEH             0.802      0.023   35.569    0.000
#>     INT:PBC         1.006      0.072   14.037    0.000
#>    .att1            0.093      0.015    6.376    0.000
#>    .att2            0.121      0.014    8.652    0.000
#>    .att3            0.158      0.017    9.381    0.000
#>    .sn1             0.182      0.016   11.221    0.000
#>    .sn2             0.214      0.019   11.433    0.000
#>    .sn3             0.271      0.016   16.947    0.000
#>    .pb1             0.106      0.020    5.390    0.000
#>    .pb2             0.134      0.023    5.743    0.000
#>    .pb3             0.180      0.023    7.887    0.000
#>    .pc1             0.062      0.018    3.495    0.000
#>    .pc2             0.152      0.017    8.880    0.000
#>    .pc3             0.106      0.021    5.044    0.000
#>     b1              0.167      0.038    4.338    0.000
#>     b2              0.283      0.038    7.408    0.000
#>    .ATT             0.265      0.062    4.240    0.000
#>    .SN              0.395      0.049    8.121    0.000
#>    .PC              0.335      0.085    3.949    0.000
#>    .PB              0.577      0.054   10.732    0.000