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

机器算法验证 r 估计 密度函数 内核平滑 奥克
2022-01-30 14:21:07

我正在尝试使用 R 中的“密度”函数来进行核密度估计。我在解释结果和比较各种数据集时遇到了一些困难,因为曲线下的面积似乎不一定是 1。对于任何概率密度函数 (pdf) ϕ(x),我们需要有面积ϕ(x)dx=1. 我假设内核密度估计报告了 pdf。我正在使用来自sfsmisc 的集成.xy来估计曲线下的面积。

> # 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

2个回答

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

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

最优的大号2解决方案涉及“浇水”;找到常数c such that [ϕ(x)c]+ integrates to unity.