[R] NaN Log-lik value in EM algorithm (fitting Gamma mixture model)

William Dunlap wdunlap at tibco.com
Fri Sep 16 04:32:24 CEST 2016


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



More information about the R-help mailing list