我正在尝试在R中使用' density '函数进行内核密度估计。我有一些困难,解释结果和比较不同的数据集,因为它似乎在曲线下面积不一定1.对于任何概率密度函数(PDF) ,我们需要有区域∫ ∞ - ∞ φ (x )d x = 1。我假设内核密度估计报告pdf。我使用integrate.xy从sfsmisc估计曲线下面积。
> # 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)
> 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)
> xy <- density(xx,bw=1e-6)
> integrate.xy(xy$x,xy$y)
[1] 6507.451
> plot(xy)
曲线下的面积不应该总是1吗?看来小带宽是个问题,但有时您想在尾部显示详细信息等,并且需要小带宽。
更新/回答:
> 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年
@ Anony-Mousse,是的,这就是这个问题要问的问题。为什么不将其评估为1?
—
highBandWidth