【问题标题】:Find the probability density of a new data point using "density" function in R使用 R 中的“密度”函数查找新数据点的概率密度
【发布时间】:2015-03-20 13:54:18
【问题描述】:

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

【问题讨论】:

  • @whuber;您可能会提醒提问者 密度 不是概率。 (当我第一次阅读你的答案时,我以为你会说答案是微不足道的,因为任何时候的概率都是(微不足道的)零。)
  • 这是离散分布吗?对于连续分布,观察到任何特定值的概率为 0。不确定为什么将其迁移到此处。似乎挂断仍在统计理解上,而不是编程。
  • @whuber 你是说显而易见的理论答案是 0 吗?这如何使它成为一个编程问题。
  • @MrFlick 理解 OP 的“概率”实际上是指“概率密度”,显而易见的理论答案是该点的核密度估计值——而不是零。问题是关于在R 中计算内核密度估计:这就是使它成为编程问题的原因。这也不是一个完全微不足道的编程问题(尽管它确实有一个非常简单的解决方案),因为R 将其 KDE 作为一个等距值的数组返回,因此需要额外的东西来获得任意值的值论据。
  • @MrFlick R 默认返回的内容不能回答有关“在新数据点”查找 KDE 的问题。 (我已经咨询了density 的帮助页面以确认这一点。)需要一些编程:要么让R 以任意参数提供KDE,要么插值的方式(也许extrapolate) 来自density 返回的数组。 (“编程”可能相当于将可选的nfromto 参数设置为合适的值。)

标签: r probability


【解决方案1】:

如果您的新点将在density 生成的值范围内,这很容易做到——我建议使用approx(或approxfun,如果您需要它作为函数)来处理网格值之间的插值。

这是一个例子:

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

如果我们绘制密度和新点,我们可以看到它正在做你需要的事情:

如果需要推断新值,这将返回 NA。如果您想处理外推,我建议直接计算该点的 KDE(使用您拥有的 KDE 的带宽)。

【讨论】:

    【解决方案2】:

    这是一岁了,但是,这里有一个完整的解决方案。打个电话吧

    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)

    【讨论】:

    • 什么是centri
    • 这太好了,如果可以的话,我会给你更多的支持。
    • @MaxwellChandler 不需要那个:) (但是......你可以创建一百万个用户帐户,然后每个人都可以投票赞成这个问题:))
    • 更简单、更快的等价物:function(xs, t, h = bw.nrd0(xs)) mean(dnorm(t, mean = xs, sd = h)).
    【解决方案3】:

    见:docs

    dnorm(data_point, its_mean, its_stdev)
    

    【讨论】:

    • 我知道我可以使用这些规范函数,但是,它们需要均值和标准差。关键是,对于相同的均值和标准差,使用“密度”函数时,使用不同带宽时,pdf 的结果可能会有所不同!
    • @programming 您应该在您的问题中澄清这一点:通过断言您的数据“具有高斯分布”,您暗示您知道或可以估计其参数。目前,读者必须推断出您确实没有高斯分布,而是从您的数据中使用内核密度估计。您需要明确说明这一点。
    • 啊,我明白了。是的,我没有假设您使用的是数据中的 kde。我赞成@Glen_b 的回答。
    猜你喜欢
    • 2016-06-07
    • 1970-01-01
    • 2012-11-21
    • 2019-04-19
    • 1970-01-01
    • 2011-05-11
    • 2022-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多