Кастомное ядро ​​в пакете kdensity в 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 ответ

Решение

Две вещи:

  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
Другие вопросы по тегам