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

Aanchal Sharma aanchalsharma833 at gmail.com
Fri Sep 16 19:28:35 CEST 2016


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



More information about the R-help mailing list