我想从估计的 PDF 中找到 CDF。该 PDF 是根据核密度估计(使用 0.6 宽度窗口的高斯核)估计的。
我知道,理论上,CDF 可以估计为:
是否可以将这个积分直接应用于估计的 pdf?在这种情况下,我使用的是 python。
提前致谢。
我想从估计的 PDF 中找到 CDF。该 PDF 是根据核密度估计(使用 0.6 宽度窗口的高斯核)估计的。
我知道,理论上,CDF 可以估计为:
是否可以将这个积分直接应用于估计的 pdf?在这种情况下,我使用的是 python。
提前致谢。
如果您知道内核本身的 cdf,则无需集成任何东西。我相信这对于所有常见的内核来说都是直截了当的。
注意
A KDE 是混合密度
混合物的cdf是 cdf 的混合物。
也就是说,如果你的 KDE 在, 然后 .
以高斯核为例。如果是你的观察,是和, 通常在哪里被定义为带宽(在某些实现中,带宽可能是)。
事实上,R 做到了(定义带宽 =) 对于所有内核,而不仅仅是高斯内核。但是只要您可以将带宽转换为内核的参数就很容易,这样您就可以为 cdf 调用函数。
因此,您可以随时评估混合物的 cdf在线性时间。如果您需要它能够计算 快速,您可以在网格上评估它(足够精细以获得足够的准确性),并在两者之间使用插值(例如,在 R 中,这很容易完成approxfun;毫无疑问 Python 有一种方便的方法来做类似的事情)
这是高斯核的 kde 和 cdf 图的示例。
这是我使用的代码(它是在 R 中完成的——这是一个快速展示这个想法的工具,一个合适的函数将是检查参数、提供更好的信息、标记轴、让你指定内核等等)。主力是第三行,它定义了对 cdf 进行所有实际计算的函数,其他一切都是数据或绘图的细节。
x <- c(11,12,16) #data
xx <- seq(7,20,.1) # plot values for the cdf
kdecdfnorm <- function(x,xdat,bw) rowMeans(pnorm(outer(x,xdat,"-"),0,bw)) #cdf of KDE
opar <- par() # save graphics parameter settings
par(mfrow=c(1,2)) # 1 x 2 plot grid
kde <- density(x)
plot(kde)
bw <- kde$bw
plot(xx,kdecdfnorm(xx,x,bw),type="l")
abline(h=c(0,1),col=rgb(.5,.5,.5,.5),lty=3)
par(opar) # restore graphics parameters
那是如何rowMeans(pnorm(outer(x,xdat,"-"),0,bw))工作的?
rowMeans只是在做它的论点
pnorm正在计算高斯核项的 cdf,最后一个参数是带宽
第一个论点pnorm是在数据值上() 以及我们想要找到曲线的各种 x
也就是说我们只是在计算以一种非常直接的方式,跨越任何价值观我们想计算它。