【发布时间】:2017-04-13 08:06:07
【问题描述】:
我正在尝试计算高斯核密度,为了测试我对density() 函数的了解,我决定从头开始计算并比较两个结果。
但是,他们没有提供相同的答案。
我从现有的数据集开始
xi <- mtcars$mpg
并且可以绘制这个数据的核密度,如下
plot(density(xi, kernel = "gaussian"))
提供这个...
然后我从这个计算中获取一些细节,以便我的计算是一致的。
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 节中的详细信息构建的。 高斯核设置为,t 为
但是,这是我的问题。
然后我将两者绘制在一起......
plot(y=fx0,x=x0, type="l", ylim=c(0,0.07))
lines(x=auto.dens$x, y=auto.dens$y, col="red")
!这两种计算方式明显不同!
我是否错过了密度函数的工作原理?为什么我不能从头开始计算相同的结果?为什么我的内核估计器提供不同的结果?为什么我的结果不太顺利?
我需要构建一个内核平滑器(不仅仅是密度)并将其应用于更复杂的数据集,并且只做了这个小例子来确保我正在做与自动化函数相同的操作,实际上并没有期待有这个问题。我已经尝试了各种各样的事情,只是不明白为什么我会得到不同的结果。
提前感谢大家的阅读和任何 cmets,无论大小。
【问题讨论】:
标签: r gaussian kernel-density probability-density