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

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?
script
Sure. Which script specifically?
Log in or register to post comments
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?
Log in or register to post comments
In reply to Related question: If I just by bwiernik
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.
Log in or register to post comments
In reply to Related question: If I just by bwiernik
To elaborate on Joshua's reply
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.Log in or register to post comments
In reply to Related question: If I just by bwiernik
Thanks both of you!
Thanks both of you!
Log in or register to post comments