使用 R 中的“密度”函数查找新数据点的概率密度

问题描述 投票:0回答:3

我正在尝试使用 R 中的“密度”函数找到具有未知分布的连续数据的最佳 PDF。现在,给定一个新数据点,我想基于内核找到该数据点的概率密度我从“密度”函数结果中得到的密度估计器。 我怎样才能做到这一点?

r probability
3个回答
12
投票

如果您的新点将在

density
生成的值范围内,则相当容易做到 - 我建议使用
approx
(或
approxfun
如果您需要它作为函数)来处理插值网格值之间。

这是一个例子:

set.seed(2937107)
x <- rnorm(10,30,3)
dx <- density(x)
xnew <- 32.137
approx(dx$x,dx$y,xout=xnew)

如果我们绘制密度和新点,我们可以看到它正在执行您需要的操作:

enter image description here

如果需要推断新值,这将返回

NA
。如果您想处理外推,我建议直接计算该点的 KDE(使用您拥有的 KDE 的带宽)。


10
投票

这已经有一岁了,但尽管如此,这里还是一个完整的解决方案。我们打电话吧

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
的作用是根据
定义
计算y(t)


请参阅下面 Privé 的评论,了解更简洁但等效且更快的实现。


-4
投票

参见:文档

dnorm(data_point, its_mean, its_stdev)
© www.soinside.com 2019 - 2024. All rights reserved.