library(OpenMx) mxVersion() flatData <- read.table("ch4mv.dat") colnames(flatData) <- c("orgid",'female','white', 'satpay','morale','org1','org2','benefit','cond', 'resour','zproduct','lev1wt','lev2wt') level1 <- flatData[,c('benefit','cond','female','white','orgid')] level2 <- flatData[!duplicated(flatData$orgid),c('orgid', 'org1','org2','zproduct')] orgModel <- mxModel( "org", type="RAM", mxData(level2, 'raw', primaryKey = "orgid"), manifestVars = c('zproduct'), latentVars = c('Benefits','Conditions', 'org1','org2'), mxPath(c('zproduct','Benefits','Conditions'), arrows=2, values=1), mxPath('Benefits','Conditions', arrows=2), mxPath('one', 'org1', labels='data.org1', free=FALSE), mxPath('one', 'org2', labels='data.org2', free=FALSE), mxPath('org1', c('Benefits', 'Conditions')), mxPath('org2', 'zproduct', labels="a"), mxPath('one', 'zproduct'), mxPath('zproduct', c('Benefits','Conditions'), labels=paste0('b',1:2)), mxMatrix(nrow=2, ncol=1, free=TRUE, labels=paste0('b',1:2), name='B'), mxAlgebra(B * a, name="indirect") ) empModel <- mxModel( "emp", type="RAM", orgModel, mxData(level1, 'raw'), manifestVars = c('benefit','cond'), latentVars = c('female','white'), mxPath('one','female', labels='data.female', free=FALSE), mxPath('one','white', labels='data.white', free=FALSE), mxPath(c('female','white'), c('benefit','cond'), connect = "all.bivariate"), mxPath(c('benefit','cond'), arrows=2, connect = "unique.pairs", values=c(1,0,1)), mxPath('org.Benefits', 'benefit', values=1, free=FALSE, joinKey = "orgid"), mxPath('org.Conditions', 'cond', values=1, free=FALSE, joinKey = "orgid"), mxPath('one', c('benefit','cond')), mxCI("org.indirect") ) omxGetParameters(empModel) empModel <- omxSetParameters(empModel,labels=names(omxGetParameters(empModel)), values=c(0.697, 0.706, 0.224, 0.247, 2.029, 1.344, 1.948, 4.422, 4.684, 0.309, 0.289, 0.278, 0.309, -0.451, 1.071, 0.133, 0.095, 0.093, 0.087)) omxGetParameters(empModel) mxOption(NULL,"Default optimizer","CSOLNP") ch4M3c <- mxRun(empModel,useOptimizer=F) ch4M3c$output$fit ch4M3c <- mxRun(ch4M3c, intervals=TRUE) summary(ch4M3c,verbose=T)