# How to use formative indicators in covariance-based SEM with lavaan?

I'm trying to build a covariance-based structural equation model (SEM) using both reflective and formative specifications of latent variables. I use the sem function in the lavaan package for estimation (R version 3.1.3, lavaan version 0.5-18). But estimates turn always out to be zero which is unreasonable.

The lavaan model syntax uses =~ for reflective specification of latent variables, <~ for formative specification of latent variables, and ~ for regressions (http://www.inside-r.org/packages/cran/lavaan/docs/model.syntax). Here is a simple working example with only reflective specifications (it is a simplified version of the example provided at http://lavaan.ugent.be/tutorial/sem.html and by example(sem))

library(lavaan)
model <- '
# latent variable definitions
ind60 =~ x1 + x2
dem60 =~ y1 + y2
# regressions
dem60 ~ ind60
'
summary(sem(model, data=PoliticalDemocracy))


Now assume that based on prior theory I would know that dem60 is a formative construct composed of y1 and y2. Thus I change the specification from =~ to <~ and obtain the following code

library(lavaan)
model <- '
# latent variable definitions
ind60 =~ x1 + x2
dem60 <~ y1 + y2
# regressions
dem60 ~ ind60
'
summary(sem(model, data=PoliticalDemocracy))


The estimates for both y1 and y2 turn out to be zero. Analogously, the regression effect of ind60 on dem60 turns out to be zero. What do I need to change to get a meaningful result?

Several websites and blogs suggested the following modifications:

1. Fix one parameter in the formative construct, i.e. dem60 <~ 1*y1 + y2.
2. Allow for covariance of the manifest indicators, i.e. y1 ~~ y2.
3. Fix the variance of the formative construct, i.e. dem60 ~~ 1.
4. Free the variance of the formative construct, i.e. dem60 ~~ NA*dem60.

None of these are working. Again: What do I need to change to get a meaningful result?

• The error term for dem60 is not identified. Note if you switch the direction of ind60 and dem60 (and fix one of the parameters) the lavaan will spit out an estimate (i.e. model <- 'ind60 =~ 1*x1 + x2 \n dem60 <~ 1*y1 + y2 \n ind60 ~ dem60'). Although that model is still a Heywood case. If you add another manifest variable and fix the variance it appears to be identified (e.g. model <- 'ind60 =~ 1*x1 + x2 + x3 \n dem60 <~ 1*y1 + y2 \n ind60 ~ dem60 \n ind60 ~~ 1*ind60'). – Andy W May 29 '15 at 12:35
• More generally, you need some type of external information to identify the formative construct. If you don't have that information, you might as well just look at y1 ~ ind60 and y2 ~ ind60. – Andy W May 29 '15 at 12:41