2014-12-01 5 views
2

Предположим, у меня есть данные, такие как следующие:Как получить оценку плотности определенного значения в статистике :: плотность?

val <- .65 
set.seed(1) 
distr <- replicate(1000, jitter(.5, amount = .2)) 
d <- density(distr) 

stats::density Поскольку использует определенный bw, он не включает в себя все возможные значения в интервале (becuase они бесконечны):

d$x[ d$x > .64 & d$x < .66 ] 

[1] 0.6400439 0.6411318 0.6422197 0.6433076 0.6443955 0.6454834 0.6465713 0.6476592 0.6487471 
[10] 0.6498350 0.6509229 0.6520108 0.6530987 0.6541866 0.6552745 0.6563624 0.6574503 0.6585382 
[19] 0.6596261 

I хотел бы найти способ предоставить функции плотности, так что он вернет свою оценку d$y (затем я буду использовать ее для цветных областей графика плотности).

Я не могу догадаться, насколько глупым этот вопрос, но я не могу найти быстрое решение.

Я думал о его получении путем линейной интерполяции d$y, соответствующей двум значениям d$x, которые находятся ближе к val. Есть ли более быстрый способ?

ответ

1

Это иллюстрирует использование approxfun:

> Af <- approxfun(d$x, d$y) 
> Af(val) 
[1] 2.348879 
> plot(d(
+ 
> plot(d) 
> points(val,Af(val)) 
> png();plot(d); points(val,Af(val)); dev.off() 

enter image description here

+0

С помощью линейной интерполяции, у меня были хорошие результаты, но 'approxfun' делает правильно трюк;) Спасибо! –

+0

'approxfun' использует линейную интерполяцию. –

+0

О, ладно, вот почему. –