how to test is a model is a RAM model

5 replies [Last post]
tbates's picture
Offline
Joined: 07/31/2009

The new 2-part objectives in OpenMx mean an older method for testing if a model is a RAM model don't work

I used to say this:

(isS4(obj) && is(obj, "MxModel") && class(obj$objective)[1] == "MxRAMObjective")

What code do people recommend for backward (and preferably forward compatible testing of model type? Do we need to add a type= field to MXModel?

best, tim

Ryne's picture
Offline
Joined: 07/31/2009
Haven't gotten this far in

Haven't gotten this far in the Expectation/Fit split, but it'll likely be as simple as replacing references to objective to references to expectation. I'll look into this more as we get closer to beta release.

tbates's picture
Offline
Joined: 07/31/2009
omxModelType()

maybe an OpenMx supported function to maintain a robust backward compatible test for users. Perhaps allowing

omxModelType <- function(obj, typeList= (c("RAM", "LISREL", "MATRIX"){
    # test each requested item
}
 
# typically called with one test case
if(omxModelType(m1, "RAM"){
}

mhunter's picture
Offline
Joined: 07/31/2009
Your same code would work if

Your same code would work if you replace $objective with $expectation, and "MxRAMObjective" with "MxExpectationRAM". I'm not sure if that's the best practice, but it would work currently.

tbates's picture
Offline
Joined: 07/31/2009
old | new

this fails for current OpenMx.

class(obj$expectation)[1] == "MxExpectationRAM"

so the "good today, great tomorrow" test is

isModel     = isS4(obj) & is(obj, "MxModel")
isRAM_Model = (class(obj$objective)[1] == "MxRAMObjective" | class(obj$expectation)[1] == "MxExpectationRAM")
isModel & isRAM_Model

:-)

mhunter's picture
Offline
Joined: 07/31/2009
This passes with the current

This passes with the current *source* build.

(isS4(obj) && is(obj, "MxModel") && class(obj$expectation)[1] == "MxExpectationRAM")

where obj is a fitted OpenMx model. I used demo/LatentGrowthCurveModel_PathRaw.R as a test case.

source("demo/LatentGrowthCurveModel_PathRaw.R")
obj <- growthCurveFit
(isS4(obj) && is(obj, "MxModel") && class(obj$expectation)[1] == "MxExpectationRAM")