You are here

mxEval with Run State Space Model

Charles Driver found this odd behavior: https://openmx.ssri.psu.edu/thread/3948

On a state space expectation model that has been run, mxEval does not correctly find/use at least some definition variables.

require(OpenMx)
 
data(demoOneFactor)
nvar <- ncol(demoOneFactor)
varnames <- colnames(demoOneFactor)
demoOneFactorInputs <- cbind(demoOneFactor, V1=rnorm(nrow(demoOneFactor)))
ssModel <- mxModel(model="State Space Inputs Manual Example",
mxMatrix("Full", 1, 1, TRUE, .3, name="A"),
mxMatrix("Full", 1, 1, TRUE, values=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("Full", 1, 1, FALSE, labels="data.V1", name="u"),
mxData(observed=demoOneFactorInputs, type="raw"),
mxExpectationStateSpace("A", "B", "C", "D", "Q", "R", "x0", "P0", u="u"),
mxFitFunctionML()
)
ssRun <- mxRun(ssModel)
 
mxEval(data.V1, ssRun, compute=T, defvar.row=1) #NA
Reporter: 
Created: 
Mon, 02/02/2015 - 12:51
Updated: 
Mon, 02/02/2015 - 20:18

Comments

It turns out this is an issue related to data sorting. Any model with data sorting turned off can't evaluate its definition variables after it has been run. See below for example.

require(OpenMx)
data(demoOneFactor)
manifests <- names(demoOneFactor)
latents <- c("G")
factorModel <- mxModel("One Factor",
       type="RAM",
       manifestVars = manifests,
       latentVars = latents,
       mxPath(from=latents, to=manifests),
       mxPath(from=manifests, arrows=2),
       mxPath(from=latents, arrows=2,
             free=FALSE, values=1.0),
       mxPath(from = 'one', to = manifests),
       mxMatrix(name="blah", nrow=1, ncol=1, labels="data.x1"),
       mxData(demoOneFactor, type="raw"))
factorRun <- mxRun(factorModel)
 
mxEval(blah, factorRun, compute=TRUE, defvar.row=1)
 
mxEval(blah, factorModel, compute=TRUE, defvar.row=1)
 
factorNoSort <- mxOption(factorModel, "No Sort Data", "One Factor")
factorNoSortRun <- mxRun(factorNoSort)
 
mxEval(blah, factorNoSort, compute=TRUE, defvar.row=1)
 
mxEval(blah, factorNoSortRun, compute=TRUE, defvar.row=1)
# NA !!!

This is because running makes the data set say it @.isSorted but when sorting is turned off the @indexVector is NA. See lines 44-46 of DefinitionVars.R.

I modified the data sorting slightly. Fixed in r4208.