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