我需要使用内核密度估计器基于一组观察值来估计密度函数。基于同一组观察,我还需要使用核密度估计器的导数来估计密度的一阶和二阶导数。带宽肯定会对最终结果产生很大影响。
首先,我知道有两个R函数可以提供KDE带宽。我不确定哪一个更受欢迎。谁能推荐这些R函数中的一种来获得KDE带宽?
其次,对于KDE的派生,我应该选择相同的带宽吗?
我需要使用内核密度估计器基于一组观察值来估计密度函数。基于同一组观察,我还需要使用核密度估计器的导数来估计密度的一阶和二阶导数。带宽肯定会对最终结果产生很大影响。
首先,我知道有两个R函数可以提供KDE带宽。我不确定哪一个更受欢迎。谁能推荐这些R函数中的一种来获得KDE带宽?
其次,对于KDE的派生,我应该选择相同的带宽吗?
Answers:
用于导数估计的最佳带宽将不同于用于密度估计的带宽。通常,密度的每个特征都有其自己的最佳带宽选择器。
如果您的目标是最小化平均积分平方误差(这是通常的标准),则没有主观可言。这是推导使准则最小化的值的问题。等式在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在R中实现density(x,bw="SJ")
。但是,我认为在任何R包中都没有类似的工具可用于导数估计。
与其使用直接核估计,不如使用局部多项式估计器,可能会更好。可以使用R中包中的locpoly()
函数来完成此操作ks
。同样,没有实现最佳带宽选择,但是偏差将小于内核估计器。例如,
den2 <- locpoly(x, bandwidth=?, drv=1) # Need to guess a sensible bandwidth