Aanchal Sharma
2016-Sep-15 22:04 UTC
[R] NaN Log-lik value in EM algorithm (fitting Gamma mixture model)
I am using a function gammamixEM where it does it by default. I do not have the option to change it. Conceptually, what can make the algorithm not able to calculate likelihood value at all (and hence log-lik=Nan)? Is there sth wrong with the data? Under what conditions does it happen? On Wed, Sep 14, 2016 at 8:04 PM, Duncan Murdoch <murdoch.duncan at gmail.com> wrote:> On 14/09/2016 4:46 PM, Aanchal Sharma wrote: > >> Hi, >> >> I am trying to fit Gamma mixture model to my data (residual values >> obtained >> after fitting Generalized linear Model) using gammamixEM. It is part of >> the >> script which does it for multiple datasets in loop. The code is running >> fine for some datasets but it terminates for some giving following error: >> >> " iteration = 1 log-lik diff = NaN log-lik = NaN >> Error in while (diff > epsilon && iter < maxit) { : >> missing value where TRUE/FALSE needed" >> >> Seems like EM is not able to calculate log-lik value (NaN) at the first >> iteration itself. any idea why that can happen? >> It works fine for the other genes in the loop. Tried looking for >> difference >> in the inputs, but could not come up with anything striking. >> >> > THere are lots of ways to get NaN in numerical calculations. A common > one if you are using log() to calculate log likelihoods is that rounding > error gives you a negative likelihood, and then log(lik) comes out to NaN. > > You just need to look really closely at each step of your calculations. > Avoid using log(); use the functions that build it in (e.g. instead of > log(dnorm(x)), use dnorm(x, log = TRUE)). > > Duncan Murdoch > >-- Anchal Sharma, PhD Postdoctoral Fellow 195, Little Albany street, Cancer Institute of New Jersey Rutgers University NJ-08901 [[alternative HTML version deleted]]
William Dunlap
2016-Sep-16 02:32 UTC
[R] NaN Log-lik value in EM algorithm (fitting Gamma mixture model)
Does the data contain non-positive values?> out <- mixtools::gammamixEM(as.numeric(0:100), lambda = c(1, 1, 1)/3,verb = TRUE) iteration = 1 log-lik diff = NaN log-lik = NaN Error in while (diff > epsilon && iter < maxit) { : missing value where TRUE/FALSE needed Bill Dunlap TIBCO Software wdunlap tibco.com On Thu, Sep 15, 2016 at 3:04 PM, Aanchal Sharma <aanchalsharma833 at gmail.com> wrote:> I am using a function gammamixEM where it does it by default. I do not have > the option to change it. > Conceptually, what can make the algorithm not able to calculate likelihood > value at all (and hence log-lik=Nan)? Is there sth wrong with the data? > Under what conditions does it happen? > > On Wed, Sep 14, 2016 at 8:04 PM, Duncan Murdoch <murdoch.duncan at gmail.com> > wrote: > > > On 14/09/2016 4:46 PM, Aanchal Sharma wrote: > > > >> Hi, > >> > >> I am trying to fit Gamma mixture model to my data (residual values > >> obtained > >> after fitting Generalized linear Model) using gammamixEM. It is part of > >> the > >> script which does it for multiple datasets in loop. The code is running > >> fine for some datasets but it terminates for some giving following > error: > >> > >> " iteration = 1 log-lik diff = NaN log-lik = NaN > >> Error in while (diff > epsilon && iter < maxit) { : > >> missing value where TRUE/FALSE needed" > >> > >> Seems like EM is not able to calculate log-lik value (NaN) at the first > >> iteration itself. any idea why that can happen? > >> It works fine for the other genes in the loop. Tried looking for > >> difference > >> in the inputs, but could not come up with anything striking. > >> > >> > > THere are lots of ways to get NaN in numerical calculations. A common > > one if you are using log() to calculate log likelihoods is that rounding > > error gives you a negative likelihood, and then log(lik) comes out to > NaN. > > > > You just need to look really closely at each step of your calculations. > > Avoid using log(); use the functions that build it in (e.g. instead of > > log(dnorm(x)), use dnorm(x, log = TRUE)). > > > > Duncan Murdoch > > > > > > > -- > Anchal Sharma, PhD > Postdoctoral Fellow > 195, Little Albany street, > Cancer Institute of New Jersey > Rutgers University > NJ-08901 > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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. >[[alternative HTML version deleted]]
Aanchal Sharma
2016-Sep-16 17:28 UTC
[R] NaN Log-lik value in EM algorithm (fitting Gamma mixture model)
Data has no negative values. Values range from 0.001 to 1.01. Following is the summary, in case that helps: Min. 1st Qu. Median Mean 3rd Qu. Max. 0.0010 0.8126 0.8536 0.8464 0.8888 1.0180 SD: 0.07489977 Any clue? On Thu, Sep 15, 2016 at 10:32 PM, William Dunlap <wdunlap at tibco.com> wrote:> Does the data contain non-positive values? > > > out <- mixtools::gammamixEM(as.numeric(0:100), lambda = c(1, 1, 1)/3, > verb = TRUE) > iteration = 1 log-lik diff = NaN log-lik = NaN > Error in while (diff > epsilon && iter < maxit) { : > missing value where TRUE/FALSE needed > > > Bill Dunlap > TIBCO Software > wdunlap tibco.com > > On Thu, Sep 15, 2016 at 3:04 PM, Aanchal Sharma < > aanchalsharma833 at gmail.com> wrote: > >> I am using a function gammamixEM where it does it by default. I do not >> have >> the option to change it. >> Conceptually, what can make the algorithm not able to calculate likelihood >> value at all (and hence log-lik=Nan)? Is there sth wrong with the data? >> Under what conditions does it happen? >> >> On Wed, Sep 14, 2016 at 8:04 PM, Duncan Murdoch <murdoch.duncan at gmail.com >> > >> wrote: >> >> > On 14/09/2016 4:46 PM, Aanchal Sharma wrote: >> > >> >> Hi, >> >> >> >> I am trying to fit Gamma mixture model to my data (residual values >> >> obtained >> >> after fitting Generalized linear Model) using gammamixEM. It is part of >> >> the >> >> script which does it for multiple datasets in loop. The code is running >> >> fine for some datasets but it terminates for some giving following >> error: >> >> >> >> " iteration = 1 log-lik diff = NaN log-lik = NaN >> >> Error in while (diff > epsilon && iter < maxit) { : >> >> missing value where TRUE/FALSE needed" >> >> >> >> Seems like EM is not able to calculate log-lik value (NaN) at the first >> >> iteration itself. any idea why that can happen? >> >> It works fine for the other genes in the loop. Tried looking for >> >> difference >> >> in the inputs, but could not come up with anything striking. >> >> >> >> >> > THere are lots of ways to get NaN in numerical calculations. A common >> > one if you are using log() to calculate log likelihoods is that rounding >> > error gives you a negative likelihood, and then log(lik) comes out to >> NaN. >> > >> > You just need to look really closely at each step of your calculations. >> > Avoid using log(); use the functions that build it in (e.g. instead of >> > log(dnorm(x)), use dnorm(x, log = TRUE)). >> > >> > Duncan Murdoch >> > >> > >> >> >> -- >> Anchal Sharma, PhD >> Postdoctoral Fellow >> 195, Little Albany street, >> Cancer Institute of New Jersey >> Rutgers University >> NJ-08901 >> >> [[alternative HTML version deleted]] >> >> ______________________________________________ >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide http://www.R-project.org/posti >> ng-guide.html >> and provide commented, minimal, self-contained, reproducible code. >> > >-- Anchal Sharma, PhD Postdoctoral Fellow 195, Little Albany street, Cancer Institute of New Jersey Rutgers University NJ-08901 [[alternative HTML version deleted]]