Я пытаюсь использовать функцию плотности в R для оценки плотности ядра. У меня возникли некоторые трудности при интерпретации результатов и сравнении различных наборов данных, так как кажется, что площадь под кривой не обязательно равна 1. Для любой функции плотности вероятности (pdf) нам нужно иметь площадь . Я предполагаю, что оценка плотности ядра сообщает PDF. Я использую integrate.xy из sfsmisc, чтобы оценить площадь под кривой.∫ ∞ - ∞ ϕ ( x ) d x = 1
> # generate some data
> xx<-rnorm(10000)
> # get density
> xy <- density(xx)
> # plot it
> plot(xy)
> # load the library
> library(sfsmisc)
> integrate.xy(xy$x,xy$y)
[1] 1.000978
> # fair enough, area close to 1
> # use another bw
> xy <- density(xx,bw=.001)
> plot(xy)
> integrate.xy(xy$x,xy$y)
[1] 6.518703
> xy <- density(xx,bw=1)
> integrate.xy(xy$x,xy$y)
[1] 1.000977
> plot(xy)
> xy <- density(xx,bw=1e-6)
> integrate.xy(xy$x,xy$y)
[1] 6507.451
> plot(xy)
Разве площадь под кривой не должна всегда быть 1? Кажется, небольшая пропускная способность является проблемой, но иногда вы хотите показать детали и т. Д. В хвостах, и требуются небольшие пропускные способности.
Обновление / ответ:
Кажется, что ответ ниже о переоценке в выпуклых областях является правильным, так как увеличение количества точек интегрирования, кажется, уменьшает проблему (я не пытался использовать более точек.)
> xy <- density(xx,n=2^15,bw=.001)
> plot(xy)
> integrate.xy(xy$x,xy$y)
[1] 1.000015
> xy <- density(xx,n=2^20,bw=1e-6)
> integrate.xy(xy$x,xy$y)
[1] 2.812398
источник
Ответы:
Подумайте об использовании правила трапеции
integrate.xy()
. Для нормального распределения он будет недооценивать площадь под кривой в интервале (-1,1), где плотность является вогнутой (и, следовательно, линейная интерполяция ниже истинной плотности), и переоценивать ее в другом месте (поскольку линейная интерполяция идет на вершине истинной плотности). Поскольку последняя область больше (в мерке Лесбега, если хотите), правило трапеции имеет тенденцию переоценивать интеграл. Теперь, когда вы переходите на меньшую полосу пропускания, почти все ваши оценки являются кусочно выпуклыми, с множеством узких пиков, соответствующих точкам данных и промежутками между ними. Вот где правило трапеции особенно сильно нарушается.источник
density
скорее с , чем сintegrate.xy
. При N = 10000 и мт = 1E6, вы должны увидеть расческу с высотой каждого зуба около 1E6, и зубов является более плотной вокруг 0. Вместо этого вы все еще видите узнаваемую колоколообразной кривой. Такdensity
что изменяет вам, или, по крайней мере, его следует использовать по-другому с крошечной пропускной способностью:n
должно быть около (диапазон данных) / (bw), а не по умолчаниюn=512
. Интегратор должен подобрать одно из этих огромных значений, котороеdensity
возвращается по несчастному совпадению.Это нормально, вы можете исправить это, сдвигая и масштабируя; добавьте наименьшее число так, чтобы плотность была неотрицательной, а затем умножьте все это на константу, так что площадь будет равна единице. Это простой способ.
источник
density
функция не дает «правильный» плотность , которая интегрируется в 1 - а затем о том , как это исправить.