[R] Using optim with parameters that are factors (instead of continuous parameters)

Ben Bolker bbolker at gmail.com
Sun Oct 23 02:03:24 CEST 2011


Lucas Merrill Brown <lucas.merrill.brown <at> gmail.com> writes:

> 
> I've been programming maximum likelihood estimation models using the
> function "optim." My current research requires modeling a particular
> parameter as a categorical variable (what R calls a "factor"), not as a
> continuous parameter.
> 
> (The research question is, at what level of X does a subject in our
> experiment choose Y=1 instead of Y=0? So this is a "light switch" problem --
> the subjects only switch from Y=0 to Y=1 after a particular threshold. And X
> only comes as a categorical variable, with integer values of 0,1,2,3,4, or
> 5.)
> 
> So whenever optim tries to find the proper parameter for the threshold of X,
> it tries different threshold values such as 4.5, 4.7, 4.9 -- none of which
> make any difference because that wouldn't actually change the realizations
> of whether the threshold has been crossed. And then it says the element of
> the Hessian matrix for that parameter is zero, because changing it doesn't
> seem to affect the log-likelihood.
> 
> Is there a way to tell optim that I'd like it to choose between only a
> limited number of factor values for the parameter?
> 
> I've spent a lot of time on Google and in ?optim searching for the answer,
> but haven't made progress so far. Thank you so much for your help. Apologies
> for any confusing statements remaining in this message -- for me at least,
> it's been a difficult problem to describe succinctly.

  optim() is not really set up for discrete programming. You have a few
options:

 * use method="SANN" (simulated annealing); you can specify a rule for
choosing a new candidate solution.
 * make the likelihood surface slightly continuous -- i.e. a steep
logistic function that is "almost" stepwise
 * probably most easily (if you only have a single discrete parameter)
is compute a profile likelihood along that parameter -- i.e. solve the
optimization problem for each value from 0 to 5, and compare the
results ...

 See pp. 25-27 of 
http://www.math.mcmaster.ca/~bolker/emdbook/chap7A.pdf

  More generally see

http://cran.r-project.org/web/views/Optimization.html , but I think
the profile likelihood is going to work best for you ...



More information about the R-help mailing list