ACE model for a latent variable

6 replies [Last post]
MNivard's picture
Offline
Joined: 12/09/2010

Hi all,

I am trying to fit an ACE model on a latent variabel using path specification. I started out with a twin model in which each individual has one common factor explaining the variance on 7 observed variables. These factors are obviously correlated within an MZ or DZ pair. I am now removing this correlation between twins and adding a ACE decomposition of the factor variance. Basically i am fitting a common pathway model.

My first try was to restric the factor variance to 1, but since i added A C and E to explain the factor variance this will not work. In order for this to work i need to restrict the total variance for a^2 + c^2 + e^2 to 1. This seems like the only practicle way for me to scale the model.

how do i implement this restriction in a path specification model?

The model i am using basically is equal to the ACE example in the tutorial except that i am decomposing variance for a latent variable instead of an observed variable. Can this be done using OpenMX?

Any sugestions are welcome

jmoser's picture
Offline
Joined: 04/29/2010
Hi there, I'm a new OpenMx

Hi there,

I'm a new OpenMx user and new to behavior genetics. I have a related question. I am trying to figure out if a 'correlated factors model' is conceptually the same as testing independent pathway and common-pathway models? I have two indicators of one phenotype and two indicators of another phenotype. I'm mainly interested in testing the genetic and environmental influences on the relationship between these two phenotypes, but because I have two measure of each it has been suggested that I conduct a correlated factors model. I attended the twin workshop in 2010 and have several scripts, including at least 1 that has code for common and independent pathway models, but I'm not sure how to implement a correlated factors model if it is indeed different from the pathway models. Any help would be greatly appreciated.

Many thanks in advance, jm

Ryne's picture
Offline
Joined: 07/31/2009
Sorry it took so long to get

Sorry it took so long to get to this.

The correlated factors model (see McArdle & Goldsmith's 1990 article in Behavior Genetics, as presented in Neale and Cardon, 1993, Figure 13.5b) is set up for multivariate twin models with 2 latent traits, though more are certainly possible. The uniqueness of this model really seems to have to do with the correlations between factors; the referenced figure appears to set everything up as a common pathway model, but I don't see any reason you couldn't add independent pathways as well.

Fundamentally, I think you're asking two different questions. Independent vs. common pathways are about the measurement structure of a single trait or phenotype: is genetic/environmental transmission done through the common factor, the residual factors, or both? You have to answer this question about every latent trait/phenotype you study. The common factors model is about relationships between latent traits, and seems to model these relationships as 1 correlation for every genetic factor. The mode of transmission seems to be held constant across traits for this model, though that might be a characteristic of the figure rather than the model. I don't have the McArdle reference, only the Neale & Cardon handy, so you'll have to do some reading.

I'll add that two-indicator factors can be unstable. If you didn't have multiple traits or twin data, the model would be unidentified and inestimable unless you constrained the factor loadings to be equal. With multiple traits and clustered data, you may be able to freely estimate these loadings, depending entirely on what other parameters you add to the model.

jmoser's picture
Offline
Joined: 04/29/2010
Thanks so much for this

Thanks so much for this thoughtful reply. I'll take a look at those references. I also agree that two indicators for a 'factor' seems pretty weak.

MNivard's picture
Offline
Joined: 12/09/2010
I have tried the following

I have tried the following constraint:
these constraints work on "a", "c" and "e"

mxConstraint(
(group1.A[15,23]^2*group1.A[15,24]^2*group1.A[15,25]^2)==1,
name="restrict1"
),

mxConstraint(
(group2.A[15,23]^2*group2.A[15,24]^2*group2.A[15,25]^2)==1,
name="restrict2"
),

mxConstraint(
(group1.A[16,26]^2*group1.A[16,27]^2*group1.A[16,28]^2)==1,
name="restrict3"
),

mxConstraint(
(group2.A[16,26]^2*group2.A[16,27]^2*group2.A[16,28]^2)==1,
name="restrict4"
),

Doesn't work... gives me an NA for all the standard errors of the free parameters

Ryne's picture
Offline
Joined: 07/31/2009
There should be a few things

There should be a few things about this throughout the forums, but I didn't see a clear single answer to your questions, so I'll go over a few options here.

Your first and likely best option is to not constrain the sum of genetic components. I'll go over a few options for making your constraint, but they will all have costs. You should consider identifying the factor model not through variance constraint, but rather through a fixed factor loading (i.e., fix the first factor loading to a value of 1.0, provided that your previous analyses indicate that this factor loading is non-zero). Identifying the factor model by fixing the factor variance to unity does not standardize the factor loadings, and as you've noticed, makes fitting models with endogenous latent variables a pain.

Your above constraint code is the other primary way. It is working correctly; when constraints on free parameters are included, standard errors aren't identified. A simplified explanation deals with degrees of freedom: even though you list 3 parameters (a, c and e), you only have two degrees of freedom, as e can be defined as 1-a^2-c^2. When any free parameters are defined through constraints, you kill standard errors for all of them (see previous posts about the Hessian matrix for how OpenMx estimates standard errors).

An alternative is to create all of your e parameters as algebras, such that you define:

mxAlgebra(sqrt(1-group1.A[15,23]^2-group1.A[15,24]^2), name="e1")

and label the e path for that variable as:

mxPath(...., label="e1[1,1]")

The above code creates an algebraic statement that e is sqrt(1-a^2-c^2), puts that value in a 1 x 1 matrix called "e1", then constrains your e path to be equal to row 1 column 1 of "e1".

Again, your easiest option is to identify the factor model using a constrained factor loading. You can calculate standardized genetic variances after the fact, and use mxCI if you wish to calculate confidence intervals rather than relying on standard errors.

ryne

MNivard's picture
Offline
Joined: 12/09/2010
Thanks for the feedback, it

Thanks for the feedback, it worked out in the end!