[R] optim() problem

nashjc at uottawa.ca nashjc at uottawa.ca
Sat Jan 17 19:28:55 CET 2009


> I am trying to fit a exponential power distribution
>
> y = b/(2*pi*a^2*gamma(2/b))*exp(-(x/a)^b)
>
> to a bunch of data for x and y I have in a table.
>> data
>            x         y
> 1         25        27
> 2         75        59
> 3        125       219
> ...
> 259    12925         1
> 260    12975         0
>
> I know "optim" should do a minimisation, therefor I used as the
> optimisation function
>
> opt.power <- function(val, x, y) {
>    a <- val[1];
>    b <- val[2];
>    sum(y - b/(2*pi*a^2*gamma(2/b))*exp(-(x/a)^b));
> }
>
> I call: (with xm and ym the data from the table)
>
> a1 <- c(0.2, 100)
> opt <- optim(a1, opt.power, method="BFGS", x=xm, y=ym)
>
> but no optimisation of the parameter in a1 takes place.
> Any ideas?

As someone who had a big hand in creating BFGS, I'm guessing (and guessing
can be dangerous) that there is a bad scaling somewhere that simply
prevents progress because the numerical derivatives are not easy to
calculate in such situations. If you send me data off-line, I'll take a
look.

Have you checked that your function evaluates properly? Always a good idea.

For information, I'm working on trying to improve optim's capabilities and
user-friendliness to try to address some of the issues that arise. I
welcome input. In particular, Ravi Varadhan and I would like to develop a
method "GUIDED" to allow users a way to set up the calls so they are
sensible for their problems.

John Nash




More information about the R-help mailing list