温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - Gaussian kernel density estimation in R
kernel-density r

其他 - R中的高斯核密度估计

发布于 2021-03-26 19:12:54

我在理解如何在R中实现以下数据集的高斯核密度估计时遇到了麻烦。如果你能帮助我了解如何做到这一点,我将不胜感激。我目前正在尝试在下图的底部获得钟形曲线的公式。如你所见,每个数据点都有一条钟形曲线。(请注意,图片不代表我正在使用的数据。)

在此处输入图片说明

这是我的数据:

x<-c(4.09, 4.46, 4.61, 4.30, 4.03, 5.22, 4.21, 4.07, 4.02, 4.58, 4.66, 4.05, 4.23, 5.51, 4.03, 4.72, 4.47, 4.50, 5.80, 4.30, 4.09, 4.78, 4.18, 4.45, 4.40, 5.60, 4.37, 4.42, 4.88, 4.20, 4.45, 4.10, 4.43, 4.58, 4.40, 4.38) (x有36个元素)

这是内核密度估计器:

在此处输入图片说明

(如果看不到图像,请访问此页面http://sfb649.wiwi.hu-berlin.de/fedc_homepage/xplore/tutorials/xlghtmlnode33.html

其中K(u)= 在此处输入图片说明

是高斯核函数,h = .1516是Scott选择的带宽。

因此,插入后我们得到f hat(x)= 1 /(36 * .1516)(1 / sqrt(2pi))[e ^(-1/2((4.09-x)/。1516)^ 2 + e ^(-1/2((4.46-x)/。1516)^ 2 + ... + e ^(-1/2((4.38-x)/。1516)^ 2]

好的。因此,我们有一个x的函数。但是,如何在上图中获得每个钟形曲线的方程式?例如,如果我们将4.09插入到(x)中,则会得到一个数字,而不是曲线/函数/分布。有人可以帮助我理解为钟形曲线/核密度估计找到方程的过程吗?

查看更多

提问者
Stacker
被浏览
0
MrFlick 2020-10-07 09:30

这是一个函数,将根据你的x值和h返回你的fhat函数

get_fhat <- function(x, h) {
  Vectorize(function(z) 1/length(x)/h*sum(dnorm((x-z)/h)))  
}

该函数返回一个我们可以用来获取值的函数。我们Vectorize这样做,以便可以一次将多个值传递给该函数。

我们可以得到一个值或用

fhat <- get_fhat(x, .1516)
fhat(4.09)
# [1] 0.9121099
curve(fhat, from=min(x), to=max(x))

在此处输入图片说明