Le 04/12/2018 à 11:27, Iñaki Ucar a écrit :
On Tue, 4 Dec 2018 at 11:12, <qwey...@mail.ustc.edu.cn> wrote:
function ppois is a function calculate the CDF of Poisson distribution, it
should generate a non-decreasing result, but what I got is:
any(diff(ppois(0:19,lambda=0.9))<0)
[1] TRUE
Actually,
ppois(19,lambda=0.9)<ppois(18,lambda=0.9)
[1] TRUE
Which could not be TRUE.
This is just another manifestation of
0.1 * 3 > 0.3
#> [1] TRUE
This discussion returns to this list from time to time. TLDR; this is
not an R issue, but an unavoidable floating point issue.
Well, here the request may be interpreted not as "do it without round
error" which is indeed unavoidable but rather "please cope with rounding
errors in a way that return consistent result for ppois()". You have
indicated one way to do so (I have just added exp() in the row):
any(diff(exp(ppois(0:19, lambda=0.9, log.p=TRUE))) < 0)
#[1] FALSE
But may be there is another, more economic way?
Serguei.
Solution:
work with log-probabilities instead.
any(diff(ppois(0:40, lambda=0.9, log.p=TRUE))<0)
#> [1] FALSE
Iñaki
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
--
Serguei Sokol
Ingenieur de recherche INRA
Cellule mathématiques
LISBP, INSA/INRA UMR 792, INSA/CNRS UMR 5504
135 Avenue de Rangueil
31077 Toulouse Cedex 04
tel: +33 5 62 25 01 27
email: so...@insa-toulouse.fr
http://www.lisbp.fr
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel