[R] solving equation system
Spencer Graves
spencer.graves at pdf.com
Thu Jun 23 18:30:30 CEST 2005
Have you considered writing a function to compute the sum of squares
of deviations from equality and using "optim"? I use sum of squares not
sum of absolute values, because if my functions are differentiable, the
sum of squares will also be differentible while the sum of absolute
values will not be. This means that sum of absolute values will not
work well with a quasi-Newton algorithm.
Also, have you considered making plots? If I understand your
example, you can solve for lambda using (II) as lambda = x/mean(X).
Then you can use (I) to solve for "c". To understand this, it would
help to plot the digamma function. If you do this (e.g.,
http://mathworld.wolfram.com/DigammaFunction.html), you will see that
there are countably infinite solutions to this equation. If you want
the positive solution, I suggest you try to solve for ln.c = log(c)
rather than "c" directly, because that should make "optim" more stable.
More generally, it often helps to make, e.g., contour or perspective
plots and to try to find a parameterization that will make the sum of
squares of errors approximatly parabolic in your parameters.
My favorite reference on this is Bates and Watts (1988) Nonlinear
Regression Analysis and Its Applications (Wiley). There may be better,
more recent treatments of this subject, but I am not familiar with them.
spencer graves
p.s. I never (no never, not ever) use "c" as a variable name, because
it is the name of a common R function. R is smart enough to distinguish
between a function and a non-function in some contexts but not in all.
When I want a name for a new object, I routinely ask R to print my
proposed name. If it returns "Error: object ... not found", I can use
"...".
Carsten Steinhoff wrote:
> Hello,
>
> I want to solve some two dimensional equation system with R. Some systems
> are not solvable analytically.
>
> Here is an example:
>
> (I) 1/n*sum{from_i=1_to_n}(Xi) = ln lambda + digamma(c)
>
> (II) mean(X) = x / lambda
>
> I want to find lambda and c,
>
> which R-function could do that task?
>
> Carsten
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at 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
--
Spencer Graves, PhD
Senior Development Engineer
PDF Solutions, Inc.
333 West San Carlos Street Suite 700
San Jose, CA 95110, USA
spencer.graves at pdf.com
www.pdf.com <http://www.pdf.com>
Tel: 408-938-4420
Fax: 408-280-7915
More information about the R-help
mailing list