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@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@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.