use*_*905 2 normalizing r kernel-density
如何从非标准分布中获得归一化常数。前任:
x <- c(rnorm(500,10,1),rnorm(500,20,2),rnorm(500,35,1))
Run Code Online (Sandbox Code Playgroud)
在 R 中使用密度后
dens<-density(x,n=length(x),adjust=0.4)
Run Code Online (Sandbox Code Playgroud)
密度()的结果应该是一个合适的概率密度函数,所以密度()返回的曲线下面积应该已经是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)
Run Code Online (Sandbox Code Playgroud)
我们可以通过数值积分得到 pdf 下面积的近似值:
install.packages("sfsmisc")
library(sfsmisc)
integrate.xy(dens$x, dens$y)
Run Code Online (Sandbox Code Playgroud)
这使
[1] 1.000241
Run Code Online (Sandbox Code Playgroud)
该区域确实相当接近于 1。
然而,存在数值精度问题,这可能会导致该区域显着偏离 1。例如,此处讨论了这些问题。