【发布时间】:2015-08-11 04:38:37
【问题描述】:
当我更改内核密度估计中的带宽时,我不知道为什么 cdf 具有不同的值。在下面的代码中,我从高斯分布生成随机数,并在选择不同的带宽 (h) 时估计数据的核密度。当我整合 pdf 时,我得到的值或多或少与 1 相差甚远。因此,CDF 似乎取决于内核密度估计中使用的带宽。然而,我相信内核密度估计中的因子 1/nh 可确保 pdf 积分为 1。如果带宽是问题,我如何确定它以确保生成的 pdf 积分为 1?
g<-1
n<-1000
set.seed(g)
df <- data.frame(x=sort(rnorm(n,0,1)))
library(functional)
gaussianKernel <- function(u) exp(-u^2/2)/(2*pi)^.5
densityFunction <- function(x, df, ker, h){
difference = t(t(df) - x)/h
W = sum(apply(difference, 1, ker)) / (nrow(df)*h)
}
myDensityFunction <- Curry(densityFunction, df=df, ker=gaussianKernel, h=2)
vect<-vector()
for (i in 1:length(df$x)){
f<-myDensityFunction(df$x[i])
vect<-c(vect,f)
}
f <- approxfun(df$x, vect, yleft = 0, yright = 0)
integrate(f, -Inf, Inf)
【问题讨论】:
标签: r kernel bandwidth kernel-density cumulative-sum