[R] optimization setup

Ray Brownrigg Ray.Brownrigg at mcs.vuw.ac.nz
Thu May 29 22:20:00 CEST 2008


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.



More information about the R-help mailing list