[R] optimization setup

threshold r.kozarski at gmail.com
Thu May 29 21:07:44 CEST 2008


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

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



More information about the R-help mailing list