In general, the PLS-SEM framework and the pls()
function assume that the model is fully standardized (i.e., all observed
and latent variables have zero mean and unit variance). However, it is
possible to get unstandardized estimates for your models using a
post-estimation procedure. This can be done either by using the
unstandardized_estimates() function or by passing
unstandardized = TRUE to the summary()
function. Here is an example using summary().
m <- '
X =~ x1 + x2 + x3
Z =~ z1 + z2 + z3
Y =~ y1 + y2 + y3
Y ~ X + Z + X:Z + X:X
'
fit <- pls(m, modsem::oneInt, bootstrap = TRUE, boot.R = 100)
summary(fit, unstandardized = TRUE)
#> plssem (0.1.3) ended normally after 3 iterations
#> Estimator PLSc
#> Link LINEAR
#>
#> Number of observations 2000
#> Number of iterations 3
#> Number of latent variables 3
#> Number of observed variables 9
#>
#> Fit Measures:
#> Chi-Square 56.757
#> Degrees of Freedom 24
#> SRMR 0.006
#> RMSEA 0.026
#>
#> R-squared (indicators):
#> x1 0.863
#> x2 0.819
#> x3 0.809
#> z1 0.830
#> z2 0.827
#> z3 0.843
#> y1 0.934
#> y2 0.919
#> y3 0.923
#>
#> R-squared (latents):
#> Y 0.604
#>
#> Latent Variables:
#> Estimate Std.Error z.value P(>|z|) Unstd
#> X =~
#> x1 0.929 0.013 70.308 0.000 1.000
#> x2 0.905 0.013 68.790 0.000 0.814
#> x3 0.899 0.014 62.599 0.000 0.900
#> Z =~
#> z1 0.911 0.015 60.165 0.000 1.000
#> z2 0.909 0.014 63.106 0.000 0.835
#> z3 0.918 0.015 61.661 0.000 0.902
#> Y =~
#> y1 0.966 0.006 161.677 0.000 1.000
#> y2 0.959 0.007 135.655 0.000 0.804
#> y3 0.961 0.007 145.015 0.000 0.901
#>
#> Regressions:
#> Estimate Std.Error z.value P(>|z|) Unstd
#> Y ~
#> X 0.423 0.017 25.461 0.000 0.670
#> Z 0.361 0.016 22.977 0.000 0.572
#> X:Z 0.454 0.016 29.051 0.000 0.726
#> X:X -0.005 0.020 -0.261 0.794 -0.008
#>
#> Covariances:
#> Estimate Std.Error z.value P(>|z|) Unstd
#> X ~~
#> Z 0.201 0.026 7.865 0.000 0.197
#> X:Z 0.018 0.038 0.478 0.633 0.018
#> X:X 0.030 0.077 0.386 0.700 0.029
#> Z ~~
#> X:Z 0.060 0.047 1.291 0.197 0.059
#> X:X 0.018 0.038 0.478 0.633 0.018
#> X:Z ~~
#> X:X 0.372 0.062 5.955 0.000 0.360
#>
#> Variances:
#> Estimate Std.Error z.value P(>|z|) Unstd
#> X 1.000 0.028 36.061 0.000 0.985
#> Z 1.000 0.030 33.155 0.000 0.983
#> .Y 0.396 0.015 25.956 0.000 0.980
#> X:Z 1.013 0.066 15.261 0.000 0.980
#> X:X 1.740 0.180 9.645 0.000 1.687
#> .x1 0.137 0.025 5.590 0.000 0.157
#> .x2 0.181 0.024 7.605 0.000 0.144
#> .x3 0.191 0.026 7.414 0.000 0.188
#> .z1 0.170 0.027 6.221 0.000 0.202
#> .z2 0.173 0.026 6.581 0.000 0.143
#> .z3 0.157 0.027 5.743 0.000 0.149
#> .y1 0.066 0.012 5.725 0.000 0.175
#> .y2 0.081 0.014 5.981 0.000 0.141
#> .y3 0.077 0.013 6.090 0.000 0.168To get more detailed results, including standard errors, we can use
the unstandardized_estimates() function directly.
unstandardized_estimates(fit)
#> lhs op rhs est se z pvalue ci.lower ci.upper
#> 1 X =~ x1 1.000 NA NA NA NA NA
#> 2 X =~ x2 0.814 0.020 41.568 0.000 0.776 0.853
#> 3 X =~ x3 0.900 0.023 38.373 0.000 0.854 0.946
#> 4 Z =~ z1 1.000 NA NA NA NA NA
#> 5 Z =~ z2 0.835 0.024 34.902 0.000 0.788 0.882
#> 6 Z =~ z3 0.902 0.025 36.375 0.000 0.853 0.951
#> 7 Y =~ y1 1.000 NA NA NA NA NA
#> 8 Y =~ y2 0.804 0.009 88.470 0.000 0.786 0.822
#> 9 Y =~ y3 0.901 0.009 97.027 0.000 0.883 0.919
#> 10 Y ~ X 0.670 0.029 22.857 0.000 0.612 0.727
#> 11 Y ~ Z 0.572 0.028 20.730 0.000 0.518 0.626
#> 12 Y ~ X:Z 0.726 0.031 23.451 0.000 0.665 0.787
#> 13 Y ~ X:X -0.008 0.032 -0.261 0.794 -0.072 0.055
#> 14 X ~~ X 0.985 0.040 24.393 0.000 0.906 1.064
#> 15 X ~~ Z 0.197 0.025 7.749 0.000 0.147 0.247
#> 16 X ~~ X:Z 0.018 0.037 0.478 0.632 -0.055 0.090
#> 17 X ~~ X:X 0.029 0.075 0.387 0.699 -0.118 0.176
#> 18 Z ~~ Z 0.983 0.046 21.172 0.000 0.892 1.074
#> 19 Z ~~ X:Z 0.059 0.046 1.285 0.199 -0.031 0.148
#> 20 Z ~~ X:X 0.018 0.037 0.478 0.632 -0.055 0.090
#> 21 Y ~~ Y 0.980 0.041 24.146 0.000 0.900 1.060
#> 22 X:Z ~~ X:Z 0.980 0.081 12.115 0.000 0.822 1.139
#> 23 X:Z ~~ X:X 0.360 0.063 5.742 0.000 0.237 0.483
#> 24 X:X ~~ X:X 1.687 0.202 8.372 0.000 1.292 2.082
#> 25 x1 ~~ x1 0.157 0.028 5.590 0.000 0.102 0.212
#> 26 x2 ~~ x2 0.144 0.019 7.605 0.000 0.107 0.181
#> 27 x3 ~~ x3 0.188 0.025 7.414 0.000 0.139 0.238
#> 28 z1 ~~ z1 0.202 0.032 6.221 0.000 0.138 0.266
#> 29 z2 ~~ z2 0.143 0.022 6.581 0.000 0.101 0.186
#> 30 z3 ~~ z3 0.149 0.026 5.743 0.000 0.098 0.200
#> 31 y1 ~~ y1 0.175 0.031 5.725 0.000 0.115 0.235
#> 32 y2 ~~ y2 0.141 0.024 5.981 0.000 0.095 0.187
#> 33 y3 ~~ y3 0.168 0.028 6.090 0.000 0.114 0.222It is also possible to pass a vector of variable names, detailing which variables should be unstandardized. The rules for different variables are as follows:
Note that the observed and latent variables can be standardized separately. This has implications for latent variables. Since we unstandardize latent/composite variables by fixing the first loading/weight to 1, their scale is inherited from the first indicator. That means that we will get a different result depending on whether the first indicator gets unstandardized or not.
Here, for example, we can see that we get different results if we do
not unstandardize x1 when unstandardizing
X.
# x1 is unstandardized
subset(
unstandardized_estimates(fit, unstandardized = c("x1", "X")),
lhs == "X" | rhs == "X"
)
#> lhs op rhs est se z pvalue ci.lower ci.upper
#> 1 X =~ x1 1.000 NA NA NA NA NA
#> 2 X =~ x2 0.912 0.022 41.568 0.000 0.869 0.955
#> 3 X =~ x3 0.906 0.024 38.373 0.000 0.860 0.953
#> 10 Y ~ X 0.426 0.018 23.566 0.000 0.391 0.461
#> 14 X ~~ X 0.985 0.040 24.393 0.000 0.906 1.064
#> 15 X ~~ Z 0.199 0.025 7.842 0.000 0.149 0.249
#> 16 X ~~ X:Z 0.018 0.037 0.479 0.632 -0.055 0.091
#> 17 X ~~ X:X 0.029 0.075 0.387 0.699 -0.118 0.176
# x1 is standardized
subset(
unstandardized_estimates(fit, unstandardized = "X"),
lhs == "X" | rhs == "X"
)
#> lhs op rhs est se z pvalue ci.lower ci.upper
#> 1 X =~ x1 1.000 NA NA NA NA NA
#> 2 X =~ x2 0.974 0.023 41.568 0.000 0.928 1.020
#> 3 X =~ x3 0.968 0.025 38.373 0.000 0.919 1.018
#> 10 Y ~ X 0.455 0.019 23.566 0.000 0.417 0.493
#> 14 X ~~ X 0.863 0.035 24.393 0.000 0.793 0.932
#> 15 X ~~ Z 0.186 0.024 7.842 0.000 0.140 0.233
#> 16 X ~~ X:Z 0.016 0.033 0.479 0.632 -0.048 0.079
#> 17 X ~~ X:X 0.024 0.062 0.387 0.699 -0.097 0.145