NPSOL returned a non-zero status code 6. The model does not satisfy the first-order optimality conditions to the required accur

Hi,
Finally I managed to fit a longitudinal one- factor model but now I received the following warning message:
NPSOL returned a non-zero status code 6. The model does not satisfy the first-order optimality conditions to the required accuracy, and no improved point for the merit function could be found during the final linesearch (Mx status RED)
As I am a beginner in OpenMX suggestions and any help is very welcome.
Thanks in advance!
############################################################
This is my code:
############################################################
## create observed covariance matrix
obsnames = c("extrT1","beneT1","conscT1","emostT1","imagT1",
"extrT2","beneT2","conscT2","emostT2","imagT2",
"extrT3","beneT3","conscT3","emostT3","imagT3")
obslabels = list (obsnames,obsnames)
values = c(
1.00,
-.05, 1.00,
-.00, .40, 1.00,
.46, .12, .14, 1.00,
.46, .12, .55, .39, 1.00,
.77, -.02, .06, .31, .36, 1.00,
-.15, .72, .28, .02, .01, -.03, 1.00,
-.07, .33, .79, .07, .43, .03, .41, 1.00,
.32, .10, .20, .70, .40, .43, .12, .19, 1.00,
.26, .09, .48, .29, .80, .39, .13, .57, .45, 1.00,
.31, .00, .11, .29, .29, .79, -.01, .07, .33, .24, 1.00,
-.05, .58, .25, -.04, -.01, -.04, .70, .33, .01, .08, .07, 1.00,
.05, .25, .64, -.01, .29, .07, .31, .75, .06, .41, .16, .51, 1.00,
.27, .07, .24, .58, -.04, .32, .05, .20, .66, .38, .44, .13, .14, 1.00,
.31, .09, .45, .29, .58, .34, .14, .51, .39, .79, .43, .22, .55, .49, 1.00)
SD = c(0.43,0.43,0.53,0.51,0.49,0.44,0.39,0.55,0.48,0.50,0.43,0.38,0.54,0.42,0.48)
akkercov = SEM_obsmatrix(lowtri=values,SD=SD,labels=obslabels)
akkercov
petrmeans = c(3.49,3.50,3.43,3.48,3.69,3.40,3.56,3.41,3.52,3.63,3.32,3.52,3.26,3.52,3.47)
names(petrmeans) = obsnames
akkercov = Matrix::nearPD(akkercov)$mat
akkercov=as.matrix(akkercov)
akkercov
factornames = c('PerTrait_1','PerTrait_2','PerTrait_3')
obslabels = list (obsnames, obsnames)
factorlabels = list (factornames, factornames)
lambdalabels = list (obsnames, factornames)
taulabels = list(obsnames,"Intercept")
kappalabels = list (factornames, "Factor mean")
## Fit a longitudinal one-factor model
title = " Factor model Personality traits at 3 timepoints"
obs = mxData(observed = akkercov, type = 'cov', means = petrmeans, numObs = 290)
## lambda matrix: factor loadings
matrixL = mxMatrix(
type = 'Full',
nrow = 15,
ncol = 3,
free = c(TRUE,FALSE,FALSE,
TRUE,FALSE,FALSE,
TRUE,FALSE,FALSE,
TRUE,FALSE,FALSE,
TRUE,FALSE,FALSE,
FALSE,TRUE,FALSE,
FALSE,TRUE,FALSE,
FALSE,TRUE,FALSE,
FALSE,TRUE,FALSE,
FALSE,TRUE,FALSE,
FALSE,FALSE,TRUE,
FALSE,FALSE,TRUE,
FALSE,FALSE,TRUE,
FALSE,FALSE,TRUE,
FALSE,FALSE,TRUE),
values = c (1,0,0,
1,0,0,
1,0,0,
1,0,0,
1,0,0,
0,1,0,
0,1,0,
0,1,0,
0,1,0,
0,1,0,
0,0,1,
0,0,1,
0,0,1,
0,0,1,
0,0,1),
labels = c("L11t1",NA,NA,
"L21t1",NA,NA,
"L31t1",NA,NA,
"L41t1",NA,NA,
"L51t1",NA,NA,
NA,"L11t2",NA,
NA,"L21t2",NA,
NA,"L31t2",NA,
NA,"L41t2",NA,
NA,"L51t2",NA,
NA,NA,"L11t3",
NA,NA,"L21t3",
NA,NA,"L31t3",
NA,NA,"L41t3",
NA,NA,"L51t3"),
byrow = TRUE,
name = 'L',
dimnames = lambdalabels)
## F matrix: contains variances and covariances of the common factors
matrixF = mxMatrix(
type = 'Symm',
nrow = 3,
ncol = 3,
free = c( FALSE,
TRUE,FALSE,
TRUE,TRUE,FALSE),
values = c( 1,
.5,1,
.5,.5,1),
byrow = TRUE,
name = 'F',
dimnames = factorlabels)
## Q matrix: contains variances of the residual factors
matrixQ = mxMatrix(
type = 'Symm',
nrow = 15,
ncol = 15,
free = c(TRUE,
FALSE,TRUE,
FALSE,FALSE,TRUE,
FALSE,FALSE,FALSE,TRUE,
FALSE,FALSE,FALSE,FALSE,TRUE,
TRUE,FALSE,FALSE,FALSE,FALSE,TRUE,
FALSE,TRUE,FALSE,FALSE,FALSE,FALSE,TRUE,
FALSE,FALSE,TRUE,FALSE,FALSE,FALSE,FALSE,TRUE,
FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,FALSE,FALSE,TRUE,
FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,FALSE,FALSE,TRUE,
FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,FALSE,FALSE,TRUE,
FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,FALSE,FALSE,TRUE,
FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,FALSE,FALSE,TRUE,
FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,FALSE,FALSE,TRUE,
FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,FALSE,FALSE,TRUE),
values = c(1,
0,1,
0,0,1,
0,0,0,1,
0,0,0,0,1,
.1,0,0,0,0,1,
0,.1,0,0,0,0,1,
0,0,.1,0,0,0,0,1,
0,0,0,.1,0,0,0,0,1,
0,0,0,0,.1,0,0,0,0,1,
0,0,0,0,0,.1,0,0,0,0,1,
0,0,0,0,0,0,.1,0,0,0,0,1,
0,0,0,0,0,0,0,.1,0,0,0,0,1,
0,0,0,0,0,0,0,0,.1,0,0,0,0,1,
0,0,0,0,0,0,0,0,0,.1,0,0,0,0,1),
byrow = TRUE,
name = 'Q',
dimnames = obslabels)
## matrix T: is a full matrix with intercepts, with rows equal to Nr of observed variables, and one column. All intercepts are free to be estimnated
matrixT = mxMatrix(
type = 'Full',
nrow = 15,
ncol = 1,
free = c(TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE),
values = c(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1),
labels = c("t11","t12","t13","t14","t15",
"t21","t22","t23","t24","t25",
"t31","t32","t33","t34","t35"),
byrow = TRUE,
name = 'T',
dimnames = taulabels)
##matrix K is a full matrix with common factor means
matrixK = mxMatrix(
type = 'Full',
nrow = 3,
ncol = 1,
free = c(FALSE,FALSE,FALSE),
values = c(0,0,0),
byrow = TRUE,
name = 'K',
dimnames = kappalabels)
conf = mxCI ("K",interval = .90)
algebraS = mxAlgebra(expression = L %*% F %*% t(L) + Q, name = 'S', dimnames = obslabels)
algebraM = mxAlgebra(expression = t(T + L%*%K), name = 'M', dimnames = list("mean",obsnames))
exp = mxMLObjective(covariance = 'S', means = 'M')
longmodel = mxModel(title,obs,
matrixL,matrixF,matrixQ,matrixT,matrixK,algebraS,algebraM,exp,conf)
longmodelOut = mxRun(longmodel, intervals = TRUE)
summary(longmodelOut)
Two general strategies
Hi Daria,
I know of two general strategies to alleviate mxStatus RED. First, try re-running the model from its previously estimated values.
modRun <- mxRun(yourModel)
# Gives mxStatus RED
modRunAgain <- mxRun(modRun)
# mxStatus RED is now gone
You'd want to be sure that the estimates are plausible. What counts as a plausible estimate depends on both your data and your model, so you'll need some degree of knowledge about both. In general, a mean estimate of a variable with values between 0 and 5 should not be 157.79. Similarly, check the standard errors. If some of them are NA or nan, then you may have an identification problem or the solution found by OpenMx might not be very good.
The second strategy is to adjust the starting values. Giving OpenMx starting values close to where you might parameters should be estimated can help enormously. Also, Tim Bates has recently posted about his helper functions to select starting values. Here's the thread:
http://openmx.psyc.virginia.edu/thread/2712
Log in or register to post comments