内核CDF估计:积分下降到零

时间:2017-07-09 19:31:05

标签: r numerical-integration

我想整合内核密度估计,以获得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))

产生以下情节

enter image description here

正如你所看到的,cdf在~18时降至零,这显然不应该发生。

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

1 个答案:

答案 0 :(得分:4)

为左积分端点使用大的有限数,而不是-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))

enter image description here

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