我试图计算高斯核密度,并且为了测试我对density()
函数的了解,我决定从头计算并比较两个结果。密度()内核估计器与计算相比的差异
但是,他们没有提供相同的答案。
我开始与现有的数据集
xi <- mtcars$mpg
,可以绘制该数据的内核密度,如下
plot(density(xi, kernel = "gaussian"))
提供这个...
然后我抓住一些d从这个计算来看,这样我的计算是一致的。
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))
}
基本计算已按照丹尼尔威尔克斯的“大气科学统计方法”第3版第3.3.6节的详细内容构建。 与高斯核设置为和t为
然而,这里是我的问题。
然后我绘制了两人在一起......
plot(y=fx0,x=x0, type="l", ylim=c(0,0.07))
lines(x=auto.dens$x, y=auto.dens$y, col="red")
!这两个计算显然不同!
我想不明白密度函数是如何工作的?为什么我无法从头开始计算相同的结果?为什么我的内核估计器提供不同的结果?为什么我的结果不够流畅?
我需要构建并应用一个内核平滑器(不仅仅是密度)到一个更复杂的数据集中,并且只做这个小例子来确保我的功能与自动化功能相同,期待有这个问题。我尝试了各种各样的东西,只是看不出为什么我会得到不同的结果。
非常感谢大家的阅读和任何意见,无论大小。
编辑:13:40 29/11/2016 解决方案,详细回答下面
谢谢!这解决了这个问题,显然只是我对从教科书中的数学不理解到代码的理解。我很放心,这是一个简单的问题! – Kate2808