2015-04-04 3 views
1

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

+0

Привет, пожалуйста, найдите ответ ниже и подумайте о его принятии, если он вам подходит, иначе я был бы рад узнать, почему он не отвечает на ваш вопрос! –

+0

Полковник Бовель. Кажется, что ваша оценка плотности ядра не является переменной. Я не вижу, где вы меняете параметр сглаживания (h) или любую меру расстояния. Другая проблема: когда я интегрирую данные, CDF больше 1 (я запускал ваш код с одномерным нормальным и сравнивал его с rnorm). – Lio

ответ

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) 

enter image description here

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

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

enter image description here

В соответствии с определением функции адаптивной плотности ядра:

http://en.wikipedia.org/wiki/Variable_kernel_density_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 
+0

Большое спасибо. Является ли этот метод похожим на адаптивное ядро ​​a la silverman? Я видел это в «Методах ядра для оценки распределения использования в исследованиях на внутреннем уровне» (B.J. Worton) – Lio

+1

Полковник Бовель. Похоже, что ваша оценка плотности ядра не является переменной. Я не вижу, где вы меняете параметр сглаживания (h) или любую меру расстояния. Другая проблема: когда я интегрирую данные, CDF больше 1 (я запускал ваш код с одномерным нормальным и сравнивал его с rnorm). – Lio

Смежные вопросы