Mon, 10/31/2011 - 04:38

Whenever I try to fit models and add covariances with arrows=2, I always have a heck of a time getting the model past the 'expected covariance is non-positive definite' error. Is this normal? I do not have nearly this much trouble with arrows = 1. Here is a little example using a built in dataset:

#########################

summary(mxRun(m <- mxModel("Example", type = "RAM",

manifestVars = colnames(ability.cov$cov), latentVars = "G",

mxData(ability.cov$cov, type = "cov", numObs = ability.cov$n.obs),

mxPath(from = "G", to = colnames(ability.cov$cov)),

mxPath(from = colnames(ability.cov$cov), arrows = 2),

mxPath(from = "G", arrows = 2, values = 1, free = FALSE))))

summary(mxRun(mxModel(m, mxPath(from = "vocab", to = "reading", arrows = 2, values = 41))))

summary(mxRun(mxModel(m, mxPath(from = "vocab", to = "reading", arrows = 2, values = -.1))))

summary(mxRun(mxModel(m, mxPath(from = "vocab", to = "reading", arrows = 1, values = .4))))

summary(mxRun(mxModel(m, mxPath(from = "vocab", to = "reading", arrows = 1, values = 2))))

#########################

even knowing (from the second attempt), that one estimate that works well is 41.579037 and setting a starting value of 41, it runs into problems. Is there a reason it seems more sensitive to start values with covariances than just paths?

Arrows=2 between two different variables generates covariance between them but not variance within either. Therefore it is quite easy to generate a covariance matrix with larger covariances than variances, which is perforce non-positive definite.

The 41 you choose for a starting value is in some conflict with the value of 0 (which would be treated as .01) for residual variance of each, given in the mxPath(from = colnames(ability.cov$cov), arrows = 2) statement. Supplying values for the residuals (say the variance of each variable) and zero as starting values for the covariance paths would probably help a lot.

Thanks! That makes a lot of sense and is really helpful. I guess I always just saw the error and never thought about what it meant (i.e., when is a matrix positive definite or not). Is it a bad sign that I'm actually excited to go back and try some of my models and see how much easier it is keeping your comments in mind??

No, it means you're one of us. Welcome!