Кастомное ядро ​​в пакете kdensity в R - PullRequest
0 голосов
/ 11 февраля 2019

Мне нужна помощь по вставке изготовленных на заказ ядер в пакеты 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 Ответ

0 голосов
/ 12 февраля 2019

Две вещи:

  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
...