R密度bw.SJ的误差

cry*_*405 5 r density-plot

我使用密度函数与SJ方法:

rdat <- rnorm(111111)
density(rdat, bw = "sj")
Error in bw.SJ(x, method = "ste") : sample is too sparse to find TD
Run Code Online (Sandbox Code Playgroud)

它似乎在大样本上失败,说明样本太稀疏.这种情况以前也有人问在这里,但自2008年以来有什么改变?对于这个/变通办法有没有任何修复?

编辑:限制似乎是 46341

And*_*hin 0

此错误已在 R 3.4.0(2017 年 4 月)中修复。

这是svnlog的相关片段:

r71965 | maechler | 2017-01-13 04:30:18 -0600 (Fri, 13 Jan 2017) | 1 line
Changed paths:
   M /trunk/doc/NEWS.Rd
   M /trunk/src/library/stats/R/bandwidths.R
   M /trunk/src/library/stats/man/bandwidth.Rd
   M /trunk/src/library/stats/man/density.Rd
   M /trunk/src/library/stats/src/bandwidths.c

fix bw.SJ() integer overflow for large n
Run Code Online (Sandbox Code Playgroud)

以下是 R 源代码镜像中的相应提交:https://github.com/wch/r-source/commit/5af0f7200128315392cf813127a654153b5e7739

这是R 3.4.0 变更日志的片段:

带宽选择器bw.ucv()bw.bcv()现在bw.SJ()可以避免大样本量的整数溢出。