导数的核密度估计器是否存在最佳带宽?

机器算法验证 r 非参数 密度函数 内核平滑
2022-02-11 12:23:46

我需要使用核密度估计器根据一组观察来估计密度函数。基于同一组观察结果,我还需要使用核密度估计器的导数来估计密度的一阶和二阶导数。带宽肯定会对最终结果产生很大影响。

首先,我知道有几个 R 函数可以提供 KDE 带宽。我不确定哪一个更受欢迎。谁能推荐这些 R 函数中的一个用于 KDE 带宽?

其次,对于KDE的衍生,我应该选择相同的带宽吗?

1个回答

导数估计的最佳带宽将不同于密度估计的带宽。一般来说,密度的每个特征都有自己的最佳带宽选择器。

如果您的目标是最小化平均积分平方误差(这是通常的标准),那么它没有任何主观性。这是导出使标准最小化的值的问题。Hansen (2009)的第 2.10 节给出了这些方程

棘手的部分是最佳带宽是密度本身的函数,所以这个解决方案没有直接用处。有很多方法可以尝试解决这个问题。这些通常使用正态近似来近似密度的一些泛函。(注意,没有假设密度本身是正态的。假设是假设正态性可以获得密度的一些泛函。)

施加近似值的位置决定了带宽选择器的好坏。最粗略的方法被称为“正常参考规则”,它将近似值置于高水平。Hansen (2009) 第 2.10 节的末尾给出了使用这种方法的公式。这种方法是在 CRAN 包中的hns()函数中实现的。ks如果您不想编写自己的代码,这可能是您将获得的最好的。因此,您可以按如下方式估计密度的导数(使用ks):

library(ks)
h <- hns(x,deriv.order=1)
den <- kdde(x, h=h, deriv.order=1)

一种更好的方法,通常称为“直接插入”选择器,将近似值施加在较低的级别。对于直接密度估计,这是 Sheather-Jones 方法,在 R 中使用 实现density(x,bw="SJ")但是,我认为任何 R 包中都没有类似的工具可用于导数估计。

与其使用直接内核估计,不如使用局部多项式估计器。这可以使用Rlocpoly()中的包中的函数来完成ks。同样,没有实现最佳带宽选择,但偏差将小于内核估计器。例如,

den2 <- locpoly(x, bandwidth=?, drv=1) # Need to guess a sensible bandwidth