[英]Custom Kernel in kdensity package in R
我需要将定制内核插入R包的帮助,这可能吗? 在kdensity软件包中,它声明“内核功能可以从内置内核列表中选择或定制。”
我在网上找到了有关如何使用kdensity包插入自定义内核的教程,但是,我仍然不清楚它的实际工作原理。
这是教程的链接:( https://cran.r-project.org/web/packages/kdensity/vignettes/tutorial.html )。
我想做的是使用自定义内核0.5e ^(-| x |)和模拟随机正态数据(x = rnorm(100,6,2)来绘制内核估计值。然后从那里更改带宽看看这如何影响情节。
在本教程的基础上,它给出了高斯内核的示例,并对其进行了如下编码:
gaussian = list(
kernel = function(y, x, h) dnorm((y-x)/h),
sd = 1,
support = c(-Inf, Inf))
其中x是数据,y是您要评估它的点,h是带宽。
因此,基于此,我创建了以下代码:
k1=list(
kernel=function(y,x,h){
inside=(y-x)/h
0.5*exp(-1*abs(inside))
},
suport=c(-Inf,Inf)
)
然后,我在kdensity包中运行它,并得到以下错误:
kde=kdensity(N,kernel = "k1",bw=0.5)
Error: The supplied kernel ('k1') is not implemented.
显然是不对的,我不确定如何解决。
任何帮助表示赞赏!
两件事情:
support
,而不是suport
kernel = k1
而不是kernel = "k1"
这给
k1 <- list(
kernel = function(y,x,h) {
inside <- (y - x) / h
0.5 * exp(-1 * abs(inside))},
support = c(-Inf, Inf))
kdensity(rnorm(1000), kernel = k1, bw = 0.5)
#
# Call:
# kdensity(x = rnorm(1000), bw = 0.5, kernel = k1)
#
# Data: rnorm(1000) (1000 obs.)
# Bandwidth: 0.5 ('user supplied')
# Support: (-Inf, Inf)
# Kernel: k1
# Start: uniform
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.