Thu, 07/29/2010 - 16:51

hi,

Trying to get a multivariate ordinal ACE script going with different numbers of thresholds in each variable.

The script is running now, and attached below (self contained: pulls data from a url).

it gives the error

*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) *

I am not sure what we are supposed to be doing in threshold matrices with cells that are not expected to be used: I have just left them determined to be greater than the preceeding thresholds, and hoping htey don't mind not being used. But are they supposed to be set NA?

attachment was not attached :-)

It doesn't make code Red go away (though it might have) but I notice Full matrices where Lower was expected, so seem to be able to use:

mxMatrix("Lower", nVar, nVar, free=T, values=rnorm(nVar*(nVar+1)/2, mean = .6, sd = .1), name="a"),

mxMatrix("Lower", nVar, nVar, free=T, values=rnorm(nVar*(nVar+1)/2, mean = .6, sd = .1), name="c"),

mxMatrix("Lower", nVar, nVar, free=T, values=rnorm(nVar*(nVar+1)/2, mean = .6, sd = .1), name="e"),

Running several times yields almost exactly the same fit and same error. However, dialing down precision helps:

> est1<-ACEOrdFit@output$estimate

> ACEOrdModel <- mxOption(ACEOrdModel, "Function Precision", 1e-8)

> ACEOrdFit = mxRun(ACEOrdModel, intervals=F)

Running ACE

> summary(ACEOrdFit)

And does not seem to change the solution a whole lot:

> ACEOrdFit@output$estimate

-0.3839011110 -0.0926679446 0.1203437405 0.5555043707 0.5160617608 -0.1834054992 0.8827464781 0.8112786187

0.8133510994 -0.0638410734 0.0099016854 0.0020701259 -0.2708858073 -0.0022325128 -0.0431975228 0.1434395464

-0.0059582264 -0.1483921050 0.9737269653 0.5000000000 0.5000000000 0.5000000000 0.0831593193 0.6315923555

0.5000000000 0.5000000000 0.0001055547 0.4444466554 0.3557393401 0.5369744499

> est1<-ACEOrdFit@output$estimate

> ACEOrdModel <- mxOption(ACEOrdModel, "Function Precision", 1e-9)

> ACEOrdFit = mxRun(ACEOrdModel, intervals=F)

Running ACE

Warning message:

In model 'ACE' 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)

> ACEOrdFit@output$estimate-est1

1.719295e-02 6.996527e-03 3.251360e-02 -9.884858e-04 5.319398e-03 2.996002e-01 6.320578e-03 -1.730106e-03

3.323140e-03 1.595764e-01 -3.278419e-02 -3.226108e-03 -3.130417e-03 1.486215e-03 -8.030822e-04 2.227999e-04

-1.344185e-04 6.018336e-04 -9.379388e-04 0.000000e+00 0.000000e+00 0.000000e+00 -3.853347e-05 -3.186464e-05

0.000000e+00 0.000000e+00 -5.554708e-06 2.171607e-04 -3.820562e-05 -6.856539e-04

The .16 looks like a problem, but it's a diagonal element which is invariant to sign so .09 and -.06 are not that far apart.

Two things then:

i) Make lower as above

ii) Try bounding the diagonals of a, c and e to be positive

and a note: We should stop printing Std Errs when there are constraints in the model, until we fix the issue. They're rubbish.