Help fix last line of my optimization code

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Help fix last line of my optimization code

EdBo
Hi

I need help figure out how to fix my code.

When I call into R
>optimize(llik,init.params=F)
 I get this error message
####Error in optimize(llik, init.params = F) : element 1 is empty;
   the part of the args list of 'min' being evaluated was:
   (interval)####


My data and my code looks like below.


R_j R_m
0.002 0.026567296
0.01 0.003194435
. .
. .
. .
. .
0.0006 0.010281122

a=read.table("D:/ff.txt",header=T)
attach(a)
llik=function(R_j,R_m)
#The parameters al_j, au_j, b_j ,
and sigma_j need to be estimated and there are no initial estimates to
them.
if(R_j< 0)
{
 LF=sum[log(1/(2*pi*(sigma_j^2)))-(1/(2*(sigma_j^2))*(R_j+al_j-b_j*R_m))^2]
}else if(R_j>0)
{
 LF=sum[log(1/(2*pi*(sigma_j^2)))-(1/(2*(sigma_j^2))*(R_j+au_j-b_j*R_m))^2]
}else
{
 LF=sum[(log(pnorm((au_j-b_j*R_m)/sigma_j)-pnorm((al_j-b_j*R_m)/sigma_j)))]
}
optimize(llik,init.params=F)
Error in optimize(llik, init.params = F) : element 1 is empty;
   the part of the args list of 'min' being evaluated was:
   (interval)

Thank you

Edward

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: Help fix last line of my optimization code

Uwe Ligges-3
Please

a) read the posting guide
b) really submit reproducible code. Yours is not.
c) read ?optimize and learn to specify the interval
d) you specified an argument init.params, but that is not used in
optimize() nor can it be usefully passed to llik.

Uwe Ligges



On 01.07.2011 02:46, Edward Bowora wrote:

> Hi
>
> I need help figure out how to fix my code.
>
> When I call into R
>> optimize(llik,init.params=F)
>   I get this error message
> ####Error in optimize(llik, init.params = F) : element 1 is empty;
>     the part of the args list of 'min' being evaluated was:
>     (interval)####
>
>
> My data and my code looks like below.
>
>
> R_j R_m
> 0.002 0.026567296
> 0.01 0.003194435
> . .
> . .
> . .
> . .
> 0.0006 0.010281122
>
> a=read.table("D:/ff.txt",header=T)
> attach(a)
> llik=function(R_j,R_m)
> #The parameters al_j, au_j, b_j ,
> and sigma_j need to be estimated and there are no initial estimates to
> them.
> if(R_j<  0)
> {
>   LF=sum[log(1/(2*pi*(sigma_j^2)))-(1/(2*(sigma_j^2))*(R_j+al_j-b_j*R_m))^2]
> }else if(R_j>0)
> {
>   LF=sum[log(1/(2*pi*(sigma_j^2)))-(1/(2*(sigma_j^2))*(R_j+au_j-b_j*R_m))^2]
> }else
> {
>   LF=sum[(log(pnorm((au_j-b_j*R_m)/sigma_j)-pnorm((al_j-b_j*R_m)/sigma_j)))]
> }
> optimize(llik,init.params=F)
> Error in optimize(llik, init.params = F) : element 1 is empty;
>     the part of the args list of 'min' being evaluated was:
>     (interval)
>
> Thank you
>
> Edward
>
> ______________________________________________
> [hidden email] 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.

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: Help fix last line of my optimization code

S Ellison
In reply to this post by EdBo
You need to read the help page for optimize. Again, if you already have ;-)

The error message
>Error in optimize(llik, init.params = F) : element 1 is empty;
>    the part of the args list of 'min' being evaluated was:
>    (interval)####
is telling you that the parameter (interval) required by optimise in the absence of a specified min and max is empty.

And if you look at your code you will see that that is because you have not provided it....

There are other problems:
Optimize requires a function taking _one_ parameter to optimise and an interval to optimise over, or alternatively a maximum and a minimum. You have provided no interval, max or min (which is why it went looking for interval) and you have fed it a function taking two parameters, both of which you want optimised. You have also given it initial parameters (?) as a named parameter which it can't recognise - it's not one of the named arguments to optimize - so optimize will try to pass that to the function being optimised. That will fail if it ever gets there because _that_ doesn't use a parameter called init.params either. I'm not clear what you wanted init.params to do but at a rough guess you had in mind a function for which init.params is the initial parameter vector and if FALSE is guessed at. optmize() is not that function.

Perhaps you meant to use optim - which does two-parameter optimisation - but you _will_ need to specify a starting vector as that doesn't take an init.params argument either.

As an alternative, you could use something like nls which takes a self-starting function argument which generats its own initial values, but you'll have to create the self-starting function yourself (see ?selfStart)



> -----Original Message-----
> From: [hidden email]
> [mailto:[hidden email]] On Behalf Of Edward Bowora
> Sent: 01 July 2011 01:46
> To: r-help
> Subject: [R] Help fix last line of my optimization code
>
> Hi
>
> I need help figure out how to fix my code.
>
> When I call into R
> >optimize(llik,init.params=F)
>  I get this error message
> ####Error in optimize(llik, init.params = F) : element 1 is empty;
>    the part of the args list of 'min' being evaluated was:
>    (interval)####
>
>
> My data and my code looks like below.
>
>
> R_j R_m
> 0.002 0.026567296
> 0.01 0.003194435
> . .
> . .
> . .
> . .
> 0.0006 0.010281122
>
> a=read.table("D:/ff.txt",header=T)
> attach(a)
> llik=function(R_j,R_m)
> #The parameters al_j, au_j, b_j ,
> and sigma_j need to be estimated and there are no initial
> estimates to them.
> if(R_j< 0)
> {
>  
> LF=sum[log(1/(2*pi*(sigma_j^2)))-(1/(2*(sigma_j^2))*(R_j+al_j-
> b_j*R_m))^2]
> }else if(R_j>0)
> {
>  
> LF=sum[log(1/(2*pi*(sigma_j^2)))-(1/(2*(sigma_j^2))*(R_j+au_j-
> b_j*R_m))^2]
> }else
> {
>  
> LF=sum[(log(pnorm((au_j-b_j*R_m)/sigma_j)-pnorm((al_j-b_j*R_m)
> /sigma_j)))]
> }
> optimize(llik,init.params=F)
> Error in optimize(llik, init.params = F) : element 1 is empty;
>    the part of the args list of 'min' being evaluated was:
>    (interval)
>
> Thank you
>
> Edward
>
> ______________________________________________
> [hidden email] 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.
> *******************************************************************
This email and any attachments are confidential. Any use...{{dropped:8}}

______________________________________________
[hidden email] 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.