【问题标题】:Kernel CDF estimate: integral drops to zero内核 CDF 估计:积分下降到零
【发布时间】:2017-12-13 11:46:26
【问题描述】:

我想整合核密度估计以获得 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 处降至零,这显然不应该发生。

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

【问题讨论】:

  • plot(x, pnorm(x), type = 'l') 不是问题的答案,但实际上是做同样的事情。

标签: r numerical-integration


【解决方案1】:

为左集成端点使用一个大的有限数,而不是 -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 的数值积分例程不是那么复杂,并且在提供无限端点时有时会失败。 (帮助说使用显式无限间隔可能比大型有限端点更好。在这种情况下,该建议不起作用。)

【讨论】:

  • 这有帮助!实际上,以估计密度的最小值开始集成就足够了:integrate(pdf, min(density(z, bw = "SJ")$x), b)$value
猜你喜欢
  • 2015-08-11
  • 1970-01-01
  • 2016-09-18
  • 2013-10-23
  • 2014-09-07
  • 2015-04-27
  • 2012-06-08
  • 1970-01-01
  • 2014-03-15
相关资源
最近更新 更多