R density()函数到delta函数的收敛性

R density()函数到delta函数的收敛性,r,kernel-density,R,Kernel Density,我对边情况下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(

我对边情况下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))

别惹麻烦了?或者,我是否遗漏了密度()的用法?

Per
?bw.nrd0
,密度的默认带宽选择器:

nrd0实现了选择高斯核密度估计器带宽的经验法则。它默认为标准偏差最小值的0.9倍,四分位数范围除以样本量的1.34倍至负五分之一次方(=Silverman的“经验法则”,Silverman(1986年,第48页,等式(3.31))除非四分位数在保证正结果时重合

当数据为常数时,则四分位数重合,因此最后一个保证正结果的条款生效。这基本上意味着所选带宽不是数据扩散的连续函数,即零

举例说明:

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

根据
?bw.nrd0
,密度
的默认带宽选择器:

bw.nrd0实现了选择高斯核密度估计器带宽的经验法则。它默认为标准偏差最小值的0.9倍,四分位数范围除以样本量的1.34倍至负五分之一次方(=Silverman的“经验法则”,Silverman(1986年,第48页,方程(3.31))除非四分位数重合,否则将保证获得正结果

当数据为常数时,则四分位数重合,因此最后一个保证正结果的条款生效。这基本上意味着所选带宽不是数据扩散的连续函数,即零

举例说明:

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

事实上(…两腿之间的尾巴…)我现在意识到我的整个问题都被误导了。对于R来说,我是相当陌生的,所以我立即假设密度()尝试将不同宽度的高斯拟合到数据点,优化高斯的数量及其各自的宽度。但事实上,它做的事情要简单得多。它只是涂抹每个数据点,然后将涂抹相加,以平滑地估计数据。density()这只是一个简单的平滑算法。所以,是的,事实上,RTFM:)

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

+1个非常有趣的问题。我想自己解释一下。+1个非常有趣的问题。我想自己解释一下。当你RTFM:-)的时候会发生什么令人惊讶的事情。很好的侦探工作。当你找到主题专家时发生的事情也很惊人:-)谢谢洪!当您使用RTFM:-)时,会发生惊人的事情。很好的侦探工作。当你找到主题专家时发生的事情也很惊人:-)谢谢洪!如果您想要常规混合建模,请查看package mclust:如果您想要常规混合建模,请查看package mclust: