【问题标题】:normalizing constant from kernel density in R从 R 中的核密度归一化常数
【发布时间】:2015-11-27 08:19:21
【问题描述】:

如何从非标准分布中获得归一化常数。例如:

x <- c(rnorm(500,10,1),rnorm(500,20,2),rnorm(500,35,1))

在R中使用密度后

dens<-density(x,n=length(x),adjust=0.4)

【问题讨论】:

  • 你是指带宽吗? dens$bw
  • 我不确定,带宽是否与归一化常数相同?
  • 哦,我明白你的意思了,密度已经标准化(或非常接近)。使用f &lt;- approxfun(dens, yleft = 0, yright = 0); integrate(f, lower=min(x)-0.1, upper=max(x)+0.1) 进行检查。所以,答案是 1。

标签: r kernel-density normalizing


【解决方案1】:

密度()的结果应该是一个合适的概率密度函数,所以密度()返回的曲线下面积应该已经是1了。

你的例子:

set.seed(1)
x <- c(rnorm(500,10,1), rnorm(500,20,2), rnorm(500,35,1))
dens <- density(x, n=length(x), adjust=0.4)

我们可以通过数值积分得到pdf下面积的近似值:

install.packages("sfsmisc")
library(sfsmisc)
integrate.xy(dens$x, dens$y)

这给了

[1] 1.000241

该区域确实相当接近 1。

但存在数值精度问题,这可能会导致该区域显着偏离 1。例如,在here 中讨论了这些问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-26
    • 2012-06-09
    • 2013-01-11
    • 2015-09-12
    • 2021-01-25
    • 2015-04-18
    • 2017-02-03
    • 2023-03-06
    相关资源
    最近更新 更多