Есть ли функция R, которая может вычислить адаптивную функцию плотности ядра для одномерных наблюдений. А как насчет akj (пакет quantreg
)? Спасибо.
Одномерная адаптивная оценка плотности ядра в R
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
большое спасибо. Похож ли этот метод на адаптивное ядро а-ля silverman? Я видел это в методах ядра для оценки распределения использования в домашних исследованиях (Б.Дж. Вортон)
- person Lio; 05.04.2015
Полковник Бовель, похоже, ваша оценка плотности ядра не является переменной. Я не вижу, где вы меняете параметр сглаживания (h) или какую-либо меру расстояния. Другая проблема: когда я интегрирую данные, CDF больше 1 (я запустил ваш код с одномерным нормальным и сравнил его с rnorm).
- person Lio; 28.05.2015