[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