In lavaan, are formative factors equivalent to Bollen & Bauldry's (2011) "composite" factors?

1,714 views
Skip to first unread message

Jake L

unread,
Apr 26, 2016, 2:20:17 PM4/26/16
to lavaan
Hi, All:

I am in the process of working out a model with both formative/causal measures and effect indicators.  In the process of figuring out how to use lavaan to specify formative indicators I ran across the following in the model.syntax documentation:

Formative factors: The "<~" operator can be used to define a formative factor (on the right hand side of the operator), in a similar why as a reflexive factor is defined (using the "=~" operator). This is just syntax sugar to define a phantom latent variable (equivalent to using "f =~ 0"). And in addition, the (residual) variance of the formative factor is fixed to zero.


 I added the bold just to highlight what I'm focused on: does this mean that when a factor is specified as formative in lavaan, it is specified without a disturbance or variance term, and so is equivalent to what Bollen and Bauldry call "Composite Indicators" in their 2011 paper Three Cs in Measurement Models:

Composite indicators are weighted elements that form a composite variable for which there is no disturbance term. (2011, p. 268)

I'm asking because if so I am wondering if there is a way to instead have lavaan treat these factors as what the same authors call "causal" factors, which are caused rather than determined perfectly by their indicators.  In my model I do not think a composite is appropriate (although I have yet to actually specify it and check!); more importantly I wanted to know exactly what I was doing before I started modeling.

Thanks so much for your help!

Best,
Jake 

Mikko Rönkkö

unread,
Apr 26, 2016, 3:34:47 PM4/26/16
to lav...@googlegroups.com
Hi,

On 26 Apr 2016, at 21:20 , Jake L <gloss...@gmail.com> wrote:

Hi, All:

I am in the process of working out a model with both formative/causal measures and effect indicators.  In the process of figuring out how to use lavaan to specify formative indicators I ran across the following in the model.syntax documentation:

Formative factors: The "<~" operator can be used to define a formative factor (on the right hand side of the operator), in a similar why as a reflexive factor is defined (using the "=~" operator). This is just syntax sugar to define a phantom latent variable (equivalent to using "f =~ 0"). And in addition, the (residual) variance of the formative factor is fixed to zero.


 I added the bold just to highlight what I'm focused on: does this mean that when a factor is specified as formative in lavaan, it is specified without a disturbance or variance term, and so is equivalent to what Bollen and Bauldry call "Composite Indicators" in their 2011 paper Three Cs in Measurement Models:

Composite indicators are weighted elements that form a composite variable for which there is no disturbance term. (2011, p. 268)

Yes.


I'm asking because if so I am wondering if there is a way to instead have lavaan treat these factors as what the same authors call "causal" factors, which are caused rather than determined perfectly by their indicators.  In my model I do not think a composite is appropriate (although I have yet to actually specify it and check!); more importantly I wanted to know exactly what I was doing before I started modeling.

Thanks so much for your help!

You can add the error term in a couple of ways. First, you can define the formative LV and then free its error variance

F <~ x1 + x2 + x3
F ~~ F

Alternatively, you can just define a latent variable without indicators and regress it on the x’s

F =~ 0
F ~ x1 + x2 + x3

I prefer the latter syntax because it is more difficult to unintentionally specify a composite model with this syntax. Note that in both specifications you may need to manually fix some of the parameters to known non-zero values to identify the model.

Mikko


Best,
Jake 

--
You received this message because you are subscribed to the Google Groups "lavaan" group.
To unsubscribe from this group and stop receiving emails from it, send an email to lavaan+un...@googlegroups.com.
To post to this group, send email to lav...@googlegroups.com.
Visit this group at https://groups.google.com/group/lavaan.
For more options, visit https://groups.google.com/d/optout.

Jake L

unread,
Apr 26, 2016, 3:41:07 PM4/26/16
to lavaan
Well, that seems easy enough.  Thanks for the quick response!

Osama Abdelhay

unread,
May 29, 2018, 6:49:01 AM5/29/18
to lavaan
Dear Mikko,

What do you mean by "Note that in both specifications you may need to manually fix some of the parameters to known non-zero values to identify the model.". As I keep receiving an error message about negative variance and inability to estimate standard errors.

Warning messages:
1: In lav_model_vcov(lavmodel = lavmodel, lavsamplestats = lavsamplestats,  :
  lavaan WARNING: could not compute standard errors!
  lavaan NOTE: this may be a symptom that the model is not identified.

2: In lav_object_post_check(object) :
  lavaan WARNING: some estimated ov variances are negative


Regards,

Osama

Mikko Rönkkö

unread,
May 29, 2018, 6:57:03 AM5/29/18
to lav...@googlegroups.com
Hi,

You need to specify the scale of the latent variable. Particularly, how do we determine the variance of formative factor? One way to do that is to fix the first causal weigh to 1.

Giving some more context, for example the model that your trying to estimate, would be useful.

Mikko

Osama Abdelhay

unread,
May 29, 2018, 7:14:30 AM5/29/18
to lavaan
Thank Mikko,

Here is the model I am trying to fit: I have two latent variables (formative LVs). LV1 contains formed by two indicators, and LV2 formed by 4 indicators. The two LVs are also correlated and we assume that they causally affect a third LV (LV3) which is a reflective LV that contains 5 indicators.

The model I am trying to fit using lavaan is as follows:

model <- '
lv1 =~ 0
lv1 ~ x1 + x2

lv2 =~ 0
lv2 ~ x3 + x4 + x5 + x6

lv3 =~ x7 + x8 + x9 + x10 + x11

####### path modelling ##########
lv1 ~ lv2
lv3 ~ lv1 + lv2

####### Reflective model residuals correlations ##########
x7 ~~ x8
x7 ~~ x9
x7 ~~ x10
x7 ~~ x11
x8 ~~ x9
x8 ~~ x10
x8 ~~ x11
x9 ~~ x10
x9 ~~ x11
x10 ~~ x11
'


####### fitting the model ########
fit <- sem(model, data=dataset1)
summary(fit, standardized=TRUE)

Mikko Rönkkö

unread,
May 29, 2018, 7:20:51 AM5/29/18
to lav...@googlegroups.com
Hi,

I recommend that you rewrite the model a bit differently to simplify:

lv1 =~ 0
lv1 ~ x1 + x2 + lv2

lv2 =~ 0
lv2 ~ x3 + x4 + x5 + x6

lv3 =~ x7 + x8 + x9 + x10 + x11 + lv1 + lv2
lv3 ~ lv1 + lv2

####### Reflective model residuals correlations ##########
x7 ~~ x8
x7 ~~ x9
x7 ~~ x10
x7 ~~ x11
x8 ~~ x9
x8 ~~ x10
x8 ~~ x11
x9 ~~ x10
x9 ~~ x11
x10 ~~ x11

Is that what you want to estimate?


The reason that the model is not identified is that in the regressions:

lv1 ~ x1 + x2 + lv2
lv2 ~ x3 + x4 + x5 + x6

The dependent variable does not have any observed consequences. This is the reason why many article recommend adding two effect (reflective) indicators to causal indicator models.

Mikko

Osama Abdelhay

unread,
May 29, 2018, 7:46:58 AM5/29/18
to lavaan
Thanks again,

So, in other words, you are suggesting that I use a different approach to define my formative latent variables?! because even with your simplified model I am still getting the same errors.

Best,

Osama

Mikko Rönkkö

unread,
May 29, 2018, 8:10:11 AM5/29/18
to lav...@googlegroups.com
H,

Yes. My mode was the same as yours, but presented in a simpler form. I assume that you want to define lv1 as a sum of x1 and x2, which you regress on lv2, but your model presented lv1 as a sum of x1, x2, and lv2. If you want to define a model where lv1 is defined as sum of x1 and x2, a lot simpler approach would be to just calculate that sum outside lavaan, drop the original variables, and use the sum instead in your model. 

Doing this for both lv1 and lv2 will identify your model.

Alternatively, do you need lv1 and lv2? Why not just regress lv3 on x1-x6 and interpret those results. That would be identified as well.

Mikko

Osama Abdelhay

unread,
May 30, 2018, 6:08:29 AM5/30/18
to lavaan
Hi,

I appreciate your immense help Mikko. I tried your suggestion by taking LV1 and LV2 out and directly regress LV3 over their indicators.

model <- '

LV3 =~ x7 + x8 + x9 + x10 + x11

####### path modelling ##########
LV3 ~ x1 + x2 + x3 + x4 + x5 + x6

####### Reflective model residuals correlations ##########
x7 ~~ x8
x7 ~~ x9
x7 ~~ x10
x7 ~~ x11
x8 ~~ x9
x8 ~~ x10
x8 ~~ x11
x9 ~~ x10
x9 ~~ x11
x10 ~~ x11

'


####### fitting the model ########
fit <- sem(model, data=datastructural2)
summary(fit, standardized=TRUE)


#############The model do not converge


This model do not converge even after over 10,000 iterations. 

And for this suggestion " If you want to define a model where lv1 is defined as sum of x1 and x2, a lot simpler approach would be to just calculate that sum outside lavaan, drop the original variables, and use the sum instead in your model", I am not sure I am getting it. For example if x1 = 1 and x2 = 4 and both of them are nominal or categorical or then LV1 = 5?! is that what you suggest?!

Thanks again
Osama

Mikko Rönkkö

unread,
May 30, 2018, 8:38:54 AM5/30/18
to lav...@googlegroups.com
Hi,

Non-convergence is a strong indication that your model is not identified. Consider that you scale L3 by constraining its variance to 1. The ovariance cov(x1, x7) is the product of regression of L3 on x1 and x7 on L3. In your model you have no empirical basis of how to split this covariance as the two paths that imply it. I use this scale setting approach because the underidentificatiin is easier to understand this way.

If you scale the latent variable by fixing the loading of x7 to 1, then the variance of L3 is not identified.

The reason for non-identification is that you free all the error covariance of x7-x10.

Mikko

Osama Abdelhay

unread,
Jun 2, 2018, 6:17:00 PM6/2/18
to lavaan
Hi,

Thanks again Mikko, would you please elaborate a little bit more as I did not get the idea to be honest with you.

Best,

Osama

Giulio Caperna

unread,
Jul 16, 2018, 9:02:27 AM7/16/18
to lavaan
Hello, I am Giulio Caperna from Jrc in Italy.

I hope you received some email from me.

Is there any update with respect to this topic?

Best
Reply all
Reply to author
Forward
0 new messages