On Fri, 21 Jul 2006, Valentin Dimitrov wrote: > Dear Leaf, > > I modified your code as follows: > > gamma.fun <- function(mu,sd,start=100) > { > f.fn <- function(alpha) > {abs(sd^2-mu^2/(gamma(1+1/alpha))^2*(gamma(1+2/alpha)-(gamma(1+1/alpha))^2))} > alpha <- optim(start, f.fn) > beta <- mu/gamma(1+1/alpha$par) > return(list=c(a=alpha$par,b=beta)); > } > > Now it works properly. > > First, I added an abs(). You tried to solve an > equation by means of the R-function optim(), which > finds a minimum. That's why you can find the solution > of f(x)=a through minimization of abs(f(x)-a). > Second, I deleted the optim-method BFGS from the > optim() function, because it is not appropriate in > this case.
optim() is not appropriate at all in this case -- its help page says to use optimize() for one-dimensional problems. In fact, in one dimension there isn't any need to resort to optimization when you really want root-finding, and uniroot() is more appropriate than optimize(). -thomas ______________________________________________ R-help@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.