我正在尝试使用R中的“密度”函数找到具有未知分布的连续数据的最佳PDF。现在,给定一个新数据点,我想找到基于此数据点的概率密度我从“密度”函数结果得到的核密度估计。 我怎么能这样做?
答案 0 :(得分:5)
如果您的新点数在density
生成的值范围内,那么相当容易做到 - 我建议使用approx
(或{{1如果你需要它作为一个函数)来处理网格值之间的插值。
以下是一个例子:
approxfun
如果我们绘制密度和新点,我们可以看到它正在做你需要的:
如果需要推断新值,则返回set.seed(2937107)
x <- rnorm(10,30,3)
dx <- density(x)
xnew <- 32.137
approx(dx$x,dx$y,xout=xnew)
。如果你想处理外推,我建议直接计算该点的KDE(使用你所拥有的KDE的带宽)。
答案 1 :(得分:3)
这是一年,但不过,这是一个完整的解决方案。我们来电话
d <- density(xs)
并定义h = d$bw
。您的KDE估算完全取决于
xs
,h
,给定新值t
,您可以使用以下函数计算相应的y(t)
,假设您已使用高斯内核进行估算。
myKDE <- function(t){
kernelValues <- rep(0,length(xs))
for(i in 1:length(xs)){
transformed = (t - xs[i]) / h
kernelValues[i] <- dnorm(transformed, mean = 0, sd = 1) / h
}
return(sum(kernelValues) / length(xs))
}
myKDE
所做的是由definition计算y(t)
。
答案 2 :(得分:-2)
请参阅:docs
dnorm(data_point, its_mean, its_stdev)