[R] optimization setup

threshold r.kozarski at gmail.com
Fri May 30 13:04:29 CEST 2008



Thanks for all your replies and sorry for a negligence in my examples. They
are very simplified to reflect very roughly the structure of the case I deal
with, which is too complicated to be quoted here. 

What I deal with is:
1) 'theta' which is vector with length 2, being known to me (eg.
theta=c(1,2))
2) 'x' which represents my empirical data (I know as well), 
3) 'theta1' is a vector with length 2 I don't know, which suppose to
minimize my objective function f3 (see below)

Here come the structure of the functions:
f1<-function(theta, theta1)
{theta[1]+theta[2]+theta1[1]}

f2<-function(theta, x, theta1)
{f1(theta, theta1)*exp(x)*theta1[2]}

function to be optimized with respect to theta1:
f3<-function(theta1)
{f1(theta, theta1)-f2(theta,x,theta1)} 

Again, I know vector 'theta' and 'x', and I look for (vector) 'theta1' which
minimize f3

Question are:
1) whether, given the case I deal with, the functions I provided are
specified correctly. If not what is the correct form? 
2) how should I write my optim function with starting values for theta1
equal to 1.1 and 2.1. What I did was:
optim(par=c(1.1, 2.1), f3) but it did not work well with error message: 
Error in f1(theta, theta1) : argument "theta1" is missing, with no default

Thank you for your help and time 
robert

 







Ray Brownrigg-2 wrote:
> 
> 
> Did you copy-paste that error message?
> 
> I get:
> 
>> optim(par=c(1,1), f3)
> Error in f1(theta, theta1) : object "theta" not found
>> 
> 
> You seem to be confusing your formal and actual parameters.
> 
> When you invoke f3 (within optim()), theta is not defined within f3().
> 
> Ray
> 
> On Fri, 30 May 2008, threshold wrote:
>> Hi, thanks for your replay the previous post of mine. Let me ask you one
>> more question similar to the previous one, based on a naive example:
>>
>> f1<-function(theta, theta1)
>> {theta[1]+theta[2]+theta1[1]}
>>
>> f2<-function(theta, x, theta1)
>> {f1(theta, theta1)*exp(x)*theta1[2]}
>>
>> function to be optimized with respect to theta1:
>> f3<-function(theta1)
>> {f1(theta, theta1)-f2(theta,x,theta1)}
>> optim(par=c(1,1), f3)
>>
>> If I do so I get:
>> Error in f1(theta, theta1) : argument "theta1" is missing, with no
>> default
>> What I did wrong? I guess I miss something basic...
>> Thanks in advance, robert
>>
>> Ray Brownrigg-2 wrote:
>> > On Wed, 23 Apr 2008, threshold wrote:
>> >> Hi, here comes my problem, say I have the following functions (example
>> >> case) #------------------------------------------------------------
>> >> function1 <- function (x, theta)
>> >> {a <- theta[1] ( 1 - exp(-theta[2]) ) * theta[3] )
>> >>  b <- x * theta[1] / theta[3]^2
>> >>  return( list( a = a, b = b )) }
>> >> #-----------------------------------------------------------
>> >> function2<-function (x, theta)
>> >> {P <- function1(x, theta)
>> >>   c <- P$a * x * exp(-theta[2])
>> >>   d <- P$b * exp(x)
>> >>   q <- theta[1] / theta[3]
>> >>   res <- c + d + q; res}
>> >>
>> >> # Function to be optimized
>> >> function3 <- function(theta1,theta2,theta3) {
>> >> n <- length(data)
>> >> -sum( function2(x = data[2:n], theta = c(theta1, theta2, theta3) ))}
>> >> # 'data' is my input ts class object
>> >>
>> #-----------------------------------------------------------------------
>> >>--- ------------
>> >>
>> >> Then I want to maximize function3 with respect to theta(s) (given some
>> >> starting values)
>> >>
>> >> fit<-optim(par=c(theta1=1, theta2=1.2, theta3=.2), fn=function3)
>> >>
>> >> I get the following:
>> >> Error in function1(x, theta) :
>> >>   argument "theta2" is missing, with no default
>> >>
>> >> Where I made a mistake? I will appreciate any help ...
>> >>
>> >> r
>> >
>> > Your function to be optimised must be a function of a single parameter
>> > (which
>> > may be a vector).
>> >
>> > So you should have something like:
>> > # Function to be optimized
>> > function3 <- function(thetas) {
>> >   n <- length(data)
>> >   -sum( function2(x = data[2:n], theta = thetas))
>> > }
>> >
>> > [Not tested, your provided code has typos].
>> >
>> > Ray
>> >
>> > ______________________________________________
>> > R-help at r-project.org 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.
> 
> ______________________________________________
> R-help at r-project.org 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.
> 
> 

-- 
View this message in context: http://www.nabble.com/optimization-setup-tp16825410p17556348.html
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list