我需要使用核密度估计器根据一组观察来估计密度函数。基于同一组观察结果,我还需要使用核密度估计器的导数来估计密度的一阶和二阶导数。带宽肯定会对最终结果产生很大影响。
首先,我知道有几个 R 函数可以提供 KDE 带宽。我不确定哪一个更受欢迎。谁能推荐这些 R 函数中的一个用于 KDE 带宽?
其次,对于KDE的衍生,我应该选择相同的带宽吗?
我需要使用核密度估计器根据一组观察来估计密度函数。基于同一组观察结果,我还需要使用核密度估计器的导数来估计密度的一阶和二阶导数。带宽肯定会对最终结果产生很大影响。
首先,我知道有几个 R 函数可以提供 KDE 带宽。我不确定哪一个更受欢迎。谁能推荐这些 R 函数中的一个用于 KDE 带宽?
其次,对于KDE的衍生,我应该选择相同的带宽吗?
导数估计的最佳带宽将不同于密度估计的带宽。一般来说,密度的每个特征都有自己的最佳带宽选择器。
如果您的目标是最小化平均积分平方误差(这是通常的标准),那么它没有任何主观性。这是导出使标准最小化的值的问题。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