使用 Epanechnikov 内核的 np 包内核密度估计

机器算法验证 r 非参数 内核平滑
2022-04-03 01:06:09

我正在使用 MASS 包中的“间歇泉”数据集并比较 np 包的内核密度估计。

我的问题是使用最小二乘交叉验证和 Epanechnikov 核来理解密度估计:

blep<-npudensbw(~geyser$waiting,bwmethod="cv.ls",ckertype="epanechnikov")
plot(npudens(bws=blep))

在此处输入图像描述

对于高斯内核,它似乎很好:

blga<-npudensbw(~geyser$waiting,bwmethod="cv.ls",ckertype="gaussian")
plot(npudens(bws=blga))

在此处输入图像描述

或者,如果我使用 Epanechnikov 内核和最大似然 cv:

bmax<-npudensbw(~geyser$waiting,bwmethod="cv.ml",ckertype="epanechnikov")
plot(npudens(~geyser$waiting,bws=bmax))

是我的错还是包裹有问题?

编辑:如果我将 Mathematica 用于 Epanechnikov 内核和最小二乘 cv 它正在工作:

d = SmoothKernelDistribution[data, bw = "LeastSquaresCrossValidation", ker = "Epanechnikov"]
Plot[{PDF[d, x], {x, 20,110}]
1个回答

编辑

常见问题解答中对此进行了解释

我使用 plot() (npplot()) 来绘制密度图,结果图看起来像倒置密度而不是密度

当数据驱动的带宽显着不足时,就会发生这种情况。由于可能存在异常值或连续数据的舍入/离散化等,数据驱动的(即自动)带宽选择程序不能保证总是产生良好的结果。默认情况下,npplot() 取数据的两个极端值(最小值、最大值,即实际数据点),然后创建一个等间距的评估数据网格(即,通常不是实际数据点)并计算这些点的密度。由于带宽非常小,这些评估点的密度估计正确为零,而样本实现的密度估计(在这种情况下只有两个,最小值和最大值)非零,因此我们在边缘得到两个峰值情节和一个平碗在其他地方都等于零。当您的数据高度离散化并且您将其视为连续数据时,也会发生这种情况。在这种情况下,按顺序处理数据可能会导致更合理的估计

按照建议将数据按顺序处理,有效:

blep<-npudensbw(~ordered(geyser$waiting), 
                bwmethod="cv.ls", ckertype="epanechnikov", ckerorder=2)

在此处输入图像描述

它也可以在更高的内核阶数下成功,例如ckerorder=4在这个例子中:

在此处输入图像描述