# load library library(mvtnorm) library(OpenMx) # set sim parameters n <- 1000 mi <- 50 ms <- 0.05 vi <- 10 vs <- .1 isc <- .5 rv <- 2 # make age variables ages <- c(10, 20, 30, 40, 50) ages0 <- ages - 10 ages1 <- ages - 30 ages2 <- ages - 50 # make latent variables and data beta <- rmvnorm(n, mean=c(mi, ms), sigma=matrix(c(vi, isc/sqrt(vi*vs), isc/sqrt(vi*vs), vs), 2, 2)) load0 <- rbind(1, ages0) load1 <- rbind(1, ages1) load2 <- rbind(1, ages2) ed <- as.data.frame(beta %*% load1 + matrix(rnorm(n*5, 0, rv), n, 5)) varNames <- names(ed) # remove data at all but one timepoint ed0 <- ed ed1 <- ed ed2 <- ed ed0[1:round(n/2), 2:5] <- NA ed1[1:round(n/2), c(1,2,4,5)] <- NA ed2[1:round(n/2), 1:4] <- NA summary(ed0) plot(range(ages), range(ed), type="n", xlab="Age", ylab="Outcome") for (i in 1:n){ lines(ages, ed[i,]) } eric00 <- mxModel("LGC", type="RAM", mxData(ed0, "raw"), manifestVars=varNames, latentVars=c("I", "S"), mxPath("I", varNames, free=FALSE, values=1), mxPath("S", varNames, free=FALSE, values=ages0), mxPath(c("I", "S"), arrows=2, values=1, labels=c("varI", "varS")), mxPath("I", "S", arrows=2, values=isc, labels="covIS"), mxPath(varNames, arrows=2, values=1, labels="resid"), mxPath("one", c("I", "S"), values=c(mi, ms), labels=c("meanI", "meanS")) ) eric01 <- mxModel(eric00, mxPath("S", varNames, free=FALSE, values=ages1) ) eric02 <- mxModel(eric00, mxPath("S", varNames, free=FALSE, values=ages2) ) re00 <- mxRun(eric00) re01 <- mxRun(eric01) re02 <- mxRun(eric02)