# Pritikin, Rappaport & Neale (2017). Liklihood-based confidence intervals for a parameter with an upper or lower bound

6 posts / 0 new
Offline
Joined: 04/27/2015 - 10:45
Pritikin, Rappaport & Neale (2017). Liklihood-based confidence intervals for a parameter with an upper or lower bound

I read the article in Structural Equation Modeling Journal. I would like to try to replicate your findings. Would it be possible to obtain a copy of your script?

Offline
Joined: 05/24/2012 - 00:35
script

Sure. Which script specifically?

Offline
Joined: 01/30/2014 - 19:39
Related question: If I just

Related question: If I just add an mxCI() call to model with a bounded parameter, will OpenMx appropriately select the SLSQP optimizer automatically, or do I need to specify this? Secondly, if a parameter has both a lower and upper bound (e.g., an estimate of an R squared value in a standardized regression model), does any appropriate adjustment for the CI currently exist?

Offline
Joined: 05/24/2012 - 00:35
mxCI info

> If I just add an mxCI() call to model with a bounded parameter, will OpenMx appropriately select the SLSQP optimizer automatically, or do I need to specify this?

You need to specify the optimizer.

> Secondly, if a parameter has both a lower and upper bound (e.g., an estimate of an R squared value in a standardized regression model), does any appropriate adjustment for the CI currently exist?

In this case, no adjustment is implemented.

Offline
Joined: 01/24/2014 - 12:15

Concerning SLSQP, you do indeed need to select the optimizer yourself. The simplest way to do that is, of course, with mxOption(NULL,"Default optimizer","SLSQP"), which (unless you're using a custom compute plan) will cause SLSQP to be used for both the primary optimization (for the point estimates) and the secondary optimizations to find the confidence limits.

Now, suppose you want to use SLSQP for confidence limits, but use a different optimizer (NPSOL, say) for the primary optimization. One way to accomplish that is:

mxOption(NULL,"Default optimizer","NPSOL")
myModel <- mxRun(myModel, intervals=FALSE)
mxOption(NULL,"Default optimizer","SLSQP")
#omxParallelCI() is named for its not-yet-implemented behavior of parallelizing over the quantities in mxCI() argument 'reference':
myModelPCI <- omxParallelCI(myModel)

Another way to accomplish it is by a custom compute plan:

plan <- omxDefaultComputePlan(intervals=TRUE)
plan$steps$GD$engine <- "NPSOL" plan$steps$CI$plan$engine <- "SLSQP" plan$steps$CI$constraintType <- "ineq"

Then, include plan in your MxModel object, just as you would, say, an MxAlgebra.

If you're concerned about more than one parameter bound, or about implicit bounds arising from the choice of parameterization, consider using bootstrap CIs, via mxBootstrap(). The default behavior is to compute and report bias-corrected quantile intervals, which, like profile-likelihood intervals, are bound- and constraint-respecting, "transformation-respecting" under change-of-parameter, and not required to be asymmetric. Note that the default coverage probability of bootstrap CIs is 50%; if you want wider coverage probability, use more than the default 200 bootstrap replications (I recommend 1000 at bare minimum for 95% CIs.

Offline
Joined: 01/30/2014 - 19:39
Thanks both of you!

Thanks both of you!