簡體   English   中英

R中的kdensity包中的自定義內核

[英]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.

顯然是不對的,我不確定如何解決。

任何幫助表示贊賞!

兩件事情:

  1. support ,而不是suport
  2. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM