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