Одномерная адаптивная оценка плотности ядра в R

Есть ли функция R, которая может вычислить адаптивную функцию плотности ядра для одномерных наблюдений. А как насчет akj (пакет quantreg)? Спасибо.


person Lio    schedule 04.04.2015    source источник
comment
Привет, пожалуйста, найдите ответ ниже и подумайте о том, чтобы принять его, если он вам подходит, в противном случае я был бы рад узнать, почему он не отвечает на ваш вопрос!   -  person Colonel Beauvel    schedule 05.04.2015
comment
Полковник Бовель, похоже, ваша оценка плотности ядра не является переменной. Я не вижу, где вы меняете параметр сглаживания (h) или какую-либо меру расстояния. Другая проблема: когда я интегрирую данные, CDF больше 1 (я запустил ваш код с одномерным нормальным и сравнил его с rnorm).   -  person Lio    schedule 28.05.2015


Ответы (1)


Я не знаю о пакете, но его довольно просто реализовать самостоятельно (это также поможет вам понять, что именно вы делаете), например, давайте возьмем эти значения в план:

g = 5
n = 100
set.seed(g)
df = data.frame(x = unlist(lapply(1:g, function(i) rnorm(n/g, runif(1)*i))),
                y= unlist(lapply(1:g, function(i) rnorm(n/g, runif(1)*i))))

plot(df)

введите описание изображения здесь

Предположим, вы хотите оценить плотность в трех точках x1 = c(6,-1), x2 = c(0.3, 2), x3=c(3, -0.5) на этом распределении. Плотность должна быть слабой на x1, высокой на x2, а плотность на x3 должна быть между этими двумя низкой и высокой плотностями:

points(6,-1, col='red', pch=19)
points(0.3,2, col='blue', pch=19)
points(3,-0.5, col='green', pch=19)

введите описание изображения здесь

Согласно определению адаптивной функции плотности ядра:

http://en.wikipedia.org/wiki/Variable_kernel_dedensity_estimation

library(functional)

gaussianKernel = function(u, h) exp(-sum(u^2)/(2*h^2))

densityFunction = function(x, df, ker, h)
{
    difference = t(t(df) - x)
    W = sum(apply(difference, 1, ker, h=h))
    W/(nrow(df)*(h^(length(df))))
}

myDensityFunction = Curry(densityFunction, df=df, ker=gaussianKernel , h=2)

И у нас есть подтверждение интуитивного результата: 0 <= P(x1) < P(x3) < P(x2) <=1

#> myDensityFunction(x1)
#[1] 0.02140895
#> myDensityFunction(x2)
#[1] 0.1146402
#> myDensityFunction(x3)
#[1] 0.09341908
person Colonel Beauvel    schedule 04.04.2015
comment
большое спасибо. Похож ли этот метод на адаптивное ядро ​​а-ля silverman? Я видел это в методах ядра для оценки распределения использования в домашних исследованиях (Б.Дж. Вортон) - person Lio; 05.04.2015
comment
Полковник Бовель, похоже, ваша оценка плотности ядра не является переменной. Я не вижу, где вы меняете параметр сглаживания (h) или какую-либо меру расстояния. Другая проблема: когда я интегрирую данные, CDF больше 1 (я запустил ваш код с одномерным нормальным и сравнил его с rnorm). - person Lio; 28.05.2015