I am running a CFA and would like to use the "effects coding" method of identification described by Little, Slegers, and Card (2006). In the effects coding method, the loadings of a factor are constrained so that the average of the loadings equals 1 and the average of the intercepts equals 0. How can I do this with OpenMx? I imagine it involves mxConstraint or mxAlgebra, but am not sure where to begin. Here's a small example of a model that I'd like to modify to use effects coding:
oneFactorModel <- mxModel("CFA",
type="RAM",
manifestVars=c("x1","x2","x3","x4","x5","x6"),
latentVars="LatentFactor1",
#Data
mxData(observed=myFADataRaw, type="raw"),
#Residual Variances
mxPath(from=c("x1","x2","x3","x4","x5","x6"),
arrows=2,
free=TRUE,
values=c(1,1,1,1,1,1),
labels=c("e1","e2","e3","e4","e5","e6")),
#Latent Variance
mxPath(from="LatentFactor1",
arrows=2,
free=TRUE,
values=1,
labels ="varF1"),
#Factor Loadings
mxPath(from="LatentFactor1",
to=c("x1","x2","x3","x4","x5","x6"),
arrows=1,
free=c(FALSE,TRUE,TRUE,TRUE,TRUE,TRUE),
values=c(1,1,1,1,1,1),
labels =c("loading1","loading2","loading3","loading4","loading5","loading6")),
#Means
mxPath(from="one",
to=c("x1","x2","x3","x4","x5","x6","LatentFactor1"),
arrows=1,
free=c(TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE),
values=c(1,1,1,1,1,1,0),
labels =c("meanx1","meanx2","meanx3","meanx4","meanx5","meanx6",NA)))
Thanks!
-Isaac
Here's an example. It takes the frontpage model, and identifies it by fixing the mean of the factor loadings to be 1. This is done by setting one of the loadings to be a function of the others. It could also be done with an
mxConstraint
, but using anmxAlgebra
will make it run a bit faster.Here's the output.