【问题标题】:Convergence of R density() function to a delta functionR密度()函数收敛到delta函数
【发布时间】:2013-07-05 10:15:51
【问题描述】:

我对 R density() 函数在边缘情况下的行为有点困惑...

假设我将越来越多的 x=0 点添加到模拟数据集中。我期望的是密度估计会很快收敛(我故意模糊这意味着什么......)到 x = 0 处的 delta 函数。在实践中,拟合肯定会变窄,但速度很慢,如下图所示:

plot(density(c(0,0)), xlim=c(-2,2))
plot(density(c(0,0,0,0)), xlim=c(-2,2))
plot(density(c(rep(0,10000))), xlim=c(-2,2))
plot(density(c(rep(0,10000000))), xlim=c(-2,2))

但如果你在模拟数据中加入一点点噪音,行为会好很多:

plot(density(0.0000001*rnorm(10000000) + c(rep(0,10000000))), xlim=c(-2,2))

就让睡狗躺着?还是我错过了有关密度()的使用?

【问题讨论】:

  • +1 很有趣的问题。我想自己解释一下。

标签: r kernel-density


【解决方案1】:

根据?bw.nrd0density 的默认带宽选择器:

bw.nrd0 实现了一个经验法则,用于选择高斯核密度估计器的带宽。它默认为标准偏差最小值的 0.9 倍和四分位距除以样本大小的 1.34 倍负五分之一幂(= Silverman 的“经验法则”,Silverman (1986, page 48, eqn (3.31))除非四分位数重合,否则肯定会得到肯定的结果。

当您的数据恒定时,四分位数重合,因此保证肯定结果的最后一个条款生效。这基本上意味着选择的带宽不是数据传播的连续函数,为零。

举例说明:

> bw.nrd0(rep(0, 1e6))
[1] 0.05678616
> bw.nrd0(rnorm(1e6, s=1e-6))
[1] 5.672872e-08

【讨论】:

  • 当您使用 RTFM 时会发生令人惊奇的事情 :-) 。很好的侦探工作。
  • 当你 FFSME(寻找...主题专家)时会发生什么也令人惊讶:-) 谢谢 Hong!
【解决方案2】:

实际上(...两腿之间的尾巴...)我现在意识到我的整个问题都被误导了。作为 R 的新手,我立即假设 density() 尝试将不同宽度的高斯拟合到数据点,优化高斯的数量和它们各自的宽度。但实际上它做的事情要简单得多。它只是涂抹了每个数据点,并将涂抹量相加以对数据进行平滑估计。 density() 只是一个简单的平滑算法。所以,是的,RTFM :)

【讨论】:

猜你喜欢
  • 2014-08-15
  • 2018-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-07
  • 2022-01-23
  • 2021-10-05
  • 2018-02-21
相关资源
最近更新 更多