[R] Excel can do what R can't?????

Spencer Graves spencer.graves at pdf.com
Wed Jul 16 17:45:10 CEST 2003

1.  If I have an answer that works, I typically go to something else.

2.  If your Excel solution is still inadequate, have you considered 
trying to modularize your function "f", so "f" is 5-10 lines, several of 
which call other functions, f1, f2, ..., f6, say, and each of these do a 
piece of the computations that can be checked by comparison with 
intermediate results in Excel.

hope this helps.  spencer graves

Michael Rennie wrote:
> 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)
>>    }
>>    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

More information about the R-help mailing list