*! version 0.3.0 12Apr2019

Title

plssem -- Partial least squares structural equation modelling (PLS-SEM)

Syntax

Partial least squares structural equation modeling of data

plssem (LV1 > indblock1) (LV2 > indblock2) (...) [if] [in]
[, structural(LV2 LV1, ...) options]

Partial least squares structural equation modeling of adjacency matrices

plssemmat adjmeas_matname [if] [in]
[, structural(adjstruc_matname) options]

adjmeas_matname is a Q x P matrix providing the adjacency matrix for the
measurement model, while adjstruc_matname is a P x P matrix providing the
adjacency matrix for the structural model (Q denotes the number of indicators
and P the number of latent variables in the model).

wscheme(centroid) use the centroid weighting scheme

wscheme(factorial) use the factorial weighting scheme

wscheme(path) use the path weighting scheme; the default

binary(syntax##description_of_namelist:namelist) list of latent variables to fit using logit

boot(numlist) number of bootstrap replications

seed(numlist) bootstrap seed number

tol(#) tolerance; default is 1e-7

maxiter(#) maximum number of iterations; default is 100

missing(mean) impute the indicator missing values using the mean of the available indicators

missing(knn) impute the indicator missing values using the k-th nearest neighbor method

k(#) number of nearest neighbors to use with missing(knn); default is 5

init(eigen) initialize the latent variables using factor

init(indsum) initialize the latent variables using the sum of indicators; the default

digits(#) number of digits to display; default is 3

noheader suppress display of output header

nomeastable suppress display of measurement model estimates table

nodiscrimtable suppress display of discriminant validity table

nostructtable suppress display of structural model estimates table

loadpval show the outer loadings' p-values

stats print a table of summary statistics for the indicators

group() perform multigroup analysis; see Options for details

correlate() report the correlation among indicators, latent variables and cross loadings; see Options for details

rawsum estimate the latent scores as the raw sum of the indicators

noscale manifest variables are not standardized before running the algorithm

convcrit(relative) relative convergence criterion; the default

convcrit(square) square convergence criterion

by is allowed with plssem; see prefix.

See plssem postestimation and plssemplot for features available after estimation.

The syntax of plssem reflects the measurement and structural part of a PLS-SEM model,
and accordingly requires the user to specify both of these parts simultaneously. Since a
full PLS-SEM model would include a structural model, i.e., the relationship between latent
variables (LV), one needs to have at least two latent variables specified in the measurement
part. Each latent variable will be defined by a block of indicators (say, indblock). For
example, if we have two latent variables in our PLS-SEM model, the plssem syntax requires to
specify the measurement part by typing (LV1 > indblock1) (LV2 > indblock2) following
the command name. Note that we can specify as many LVs as it is needed in the model.

Incidentally, when specifying reflective measures, one needs to use the greater-than sign between
a latent variable and its associated indicators (e.g., LV1 > indblock1) and the less-than sign
for formative measures (e.g., LV1 < indblock1).

To specify the structural part, one simply needs to type in the endogenous/dependent LV first
and then the exogenous latent variable/s, e.g., structural(LV2 LV1). One can specify more than one
structural relationship following the same approach. Say that we have two further latent variables
in the model, LV3 and LV4; then, in the structural part of the syntax we would type in
structural(LV2 LV1, LV4 LV3) indicating that LV4 is another endogenous LV predicted by
LV3. In addition, in line with most of the Stata commands, one can fit a full PLS-PM model by
subsetting the data directly in the syntax using the if and in qualifers.

In plssemmat row and column names of the adjacency matrices provided
are used in the output. Note that, no matter whether plssem or plssemmat
is used, the raw data are still needed. The difference between the two commands is how
the model is specified: through an equation-like style for plssem and with the
adjacency matrices for plssemmat.

In plssemmat each column name of the measurement model adjacency matrix
must specify either "Reflective:" or "Formative:" as the equation names of the columns (see the
examples below).

Description

plssem fits partial least squares structural equation models (PLS-SEM), which is
often considered as an alternative to the commonly known covariance-based structural equation
modeling (COV-SEM). plssem is developed in line with the algorithm provided by
Wold (1975) and Lohmöller (1989). plssem can be used for modeling the relationship
among single-item observed variables too and not only for latent variable modeling.

The algorithm used to estimate a PLS-SEM model consists basically of three sequential stages
of estimation (see Lohmöller 1989). In the first stage, latent variable scores are estimated for each
case. Using these scores, in the second stage, measurement model parameters (weights/loadings)
are estimated. In the same manner, in the third stage structural model parameters (path
coefficients) are finally estimated. The first stage is what makes PLS-SEM a novel method
in that the second and third stages are about conducting a series of regression analysis using the
ordinary least squares method.

Options

wscheme(weighting_scheme)
provides the choice of the weighting scheme. The default is
path for the path scheme. Alternative choices are factorial or centroid for the
corresponding scheme.

binary(LV)
indicates the latent variables that are defined by a single binary variable. This
allows essentially for estimating a model with a binary dependent variable using a logistic
regression model. The LV needs to be specified in the measurement part of the syntax
at the same time (e.g., LV > binaryvar1).

boot(#)
sets the number of bootstrap replications.

seed(#)
sets the seed number for the bootstrap calculations. This option may be useful if
reproducibility is the analyst's concern.

tol(#)
sets the tolerance value used for checking convergence attainment. The default tolerance
value is 1e-7.

maxiter(#)
indicates the maximum number of iterations the algorithm runs. The default is
100 iterations. Note that usually the algorithm requires a very limited number of
iterations to reach convergence, typically less than 10.

missing(imputation_method)
provides the choice for the method to use for imputing the indicator missing values. Possible
choices are mean (i.e. the mean of the available indicators) or knn (i.e. the k-th
nearest neighbor method).

k(#)
sets the number of nearest neighbors to use with missing(knn). The default
number of nearest neighbors is 5.

init(init_method)
lets the user choose between two options for initialization. These
are indsum (default) and eigen. The eigen option also allows the user estimate only the
measurement part of the model.

digits(#)
sets the number of decimals to display the model estimates. The default is 3.

noheader
suppresses the output header.

nodiscrimtable
suppresses discriminant validity assessment section of the output.

nomeastable
suppresses measurement model section of the output.

nostructtable
suppresses structural model section of the output.

loadpval
shows the table of loadings' p-values.

stats
displays some summary statistics (mean, standard deviations, etc.) for the original
indicators.

group(grouping_variable, [sub-options])
provides both the structural and the measurement part of the estimation
results for each category of the grouping variable as well as the comparison
between the categories based on normal-theory (default). As an alternative to
normal-based theory estimations, the user can use two resampling techniques. More
specifically, by adding the suboption method(permutation or bootstrap) one
can get the results based on permutation or bootstrap resampling. The default number
of replications for both permutation and bootstrap is 100. However, this can be
changed by adding the suboption reps(#). Further, with the suboption groupseed(#)
one can also set a certain seed number to be able reproduce the bootstrap or permutation
results. Finally, by using the suboption plot we can get a graphical output
showing the estimates differences between the groups based on alpha level of 0.05
(default). The significance level can also be changed by adding the suboption
alpha(#).

correlate(mv lv cross [, cutoff(#)])
lets the user ask for correlations among the indicators
or manifest variables (mv), latent variables (lv) as well as cross-loadings (cross)
between the indicators and latent variables. When doing so, the user can also set a certain
cut-off value for the correlations to be displayed by using the suboption cutoff(#).
For instance, cutoff(0.3) will display the correlations above 0.3 in absolute terms.

rawsum
uses the sum of the raw indicators and the resulting aggregated scores (also called
summated scales) are used directly for estimating the structural part. In this sense, rawsum
is an alternative procedure to the PLS-algorithm for estimating the latent variable
scores.

noscale
the manifest variables are not standardized before running the algorithm.

convcrit(convergence_criterion)
the convergence criterion to use. Alternative choices are relative or square. The
default is relative.

Examples

Setup

. sysuse workout2, clear

Model estimation

. plssem (Attractive > face sexy) (Appearance > body appear attract) (Muscle > muscle strength endur) (Weight > lweight calories cweight), structural(Appearance Attractive, Muscle Appearance, Weight Appearance)

Inner model graph

. plssemplot, innermodel

Outer weights evolution

. plssemplot, outerweights

Direct, indirect and total effects graph

. estat total, plot

Multicollinearity assessment

. estat vif

Multigroup analysis using bootstrap

. plssem (Attractive > face sexy) (Appearance > body appear attract) (Weight > lweight calories cweight), structural(Appearance Attractive, Weight Appearance) group(women, method(bootstrap) reps(50) plot)

Setup

. sysuse ecsimobi, clear

Model estimation

. plssem (Expectation > CUEX1-CUEX3) (Satisfaction > CUSA1-CUSA3) (Complaints > CUSCO) (Loyalty > CUSL1-CUSL3) (Image > IMAG1-IMAG5) (Quality > PERQ1-PERQ7) (Value > PERV1-PERV2),

structural(Expectation Image, Quality Expectation, Value Expectation Quality, Satisfaction Value Quality Image Expectation, Complaints Satisfaction, Loyalty Complaints Satisfaction

Image) wscheme(path) digits(4) correlate(mv lv cross, cutoff(.3))

Inner model graph

. plssemplot, innermodel

Outer weights evolution

. plssemplot, outerweights

Plot of loadings

. plssemplot, loadings

Setup

. matrix m = (2, 5, 3)

. matrix sd = (.5, 1, 2)

. matrix C = (1, .3, 1, .1, .5, 1)

. drawnorm x1 x2 x3, n(300) means(m) sds(sd) corr(C) cstorage(lower) clear

seed(101)

Model specification

. matrix M = (1, 0 \ 1, 0 \ 0, 1)

. matrix rownames M = x1 x2 x3

. matrix colnames M = y1 y2

. matrix coleq M = Reflective Formative

. matrix S = (0, 1 \ 0, 0)

. matrix rownames S = y1 y2

. matrix colnames S = y1 y2

Model estimation

. plssemmat M, structural(S) wscheme(path) digits(4)

Authors

Sergio Venturini

Department of Management

Università degli Studi di Torino, Italy

sergio.venturini@unito.it

Mehmet Mehmetoglu

Department of Psychology

Norwegian University of Science and Technology

mehmetm@svt.ntnu.no

Stored results

plssem stores the following in e():

Scalars

e(N) number of observations

e(reps) number of bootstrap replications

e(iterations) number of iterations to reach convergence

e(tolerance) chosen tolerance value

e(maxiter) maximum number of iterations allowed

e(converged) equal to 1 if convergence is achieved; 0 otherwise

Macros

e(cmd) plssem

e(cmdline) command as typed

e(estat_cmd) program used to implement estat

e(predict) program used to implement predict

e(title) title in estimation output

e(mvs) list of manifest variables (indicators) used

e(lvs) list of latent variables used

e(binarylvs) sublist of binary latent variables only

e(datasignaturevars) variables used in calculation of checksum

e(datasignature) the checksum

e(reflective) list of latent variables measured in a reflective way

e(formative) list of latent variables measured in a formative way

e(struct_eqs) equations defining the structural model

e(properties) choices of initialization, weighting scheme, imputation method,
whether the bootstrap has been used, whether the model has a structural part, whether the
rawsum option has been used, and whether the manifest variables have been scaled or
not

Matrices

e(loadings) outer loadings matrix

e(loadings_bs) bootstrap-based outer loadings matrix (available only
if the boot() option is chosen)

e(loadings_se) matrix of the outer loadings standard errors

e(cross_loadings) cross loadings matrix

e(cross_loadings_bs) bootstrap-based cross loadings matrix (available only
if the boot() option is chosen)

e(cross_loadings_se) matrix of the cross loadings standard errors

e(adj_meas) adjacency matrix for the measurement (outer) model

e(outerweights) matrix of outer weights

e(ow_history) matrix of outer weights evolution

e(relcoef) matrix of reliability coefficients

e(sqcorr) matrix of squared correlations among the latent variables

e(ave) vector of average variances extracted

e(struct_b) path coefficients matrix (short form)

e(struct_se) matrix of path coefficients' standard errors (short form)

e(struct_table) table combining estimation results for the structural (inner) model

e(pathcoef) path coefficients matrix (extended form)

e(pathcoef_bs) bootstrap-based path coefficients matrix (extended form; available only
if the boot() option is chosen)

e(adj_struct) adjacency matrix for the structural (inner) model

e(total_effects) matrix of the structural (inner) model total effects

e(rsquared) vector of r-squared for reflective latent variables

e(redundancy) vector of redundancies

e(assessment) vector of model quality indices

e(reldiff) vector containing the history of weights' relative differences

e(imputed_data) matrix of imputed indicators; available only if the
the missing option has been used

e(R) latent variable correlation matrix

Functions

e(sample) marks estimation sample

References

Baron, R. M., and Kenny, D. A. 1986. The Moderator-Mediator Variable Distinction in Social Psychological
Research: Conceptual, Strategic, and Statistical Considerations. Journal of
Personality and Social Psychology, 51, 1173-1182.

Hair, J. F., Hult, G. T. M., Ringle, C. M., and Sarstedt, M. 2017. A Primer on Partial Least Squares Structural Equation Modeling (PLS-SEM). Second edition. Sage.

Lohmöller, J. B. 1989. Latent Variable Path Modeling with Partial Least Squares. Heidelberg: Physica.

Sobel, M. N. 1982. Asymptotic Confidence Intervals for Indirect Effects in Structural Equations
Models. In Leinhart, S. (ed.), Sociological Methodology, pp. 290-312. Jossey-Bass.

VanderWeele, T. J. 2015. Explanation in Causal Inference. Oxford University Press.

Wold, H. O. A. 1975. Path Models with Latent Variables: The NIPALS Approach.
In Blalock, H. M., Aganbegian, A., Borodkin, F. M., Boudon, R., and Cappecchi, V. (ed.), Quantitative Sociology (pp. 307-359). New York: Academic Press.