From bbo|ker @end|ng |rom gm@||@com  Fri Aug  7 21:41:33 2020
From: bbo|ker @end|ng |rom gm@||@com (Ben Bolker)
Date: Fri, 7 Aug 2020 15:41:33 -0400
Subject: [Rd] qnbinom with small size is slow
In-Reply-To: <CANk-X-3TxnVsQYOS9TE4Cs8bP8E1m3Mu6V2mXcZSkp3Sxj4mfA@mail.gmail.com>
References: <CANk-X-3TxnVsQYOS9TE4Cs8bP8E1m3Mu6V2mXcZSkp3Sxj4mfA@mail.gmail.com>
Message-ID: <72e43a04-38fd-18bd-a379-257f1082104f@gmail.com>

 ?? I can reproduce this on

R Under development (unstable) (2020-07-24 r78910)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Pop!_OS 18.04 LTS

 ? In my opinion this is worth reporting, but discussing it here first 
was a good idea.? Many more people read this list than watch the bug 
tracker, so it will get more attention here; once the excitement has 
died down here (which might be almost immediately!), if no-one has 
already volunteered to post it to the bug tracker, request an account 
(as specified at https://www.r-project.org/bugs.html )

 ? Thanks!

 ?? Ben Bolker


For what it's worth it doesn't seem to be a threshold effect: approximately

log10(time[seconds]) ~ -8 - log10(-size)

over the range from 1e-6 to 1e-9


ff <- function(x) {
 ?? system.time(qnbinom(0.5, mu=3, size=10^x))[["elapsed"]]
}
svec <- seq(-5,-9,by=-0.2)
res <- lapply(svec, function(x) {
 ??? cat(x,"\n")
 ??? replicate(10,ff(x))
 ??? })

dd <- data.frame(size=rep(svec,each=10),
 ???????????????? time=unlist(res))
boxplot(log10(time)~size, dd)
summary(lm(log10(time)~size, data=dd, subset=time>0))




On 8/7/20 2:01 PM, Constantin Ahlmann-Eltze via R-devel wrote:

> Hi all,
>
> I recently noticed that `qnbinom()` can take a long time to calculate
> a result if the `size` argument is very small.
> For example
>     qnbinom(0.5, mu = 3, size = 1e-10)
> takes ~30 seconds on my computer.
>
> I used gdb to step through the qnbinom.c implementation and noticed
> that in line 106
> (https://github.com/wch/r-source/blob/f8d4d7d48051860cc695b99db9be9cf439aee743/src/nmath/qnbinom.c#L106)
> `y` becomes a very large negative number. Later in the function `y` is
> (as far as I can see) only used as input for `pnbinom()` which is why
> I would assume that it should be a non-negative integer.
>
> I was wondering if this behavior could be considered a bug and should
> be reported on the bugzilla? I read the instructions at
> https://www.r-project.org/bugs.html and wasn't quite sure, so I
> decided to ask here first :)
>
> Best,
> Constantin
>
>
>
>
> PS: I tested the code with R 4.0.0 on macOS and the latest unstable
> version using docker (https://github.com/wch/r-debug). The session
> info is
>> sessionInfo()
> R Under development (unstable) (2020-08-06 r78973)
> Platform: x86_64-pc-linux-gnu (64-bit)
> Running under: Ubuntu 20.04 LTS
>
> Matrix products: default
> BLAS:   /usr/local/RD/lib/R/lib/libRblas.so
> LAPACK: /usr/local/RD/lib/R/lib/libRlapack.so
>
> locale:
>   [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
>   [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
>   [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
>   [7] LC_PAPER=en_US.UTF-8       LC_NAME=C
>   [9] LC_ADDRESS=C               LC_TELEPHONE=C
> [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
>
> attached base packages:
> [1] stats     graphics  grDevices utils     datasets  methods   base
>
> loaded via a namespace (and not attached):
> [1] compiler_4.1.0
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



[Rd] qnbinom with small size is slow
Ben Bolker