R中内核密度估计中“ pdf”下的区域


15

我正在尝试在R中使用' density '函数进行内核密度估计。我有一些困难,解释结果和比较不同的数据集,因为它似乎在曲线下面积不一定1.对于任何概率密度函数(PDF) ,我们需要有区域- φ x d x = 1。我假设内核密度估计报告pdf。我使用integrate.xysfsmisc估计曲线下面积。ϕ(x)ϕ(x)dx=1

> # generate some data
> xx<-rnorm(10000)
> # get density
> xy <- density(xx)
> # plot it
> plot(xy)

密度图

> # load the library
> library(sfsmisc)
> integrate.xy(xy$x,xy$y)
[1] 1.000978
> # fair enough, area close to 1
> # use another bw
> xy <- density(xx,bw=.001)
> plot(xy)

bw = .001时的密度

> integrate.xy(xy$x,xy$y)
[1] 6.518703
> xy <- density(xx,bw=1)
> integrate.xy(xy$x,xy$y)
[1] 1.000977
> plot(xy)

bw = 1时的密度

> xy <- density(xx,bw=1e-6)
> integrate.xy(xy$x,xy$y)
[1] 6507.451
> plot(xy)

bw = 1e-6时的密度

曲线下的面积不应该总是1吗?看来小带宽是个问题,但有时您想在尾部显示详细信息等,并且需要小带宽。

更新/回答:

220

> xy <- density(xx,n=2^15,bw=.001)
> plot(xy)

更高的采样点密度

> integrate.xy(xy$x,xy$y)
[1] 1.000015
> xy <- density(xx,n=2^20,bw=1e-6)
> integrate.xy(xy$x,xy$y)
[1] 2.812398


3
这似乎是density()的浮点限制:使用1e-6的带宽,(理论上)您将创建10,000个峰值的集合,每个峰值的总质量为1/10000。这些尖峰最终主要由其峰值表示,而没有充分表征间隙。您只是将density()推到了极限之外。
Whuber

@whuber,通过浮点数限制,您是指精度的限制,因为与使用双精度数相比,使用浮点数会导致更大的误差高估。我不认为会发生什么,但希望看到一些证据。
highBandWidth 2011年

n

1

@ Anony-Mousse,是的,这就是这个问题要问的问题。为什么不将其评估为1?
highBandWidth

Answers:


9

考虑一下梯形规则的integrate.xy()使用。对于正态分布,它将低估密度为凹面(因此线性插值低于真实密度)的区间(-1,1)中曲线下方的面积,而高估其他位置的密度(随着线性插值的进行)在真实密度之上)。由于后一个区域较大(如果愿意,可以用Lesbegue度量),因此梯形规则往往会高估积分。现在,当您转向较小的带宽时,几乎所有的估计都是分段凸的,对应于数据点有很多窄的尖峰,以及它们之间的谷值。这就是梯形规则特别严重的地方。


这意味着,从某种程度上来说,我们正在“过度采样”峰值而“欠采样”山谷。由于可视化也遵循梯形规则(样本之间的线性插值),因此内核带宽似乎太小也不利于可视化。同样,如果我们可以得到更多的点来计算密度,那么问题就更少了。
highBandWidth 2011年

1
这种解释不成立。问题在于密度没有充分离散,而不是梯形规则严重分解。集成()无法获得正确答案,因为密度()不能产生正确的表示形式。要看到这一点,只需检查xy $ x:它只有512个值,打算代表10,000个窄尖峰!
ub

@whuber,那就是答案。关键是您需要对有限数量的样本使用梯形法则,并且根据内核,它与连续轴上的真实密度相比高估了面积。问题末尾的我的更新对此进行了扩展。
highBandWidth

1
@高没有; 梯形法则工作正常。问题在于它正在对被积物进行不正确的离散化处理。当密度数组中只有10,000个数据点和512个值时,就不可能有“与数据点相对应的许多窄尖峰”!
ub

1
查看这些图表,我现在认为问题出在density而不是integrate.xy。在N = 10000和bw = 1e-6的情况下,您将必须看到一个梳齿,每个齿的高度约为1e6,并且齿的密度在0附近。相反,您仍然可以看到可识别的钟形曲线。density作弊也是如此,或者至少应该以微小的带宽不同地使用它:n应该大约是(数据范围)/(bw),而不是默认值n=512。整合者一定是density从不幸的巧合中获得了巨大的价值之一。
StasK 2011年

-1

没关系,您可以修复它的偏移和缩放;将最小的数字相加,以使密度为非负数,然后将整个数乘以一个常数,以使面积为1。这是简单的方法。

最佳 大号2解决方案涉及“浇水”;寻找常数C 这样 [ϕX-C]+ 整合为一体。


2
请注意,这个问题是相当的,为什么density功能不会产生“正确”的密度集成,1 -而不是如何解决它。
蒂姆
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.