Moments vs Raw data input

2 replies [Last post]
rphilip2004's picture
Offline
Joined: 08/09/2010

I thought this might be useful for those new to OpenMx (like myself) who are trying out the matrix specifications way of specifying latent growth curves. I ran into a bug when declaring a lgc model where the input method was 'cov' rather than 'raw', and since I couldn't figure out how to fix it directly I composed a step around way to do it. I believe that this issue is well known since the links from the current OpenMx Users Manual for

http://openmx.psyc.virginia.edu/repoview/1/trunk/demo/LatentGrowthCurveM...
http://openmx.psyc.virginia.edu/repoview/1/trunk/demo/LatentGrowthCurveM...

are not functioning, so in the meantime this way should suffice. What I did was compose a function that, given a cov matrix, a means vector, and sample size, returns an arbitrary raw data matrix that perfectly reproduces the declared moments. That way instead of having to state that the input='cov' users could just stay with the input='raw' way that is currently stable and functioning.

I have attached a revised demo file (from LatentGrowthModel_MatrixRaw.R in the manual) to demonstrate the problem and my solution. Love the OpenMx program so far, hope it continues to grow. Cheers!

Phil

AttachmentSize
LatentGrowthCurveModel_MatrixRaw (revised).R9.4 KB
mspiegel's picture
Offline
Joined: 07/31/2009
In a RAM model that contains

In a RAM model that contains an expected means matrix ('M'), matrix dimnames are needed for the filter matrix and the expected means matrix. In the filter matrix, only column names are necessary. The rows are filters and are unnamed. The M matrix is a column vector and so only column names are necessary. In the script, this can be accomplished in one of two ways.

Let the variable:

dims <- c(names(myLongitudinalData), "intercept", "slope")

Then we can specify in the mxMatrix() declarations for the 'F' and 'M' matrices the dimnames with the argument:

mxMatrix(type=, nrow=, ncol=, name=, dimnames=list(NULL, dims))

A second way to specify the dimnames is to use the argument 'dimnames' in the mxRAMObjective() function. This argument takes a single vector, and the objective function has the information to know which row or column names must be populated in which matrices. The second way looks like:

mxRAMObjective("A","S","F","M", dimnames = dims)

rphilip2004's picture
Offline
Joined: 08/09/2010
Thanks Michael. That is much

Thanks Michael. That is much simpler than my solution. Cheers!