

CFA with control variables 

Message/Author 

gibbon lab posted on Tuesday, April 26, 2011  8:08 pm



I want to run a CFA with a control variable. The model equations are y1=a0+a1*U+a2*z+epsilon1, y2=b0+b1*U+b2*z+epsilon2, where y1 and y2 are dependent manifest variables, z is the manifest control variable and U is the latent variable, epsilon1 and epsilon2 are errors, and a0,a1,a2,b0,b1 and b2 are regression intercepts and coefficients. Is the following code in Mplus right? Thanks. U by y1 y2; y1 y2 on z; Or should it be the following? U by y1 y2; U on z; Thanks. 


It should be your first alternative. But, it is typically the case that z influences U as well, calling for U on z; Note however, that you cannot identify all 3 effects: y1 y2 on z; U on z; 

gibbon lab posted on Wednesday, April 27, 2011  2:09 pm



Dr. Muthen, Thanks a lot for the reply. When you say all the 3 effects cannot be identified, do you mean that I should not put "y1 y2 on z" and "U on z" in the model at the same time since it will cause unidentifiability problem? Another related question, I am reading your 2002 paper "Beyond SEM: general latent variable modeling". Noticed that the measurement part and the structural part in the proposed model controlled for the same set of covariates. Will the theory be broken if these two parts control for two different sets of variables, or it does not matter and the theory and coding work in the same way? 


Right. You can have different sets of covariates for the factors and the factor indicators. That is, you can fix at zero any of the effects of the covariates that you desire. 

gibbon lab posted on Thursday, April 28, 2011  1:26 am



Dr. Muthen, Do you mean "fix at zero any of the effects of the covariates that I do NOT desire"? Thanks. For example, x and z are the two control variables I will use. But I want to control z in the measurement part and x in the structural part. The measurement equations are y1=a0+a1*U+a2*z+epsilon1, y2=b0+b1*U+b2*z+epsilon2, y3=c0+c1*V+c2*z+epsilon3, y4=d0+d1*V+d2*z+epsilon4, and the structural equation is U=beta0+beta1*v+beta2*x+epsilon5. In the mplus, can I use the following code? U by y1 y2; V by y3 y4; y1 y2 y3 y4 on z; U on V x; Or I have to use this? U by y1 y2; V by y3 y4; y1 y2 y3 y4 on x z; U on V x z; y1 y2 y3 y4 on x@0; U on z@0; Thanks. 


I would use the first approach, but the two approaches give the same result. When Mplus reads your first input, it interprets it the same way as the second. Try both and you will see that you get the same results. If you are familiar with matrix expressions, ask for and study Tech1. The equivalence is to be expected because you have 2 covariates x and z, and they influence different parts of the model. In relations where they are not mentioned, their effect is zero. 

gibbon lab posted on Thursday, April 28, 2011  5:05 pm



Dr. Muthen, Thanks a lot. 

Back to top 

