Specify a structural equation model with constraints.
specify_sem(num.x, num.y, num.xi, num.eta, xi, eta, 
              constraints = c("indirect", "direct1", "direct2"),
              num.classes = 1, rel.lat = "default", interaction = "none")An object of class singleClass, semm, or nsemm
which can be used to estimate parameters using em that
  consists of the following components:
list of matrices specifying the structural equation model.
list of informations about structural equation model.
number of observed variables for xi.
number of observed variables for eta.
number of latent exogenous variabeles.
number of latent endognous variables.
which observed variables are indicators for which exogenous variable. See Details.
which observed variables are indicators for which endogenous variable. See Details.
which should be set for a model with more than one latent class. See Details.
number of latent classes.
define which interaction terms should be included. Default is `none'. See Details for how to enter interaction terms.
define relations between latent variables. Influences Beta and Gamma matrices. For `defaults' and how to define see Details.
The notation for the matrices given back by specify_sem
  follows typical notation used in structural equation modeling. The
  notation, of course, may vary dependingly. Therefore, here are examples
  for typical structural equation models with the notation used by
  specify_sem (in matrix notation):
Structural model for LMS, QML (nonlinear SEM), and NSEMM (nonlinear SEM with latent classes): $$\boldsymbol{\eta} = \boldsymbol{\alpha} + \boldsymbol{\Gamma} \boldsymbol{\xi} + \boldsymbol{\xi}' \boldsymbol{\Omega} \boldsymbol{\xi} + \boldsymbol{\zeta}$$
Structural model for SEMM (linear SEM with latent classes): $$\boldsymbol{B} \boldsymbol{\eta} = \boldsymbol{\alpha} + \boldsymbol{\Gamma} \boldsymbol{\xi} + \boldsymbol{\zeta}$$
Measurement model: $$\textbf{x} = \boldsymbol{\nu}_x + \boldsymbol{\lambda}_x \boldsymbol{\xi} + \boldsymbol{\delta}$$ $$\textbf{y} = \boldsymbol{\nu}_y + \boldsymbol{\lambda}_y \boldsymbol{\eta} + \boldsymbol{\varepsilon}$$
Which indicators belong to which latent variable is defined by
  xi and eta. Must be specified in the following way:
  xi='x1-x2,x3-x4' which means that variables x1, x2 are
  indicators for xi1 and x3, x4 are indicators for
  xi2. And accordingly for the endogenous variables eta.
Interactions between latent exogenous variables are defined by
  interaction='eta1~xi1:xi2,eta1~xi1:xi1'. It is important to note,
  that interactions must always start with xi1 and build from there.
  A definition like interaction='eta1~xi1:xi2,eta1~xi2:xi3' is not
  feasible and must be changed to
  interaction='eta1~xi1:xi2,eta1~xi1:xi3' (by simple switching
  xi1 and xi2 in one's definitions). interaction fills
  the \(\bf \Omega\) matrix (see above) and must always be a
  triangular matrix where the lower triangle is filled with 0's (see Klein
  & Moosbrugger, 2000, for details).
rel.lat defines which latent variables influence each
  other. It must be defined like
  rel.lat='eta1~xi1+xi2,eta2~eta1'. Free parameters will be
  set accordingly in \(\bf B\) and \(\bf \Gamma\)
  matrices. When nothing is defined, \(\bf \Gamma\) defaults to
  all NAs (which means all \(\xi\)'s influence all
  \(\eta\)'s) and \(\bf B\) is an identity matrix.
Structural equation models with latent classes like SEMM and NSEMM can be
  used in two different approaches usually called direct and indirect. When
  constraints are set to indirect then parameters for the latent
  classes are constraint to be equal except for the parameters for the
  mixture distributions (\(\tau\)'s and \(\Phi\)). In a
  direct approach, parameters for the latent classes are estimated
  independently. For direct1 all parameters will be estimated
  independently for each latent class. For direct2 it is assumed
  that the measurement model is equal for both groups and only the
  parameters for the mixtures and the structural model are estimated
  separately.
Jedidi, K., Jagpal, H. S., & DeSarbo, W. S. (1997). STEMM: A General Finite Mixture Structural Equation Model, Journal of Classification, 14, 23--50. doi:http://dx.doi.org/10.1007/s003579900002
Kelava, A., Nagengast, B., & Brandt, H. (2014). A nonlinear structural equation mixture modeling approach for non-normally distributed latent predictor variables. Structural Equation Modeling, 21, 468-481. doi:http://dx.doi.org/10.1080/10705511.2014.915379
Klein, A. &, Moosbrugger, H. (2000). Maximum likelihood estimation of latent interaction effects with the LMS method. Psychometrika, 65, 457--474. doi:http://dx.doi.org/10.1007/bf02296338
Klein, A. &, Muthen, B. O. (2007). Quasi-Maximum Likelihood Estimation of Structural Equation Models With Multiple Interaction and Quadratic Effects. Multivariate Behavior Research, 42, 647--673. doi:http://dx.doi.org/10.1080/00273170701710205
create_sem
# with default constraints
model <- specify_sem(num.x = 6, num.y = 3, num.xi = 2, num.eta = 1,
  xi = "x1-x3,x4-x6", eta = "y1-y3")
# create data frame
specs <- as.data.frame(model)
# and add custom constraints
constr <- c(1, NA, NA, 0, 0, 0, 0, 0, 0, 1, NA, NA, 1, NA, NA, NA, NA, 1, NA,
  0, 0, 0, 0, 0, 0, NA, 0, 0, 0, 0, 0, 0, NA, 0, 0, 0, 0, 0, 0, NA, 0, 0, 0,
  0, 0, 0, NA, 0, 0, 0, 0, 0, 0, NA, NA, 0, 0, 0, NA, 0, 0, 0, NA, NA, NA,
  NA, 0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0, 0, 0, 0, NA, 0)
specs$class1 <- constr
# create model from data frame
model.custom <- create_sem(specs)
Run the code above in your browser using DataLab