首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >取决于在核密度估计中使用的带宽?

取决于在核密度估计中使用的带宽?
EN

Stack Overflow用户
提问于 2015-05-28 15:11:19
回答 1查看 663关注 0票数 1

当我改变内核密度估计中的带宽时,我不知道为什么cdf有不同的值。在下面的代码中,我从高斯分布生成随机数,并估计数据在选择不同带宽(h)时的核密度。当我对pdf进行集成时,得到的值与1大致不同。因此,看起来pdf取决于在核密度估计中使用的带宽。然而,我发现内核去容估计中的因子1/nh确保pdf集成到1。如果带宽是问题所在,我如何确定它以确保得到的pdf集成到1?

代码语言:javascript
运行
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-28 15:42:32

关于带宽的影响,你是对的。随着带宽的增加,估计器的偏差增大,方差减小。计算带宽有一些经验法则。下面我给出一个,你可以看到,在适当的带宽下,估计的密度曲线接近于精确的正常值。对你的功能进行矢量法会使你加速。

代码语言:javascript
运行
复制
kernel <- function(u) exp(-u^2/2) / (2*pi)^.5
dens <- Vectorize(function(x, df, ker, h) {
    1/(h*nrow(df)) * sum(ker((df-x)/h))
}, vec="x")

b <- 1.06*(min(1, IQR(df$x)/1.34))*n^(-1/5)  # bandwidth rule-of-thumb
vect <- dens(df$x, df=df, kernel, b)
f <- approxfun(df$x, vect, yleft=0, yright=0)
integrate(f, -Inf, Inf)
# 0.9991092 with absolute error < 0.00012

nvals <- dnorm(df$x)
plot(df$x, nvals)
points(df$x, vect, col="azure3")

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30510492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档