# NOT RUN {
# ====================================
# = Demonstration for empirical=TRUE =
# ====================================
popCov <- cov(Bollen[, 1:8])*(nrow(Bollen)-1)/nrow(Bollen)
got <- mxGenerateData(Bollen[, 1:8], nrows=nrow(Bollen), empirical = TRUE)
cov(got) - popCov # pretty close, given 8 variables to juggle!
round(cov2cor(cov(got)) - cov2cor(popCov), 4)
# ===========================================
# = Create data based on state space model. =
# ===========================================
require(OpenMx)
nvar <- 5
varnames <- paste("x", 1:nvar, sep="")
ssModel <- mxModel(model="State Space Manual Example",
mxMatrix("Full", 1, 1, TRUE, .3, name="A"),
mxMatrix("Zero", 1, 1, name="B"),
mxMatrix("Full", nvar, 1, TRUE, .6, name="C", dimnames=list(varnames, "F1")),
mxMatrix("Zero", nvar, 1, name="D"),
mxMatrix("Diag", 1, 1, FALSE, 1, name="Q"),
mxMatrix("Diag", nvar, nvar, TRUE, .2, name="R"),
mxMatrix("Zero", 1, 1, name="x0"),
mxMatrix("Diag", 1, 1, FALSE, 1, name="P0"),
mxMatrix("Zero", 1, 1, name="u"),
mxExpectationStateSpace("A", "B", "C", "D", "Q", "R", "x0", "P0", "u"),
mxFitFunctionML()
)
ssData <- mxGenerateData(ssModel, 200) # 200 time points
# Add simulated data to model and run
ssModel <- mxModel(ssModel, mxData(ssData, 'raw'))
ssRun <- mxRun(ssModel)
# Compare parameters from random data to the generating model
cbind(Rand = omxGetParameters(ssRun), Gen = omxGetParameters(ssModel))
# Note the parameters should be "close" (up to sampling error)
# to the generating values
# =========================================
# = Demo generating new data from a model =
# =========================================
require(OpenMx)
manifests <- paste0("x", 1:5)
originalModel <- mxModel("One Factor", type="RAM",
manifestVars = manifests,
latentVars = "G",
mxPath(from="G", to=manifests, values=.8),
mxPath(from=manifests, arrows=2, values=.2),
mxPath(from="G" , arrows=2, free=FALSE, values=1.0),
mxPath(from = 'one', to = manifests)
)
factorData <- mxGenerateData(originalModel, 1000)
newData = mxData(cov(factorData), type="cov",
numObs=nrow(factorData), means = colMeans(factorData)
)
newModel <- mxModel(originalModel, newData)
newModel <- mxRun(newModel)
cbind(
Original = omxGetParameters(originalModel),
Generated = round(omxGetParameters(newModel), 4),
Delta = round(
omxGetParameters(originalModel) -
omxGetParameters(newModel), 3)
)
# And again with empirical = TRUE
factorData <- mxGenerateData(originalModel, 1000, empirical = TRUE)
newData = mxData(cov(factorData),
type = "cov",
numObs = nrow(factorData),
means = colMeans(factorData)
)
newModel <- mxModel(originalModel, newData)
newModel <- mxRun(newModel)
cbind(
Original = omxGetParameters(originalModel),
Generated = round(omxGetParameters(newModel), 4),
Delta = omxGetParameters(originalModel) -
omxGetParameters(newModel)
)
# }
Run the code above in your browser using DataLab