## Non-homogeneous Error Variance Test Model
# Two factor model
# Two latents predict three manifests. Regression weights between latents and
# manifests are fixed, variances for latents are free, variances between manifests
# are specified by a fixed error covariance matrix multiplied by a scalar error
# parameter. This is implemented by labeling all free terms in the symmetric matrix
# and linearly constraining them relative to each other.
# In this model, the error matrix is very simple: homogeneous along the diagonal, but
# with a covariance between two of the manifest variables.
# Written by Daniel Hackett, July 2011
require(OpenMx)
require(MASS)
manifests <- c('X','Y','Z')
latents <- c('G', 'H')
dataCov <- rbind(c(4,3,1),c(3,4,1),c(1,1,2))
dataMean <- c(2,1,3)
#set.seed(42)
#raw <- mvrnorm(n=100, mu=dataMean, Sigma=dataCov)
names(dataMean) <- manifests
#colnames(raw) <- manifests
colnames(dataCov) <- manifests
rownames(dataCov) <- manifests
factorModel <- mxModel("Two Factor NHEV",
type="RAM",
manifestVars = manifests,
latentVars = latents,
mxPath(from='G', to=manifests,value=c(3,2,1),free=FALSE),
mxPath(from='H', to=manifests,value=c(1,2,3),free=FALSE),
mxConstraint('E2' == 0.5*'E1', name="Constraint"),
mxPath(from=manifests, arrows=2,value=c(10,10,10), labels=c('E1','E1','E1')),
mxPath(from='X', to='Y', arrows=2, value=5, labels='E2'),
mxPath(from='one', to=latents, arrows=1, value=c(1,1), labels=c('m_G', 'm_H')),
mxPath(from='G', to='H', arrows=2, values=0.1, labels='C_GH', free=TRUE),
mxPath(from=latents, arrows=2,
values=1.0),
mxData(dataCov, type="cov", means=dataMean, numObs=100)
# mxData(raw, type="raw", numObs=100)
)
imxPPML.Test.Battery(factorModel, testMissingness = FALSE, tolerances = c(NA, .0001, .0001) )