On Sat, Jan 08, 2011 at 12:20:59AM +0800, zhaoxing731 wrote:
> Hello
> 
>       I want to calculate natural logarithm of sum of combinations as follow: 
> (R code)
> 
>       {
>               
> com_sum=choose(2000000,482)*choose(1000000,118)+choose(2000000,483)*choose(1000000,117)+...+choose(2000000,i)*choose(1000000,600-i)+...+choose(2000000,600)*choose(1000000,0)
>                   #calculate the sum
>          result=log(com_sum)                                     #calculate 
> the log of the sum
>       }
> 
>       But every element of the com_sum is Inf, so I can't get the result
>       Thank you in advance

The natural logarithm of choose() is lchoose(), so the
natural logarithms of the products above are

  i <- 482:600
  logx <- lchoose(2000000,i) + lchoose(1000000,600-i)
  maxlog <- max(logx)
  # [1] 5675.315

The sum of numbers, which have very different magnitudes, may
be approximated by their maximum, so max(logx) is an
approximation of the required logarithm. A more accurate
calculation can be done, for example, as follows

  maxlog + log(sum(exp(logx - maxlog)))
  # [1] 5675.977

Petr Savicky.

______________________________________________
R-help@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.

Reply via email to