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") ) mxOption(NULL,"Default optimizer","CSOLNP") ch4M3c <- mxRun(empModel, intervals=TRUE) summary(ch4M3c,verbose=T) mxOption(NULL,"Default optimizer","SLSQP") ch4M3s <- mxRun(empModel, intervals=TRUE) summary(ch4M3s,verbose=T) mxOption(NULL,"Default optimizer","NPSOL") ch4M3n <- mxRun(empModel, intervals=TRUE) summary(ch4M3n,verbose=T) #imxRobustSE(ch4M3)