[R] Excel can do what R can't?????
Michael Rennie
mrennie at utm.utoronto.ca
Wed Jul 16 17:18:28 CEST 2003
Hi, Spencer
I know I submitted a beastly ammount of code, but I'm not sure how to simplify
it much further, and still sucessfully address the problem that i am having.
The reason being is that the funciton begins
f<- function (q)
At the top of the iterative loop. This is what takes q and generates Wtmod,
Hgtmod at the end of the iterative loop. the assignment to f occurs at the
bottom of the iterative loop. So, yes, the call to f is performing an immediate
computation, but based on arguments that are coming out of the iterative loop
above it, arguments which depend on q<-(p, ACT). Maybe this is the problem;
I've got too much going on between my function defenition and it's assignment,
but I don't know how to get around it.
So, I'm not sure if your example will work- the output from the iterative
process is Wtmod, Hgtmod, and I want to minimize the difference between them
and my observed endpoints (Wt, Hgt). The numbers I am varying to reach this
optimization are in the iterative loop (p, ACT), so re-defining these outputs
as x's and getting it to vary these doesn't do me much good unless they are
directly linked to the output of the iterative loop above it.
Last, it's not even that I'm getting error messages anymore- I just can't get
the solution that I get from Excel. If I try to let R find the solution, and
give it starting values of c(1,2), it gives me an optimization sulution, but an
extremely poor one. However, if I give it the answer I got from excel, it
comes right back with the same answer and solutions I get from excel.
Using the 'trace' function, I can see that R gets stuck in a specific region of
parameter space in looking for the optimization and just appears to give up.
Even when it re-set itself, it keeps going back to this region, and thus
doesn't even try a full range of the parameter space I've defined before it
stops and gives me the wrong answer.
I can try cleaning up the code and see if I can re-submit it, but what I am
trying to program is so parameter heavy that 90% of it is just defining these
at the top of the file.
Thank you for the suggestions,
Mike
Quoting Spencer Graves <spencer.graves at PDF.COM>:
> The phrase:
>
> f <- 1000000000*(((((Wt-Wtmod)^2)/Wt) + (((Hgt-Hgtmod)^2)/Hgt))2) ; f
>
> is an immediate computation, not a function. If you want a function,
> try something like the following:
>
> f <- function(x){
> Wt <- x[1]
> Wtmod <- x[2]
> Hgt <- x[3]
> Hgtmod <- x[4]
> 1000000000*(((((Wt-Wtmod)^2)/Wt) + (((Hgt-Hgtmod)^2)/Hgt))2)
> }
>
> OR
>
> f <- function(x, X){
> Wt <- X[,1]
> Hgt <- X[,2]
> Wtmod <- x[1]
> Hgtmod <- x[2]
> 1000000000*(((((Wt-Wtmod)^2)/Wt) + (((Hgt-Hgtmod)^2)/Hgt))2)
> }
>
> "par" in "optim" is the starting values for "x". Pass "X" to "f" via
> "..." in the call to "optim".
>
> If you can't make this work, please submit a toy example with the
> code and error messages. Please limit your example to 3 observations,
> preferably whole numbers so someone else can read your question in
> seconds. If it is any longer than that, it should be ignored.
>
> hope this helps.
> Spencer Graves
>
> M.Kondrin wrote:
> > >?optim
> >
> > optim(par, fn, gr = NULL,
> > method = c("Nelder-Mead", "BFGS", "CG", "L-BFGS-B", "SANN"),
> > lower = -Inf, upper = Inf,
> > control = list(), hessian = FALSE, ...)
> >
> > .....
> > fn: A function to be minimized (or maximized), with first
> > argument the vector of parameters over which minimization is
> > to take place. It should return a scalar result.
> >
> > Your fn defined as:
> > f <- 1000000000*(((((Wt-Wtmod)^2)/Wt) + (((Hgt-Hgtmod)^2)/Hgt))2) ; f
> > What is its first argument I wonder?
> > I think you have just an ill-defined R function (although for Excel it
> > may be OK - do not know) and optim just chokes on it.
> >
> > ______________________________________________
> > R-help at stat.math.ethz.ch mailing list
> > https://www.stat.math.ethz.ch/mailman/listinfo/r-help
>
>
--
Michael Rennie
M.Sc. Candidate
University of Toronto at Mississauga
3359 Mississauga Rd. N.
Mississauga ON L5L 1C6
Ph: 905-828-5452 Fax: 905-828-3792
More information about the R-help
mailing list