Кастомное ядро в пакете 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 ответ
Две вещи:
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