内核 CDF 估计:积分降为零

Kernel CDF estimate: integral drops to zero

我想积分核密度估计以获得 cdf 的核估计。

这是我的代码:

set.seed(1)
z <- rnorm(250)
pdf <- approxfun(density(z, bw = "SJ"), yleft = 0, yright = 0)
cdf <- function(b) {
  integrate(pdf, -Inf, b)$value
}
x <- seq(-20, 20, 0.1)
plot(x, sapply(x, cdf), type = "l", xlab = "x", ylab = "density", ylim= c(0, 1))

产生以下情节

如您所见,cdf 在 ~18 处降至零,这显然不应该发生。

为什么会发生这种情况,我该如何避免?

为左积分端点使用较大的有限数,而不是 -infinity。

cdf <- function(b)
{
    integrate(pdf, -20, b)$value
}
x <- seq(-20, 20, 0.1)
plot(x, sapply(x, cdf), type="l", xlab="x", ylab="density", ylim=c(0, 1))

原因主要是因为 R 的数值积分例程没有那么复杂,有时在提供无限端点时会失败。 (帮助说使用显式无限间隔比大的有限端点更好。在这种情况下,该建议不起作用。)