Dear all, I would be grateful if anyone can help me with the following: My aim is to compute explicitely the sum S=A+B where A=sum(exp(c_i/d)), i=1,...,n; B, c_i, and d are real numbers with -Inf<B,c_i<+Inf; and d>0. The problem is that when c_i/d >710 (for some i) R is setting exp(c_i/d) to be equal to +Inf and hence the whole summation S. So in simple cases where for example c_i=8 (for some i), and d=0.01 the whole summation is turning out to be infinite. Is there a way to get round that in R? Can anyone suggest any computational trick to calculate S when c_i/d>710 (for some i)? Any suggestions would be much appreciated. Regards, Amy --------------------------------- The Open University is incorporated by Royal Charter (RC 000391), an exempt charity in England & Wales and a charity registered in Scotland (SC 038302). [[alternative HTML version deleted]]
I think you should try one X for A/X=sum(exp(c_i/d -log(X))) The optional X could be as the following ... ## to test ### C = c(c_i/d; i=1,2,...,n) n<-1000; C<-runif(n,700,1000); ##################### M<-1;while (2*M < Inf) M<-2*M; X<- exp(max(C) - log (M/n)); cat('A=',sum(exp(C-log(X))),'*',X) On Sat, Oct 25, 2008 at 12:42 AM, A.Noufaily <A.Noufaily at open.ac.uk> wrote:> > Dear all, > > I would be grateful if anyone can help me with the following: > > My aim is to compute explicitely the sum S=A+B where A=sum(exp(c_i/d)), > i=1,...,n; > B, c_i, and d are real numbers with -Inf<B,c_i<+Inf; and d>0. > The problem is that when c_i/d >710 (for some i) R is setting > exp(c_i/d) to be equal to +Inf and hence the whole summation S. > So in simple cases where for example c_i=8 (for some i), and d=0.01 the > whole summation is turning out to be infinite. > Is there a way to get round that in R? > Can anyone suggest any computational trick to calculate S when c_i/d>710 > (for some i)? > > Any suggestions would be much appreciated. > > Regards, > > Amy > > > > > > --------------------------------- > The Open University is incorporated by Royal Charter (RC 000391), an exempt charity in England & Wales and a charity registered in Scotland (SC 038302). > > [[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. >
On 24/10/2008 12:42 PM, A.Noufaily wrote:> Dear all, > > I would be grateful if anyone can help me with the following: > > My aim is to compute explicitely the sum S=A+B where A=sum(exp(c_i/d)), > i=1,...,n; > B, c_i, and d are real numbers with -Inf<B,c_i<+Inf; and d>0. > The problem is that when c_i/d >710 (for some i) R is setting > exp(c_i/d) to be equal to +Inf and hence the whole summation S. > So in simple cases where for example c_i=8 (for some i), and d=0.01 the > whole summation is turning out to be infinite. > Is there a way to get round that in R? > Can anyone suggest any computational trick to calculate S when c_i/d>710 > (for some i)?Work on a log scale. Use the identity that A+B = A*(1 + B/A) = exp(log(A) + log(1 + B/A)) (where you chose A to be the biggest term in the sum). Duncan Murdoch> > Any suggestions would be much appreciated. > > Regards, > > Amy > > > > > > --------------------------------- > The Open University is incorporated by Royal Charter (RC 000391), an exempt charity in England & Wales and a charity registered in Scotland (SC 038302). > > [[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.
I suspect there's a deeper issue here. sum(exp(yi)) when large yi occur is problematic. exp(yi) for yi>710 is just a huge number, and summing additional values only makes the overall sum larger as all components of the summation are positive. There's no way around that. You could try this with Robin Hankins' package "brobdingnag" which can handle bunches of bizarrely large numbers. What kind of process are you studying? What kind of process generates values such as exp(8/0.01) when other values are much smaller? Are these outliers in an otherwise well-behaved data set? Perhaps then they need to be set aside and investigated separately, etc. Steven McKinney Statistician Molecular Oncology and Breast Cancer Program British Columbia Cancer Research Centre email: smckinney +at+ bccrc +dot+ ca tel: 604-675-8000 x7561 BCCRC Molecular Oncology 675 West 10th Ave, Floor 4 Vancouver B.C. V5Z 1L3 Canada -----Original Message----- From: r-help-bounces at r-project.org on behalf of Duncan Murdoch Sent: Fri 10/24/2008 4:04 PM To: A.Noufaily Cc: r-help at r-project.org Subject: Re: [R] Computational problems in R On 24/10/2008 12:42 PM, A.Noufaily wrote:> Dear all, > > I would be grateful if anyone can help me with the following: > > My aim is to compute explicitely the sum S=A+B where A=sum(exp(c_i/d)), > i=1,...,n; > B, c_i, and d are real numbers with -Inf<B,c_i<+Inf; and d>0. > The problem is that when c_i/d >710 (for some i) R is setting > exp(c_i/d) to be equal to +Inf and hence the whole summation S. > So in simple cases where for example c_i=8 (for some i), and d=0.01 the > whole summation is turning out to be infinite. > Is there a way to get round that in R? > Can anyone suggest any computational trick to calculate S when c_i/d>710 > (for some i)?Work on a log scale. Use the identity that A+B = A*(1 + B/A) = exp(log(A) + log(1 + B/A)) (where you chose A to be the biggest term in the sum). Duncan Murdoch> > Any suggestions would be much appreciated. > > Regards, > > Amy > > > > > > --------------------------------- > The Open University is incorporated by Royal Charter (RC 000391), an exempt charity in England & Wales and a charity registered in Scotland (SC 038302). > > [[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.______________________________________________ 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.