[R] how to avoid NaN in optim()

Joshua Wiley jwiley.psych at gmail.com
Thu Sep 30 21:13:55 CEST 2010


On Thu, Sep 30, 2010 at 12:04 PM, arindam fadikar
<arindam.fadikar at gmail.com> wrote:
> thanks Ravi .... yes , we were getiing the correct results but we thought
> there should be a way to avoid those NaN values ... and now we are done
> the if condition was written wrongly there ... instead of that if we do
>
>  p > 0 && q > 0 && r > 0 && p < 1 && q < 1 && r < 1
>
> its perfectly fine .. but is there a smart way to write this condition ?

combine p, q, and r.  Here imagine x = c(p, q, r)

x <- c(.5, .5, .5)
all(x > 0 & x < 1)

x2 <- c(.5, .5, 1.01)
all(x2 > 0 & x2 < 1)

In this case you will not want to use && because x has more than one
element.  all() basically just checks that everything is TRUE.

Josh

>
> On Fri, Oct 1, 2010 at 12:30 AM, Ravi Varadhan <rvaradhan at jhmi.edu> wrote:
>
>> I forgot to mention:
>>
>> You actually got correct results with using optim and `CG'.  The warning
>> messages were just telling you that there were some log(negative number)
>> operations during the iterative process.
>>
>> Ravi.
>>
>> ____________________________________________________________________
>>
>> Ravi Varadhan, Ph.D.
>> Assistant Professor,
>> Division of Geriatric Medicine and Gerontology
>> School of Medicine
>> Johns Hopkins University
>>
>> Ph. (410) 502-2619
>> email: rvaradhan at jhmi.edu
>>
>>
>> ----- Original Message -----
>> From: arindam fadikar <arindam.fadikar at gmail.com>
>> Date: Thursday, September 30, 2010 2:17 pm
>> Subject: [R] how to avoid NaN in optim()
>> To: r-help at r-project.org
>>
>>
>> > hi ,
>> >
>> >  lik <- function(nO, nA, nB, nAB){
>> >
>> >  loglik <- function(par)
>> >    {
>> >        p=par[1]
>> >        q=par[2]
>> >        r <- 1 - p - q
>> >
>> >        if (c(p,q,r) > rep(0,3) && c(p,q,r) < rep(1,3) )
>> >
>> >          {
>> >            -(2 * nO * log (r) + nA * log (p^2 + 2 * p * r)
>> >              + nB * log (q^2 + 2 * q * r)
>> >              + nAB * (log(2) +log(p) +log(q)))
>> >         }
>> >        else
>> >          NA
>> >    }
>> >
>> >  loglik
>> >
>> >  }
>> >
>> >
>> >  i want to maximize this likelihood function over the range (0,0,0) to
>> >  (1,1,1). so i tried
>> >
>> >  optim ( c(0.3,0.3), lik ( 176,182 , 60 ,17) , method = "CG")
>> >
>> >  and obtained the following :
>> >
>> >  > optim(c(0.3,0.3), fn, method="CG")
>> >  $par
>> >  [1] 0.26444187 0.09316946
>> >
>> >  $value
>> >  [1] 492.5353
>> >
>> >  $counts
>> >  function gradient
>> >       130       19
>> >
>> >  $convergence
>> >  [1] 0
>> >
>> >  $message
>> >  NULL
>> >
>> >  Warning messages:
>> >  1: In log(q^2 + 2 * q * r) : NaNs produced
>> >  2: In log(q) : NaNs produced
>> >  3: In log(q^2 + 2 * q * r) : NaNs produced
>> >  4: In log(q) : NaNs produced
>> >
>> >
>> >  please help ...
>> >
>> >
>> >  --
>> >  Arindam Fadikar
>> >  M.Stat
>> >  Indian Statistical Institute.
>> >  New Delhi, India
>> >
>> >       [[alternative HTML version deleted]]
>> >
>> >  ______________________________________________
>> >  R-help at r-project.org mailing list
>> >
>> >  PLEASE do read the posting guide
>> >  and provide commented, minimal, self-contained, reproducible code.
>>
>
>
>
> --
> Arindam Fadikar
> M.Stat
> Indian Statistical Institute.
> New Delhi, India
>
>        [[alternative HTML version deleted]]
>
> ______________________________________________
> 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.
>



-- 
Joshua Wiley
Ph.D. Student, Health Psychology
University of California, Los Angeles
http://www.joshuawiley.com/



More information about the R-help mailing list