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.3) 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.007 140.790 0.000
#> att2 0.937 0.007 130.643 0.000
#> att3 0.918 0.009 104.414 0.000
#> SN =~
#> sn1 0.904 0.010 89.715 0.000
#> sn2 0.886 0.010 90.865 0.000
#> sn3 0.854 0.009 90.300 0.000
#> PB =~
#> pb1 0.946 0.010 93.085 0.000
#> pb2 0.931 0.010 89.885 0.000
#> pb3 0.906 0.011 80.744 0.000
#> PC =~
#> pc1 0.969 0.009 101.975 0.000
#> pc2 0.921 0.009 98.461 0.000
#> pc3 0.945 0.010 90.283 0.000
#> INT =~
#> ATT 0.877 0.039 22.448 0.000
#> SN 0.814 0.040 20.586 0.000
#> PBC =~
#> PC 0.831 0.056 14.753 0.000
#> PB 0.668 0.044 15.102 0.000
#>
#> Composites:
#> Estimate Std.Error z.value P(>|z|)
#> BEH <~
#> b1 0.913 0.025 36.319 0.000
#> b2 0.847 0.023 36.913 0.000
#>
#> Regressions:
#> Estimate Std.Error z.value P(>|z|)
#> BEH ~
#> INT 0.251 0.024 10.322 0.000
#> PBC 0.289 0.027 10.495 0.000
#> INT:PBC 0.250 0.027 9.151 0.000
#>
#> Covariances:
#> Estimate Std.Error z.value P(>|z|)
#> INT ~~
#> PBC 0.035 0.037 0.930 0.352
#> INT:PBC -0.006 0.058 -0.103 0.918
#> PBC ~~
#> INT:PBC -0.108 0.046 -2.330 0.020
#>
#> Variances:
#> Estimate Std.Error z.value P(>|z|)
#> INT 1.000
#> PBC 1.000
#> .BEH 0.802 0.025 32.380 0.000
#> INT:PBC 1.006 0.067 14.974 0.000
#> .att1 0.093 0.013 7.210 0.000
#> .att2 0.121 0.013 9.006 0.000
#> .att3 0.158 0.016 9.783 0.000
#> .sn1 0.182 0.018 10.046 0.000
#> .sn2 0.214 0.017 12.411 0.000
#> .sn3 0.271 0.016 16.800 0.000
#> .pb1 0.106 0.019 5.486 0.000
#> .pb2 0.134 0.019 6.930 0.000
#> .pb3 0.180 0.020 8.876 0.000
#> .pc1 0.062 0.018 3.366 0.001
#> .pc2 0.152 0.017 8.792 0.000
#> .pc3 0.106 0.020 5.375 0.000
#> b1 0.167 0.045 3.669 0.000
#> b2 0.283 0.040 7.157 0.000
#> .ATT 0.265 0.066 4.009 0.000
#> .SN 0.395 0.056 7.093 0.000
#> .PC 0.335 0.093 3.589 0.000
#> .PB 0.577 0.059 9.773 0.000