密度()核估计中的差异与通过划痕计算相比较

时间:2016-11-29 10:51:49

标签: r gaussian kernel-density probability-density

我正在尝试计算高斯核密度,并测试我对density()函数的了解,我决定从头开始计算并比较两个结果。

但是,他们没有提供相同的答案。

我从现有数据集开始

xi <- mtcars$mpg

并可以绘制此数据的核密度,如下所示

plot(density(xi, kernel = "gaussian"))

提供了这个......

Automated gaussian kernel density

然后我从这个计算中获取了一些细节,以便我的计算是一致的。

auto.dens <- density(xi, kernel = "gaussian")
h <- auto.dens$bw # bandwidth for kernel
x0 <- auto.dens$x # points for prediction
然后我自己计算出高斯核密度,而且我有 这是在一个循环中完成的,所以阅读起来更清楚。

fx0 <- NULL

for (j in 1:length(x0)){

    t <- abs(x0[j]-xi)/h

    K <- (1/sqrt(2*pi))*exp(-(t^2)/2)

    fx0 <- c(fx0,sum(K*t)/(length(t)*h))
}

基本计算是按照Daniel Wilks在大气科学统计方法第3版第3.3.6节中详述的。 Equation 3.13 from Wilks textbook 高斯内核设为enter image description here,t为enter image description here

然而,这是我的问题。

然后我将两者结合在一起......

plot(y=fx0,x=x0, type="l", ylim=c(0,0.07))
lines(x=auto.dens$x, y=auto.dens$y, col="red")

密度函数(红色)和我的计算(黑色)的输出,我得到 enter image description here

!这两项计算明显不同!

我是否想念密度函数的工作原理?为什么我无法从头开始计算相同的结果?为什么我的内核估算器提供不同的结果?为什么我的结果不太顺畅?

我需要构建并应用更加复杂的数据集的内核平滑器(不仅仅是密度),并且只做了这个小例子以确保我和自动化函数一样,并且实际上并非如此期待有这个问题。我尝试了各种各样的东西,但是我看不出为什么会得到不同的结果。

提前感谢大家,阅读和评论,无论大小。

编辑:13:40 29/11/2016 解决方案详见下面的答案 enter image description here

1 个答案:

答案 0 :(得分:2)

您不需要)),只需sum(K*t)

sum(K)