Próbuję użyć funkcji „ gęstości ” w R do oszacowania gęstości jądra. Mam pewne trudności z interpretacją wyników i porównywaniem różnych zestawów danych, ponieważ wydaje się, że obszar pod krzywą niekoniecznie jest 1. Dla każdej funkcji gęstości prawdopodobieństwa (pdf) musimy mieć obszar ∫ ∞ - ∞ ϕ ( x ) d x = 1 . Zakładam, że oszacowanie gęstości jądra zgłasza pdf. Korzystam z integrate.xy z sfsmisc, aby oszacować obszar pod krzywą.
> # 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)
Czy obszar pod krzywą nie powinien zawsze wynosić 1? Wygląda na to, że małe przepustowości stanowią problem, ale czasami chcesz pokazać szczegóły itp. W ogonach i potrzebne są małe przepustowości.
Aktualizacja / odpowiedź:
> 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
r
estimation
pdf
kernel-smoothing
auc
wysoka przepustowość
źródło
źródło
Odpowiedzi:
Pomyśl o zasadzie trapezu
integrate.xy()
zastosowaniach . W przypadku rozkładu normalnego nie doceni on obszaru pod krzywą w przedziale (-1,1), w którym gęstość jest wklęsła (a zatem interpolacja liniowa jest poniżej gęstości rzeczywistej), i zawyża ją w innym miejscu (w miarę interpolacji liniowej na szczycie prawdziwej gęstości). Ponieważ ten drugi obszar jest większy (w miarę Lesbegue, jeśli chcesz), reguła trapezowa ma tendencję do przeceniania całki. Teraz, gdy przechodzisz do mniejszych przepustowości, prawie wszystkie twoje szacunki są częściowo wypukłe, z wieloma wąskimi skokami odpowiadającymi punktom danych i dolinami między nimi. Właśnie tam reguła trapezu psuje się szczególnie źle.źródło
density
raczej niż problemuintegrate.xy
. Przy N = 10000 i mc = 1e-6, będziesz musiał zobaczyć grzebień o wysokości każdego zęba około 1e6, a zęby będą gęstsze wokół 0. Zamiast tego nadal widzisz rozpoznawalną krzywą w kształcie dzwonu. Tak samodensity
oszukuje cię, a przynajmniej powinien być używany inaczej przy małych przepustowościach:n
powinien być o (zakres danych) / (mc) niż domyślnyn=512
. Intergrator musi wychwycić jedną z tych ogromnych wartości, któradensity
powraca przez nieszczęśliwy zbieg okoliczności.W porządku, możesz to naprawić przesuwając i skalując; dodaj najmniejszą liczbę, tak aby gęstość nie była ujemna, a następnie pomnóż całość przez stałą, tak aby obszar był jednością. To jest prosty sposób.
źródło
density
funkcja nie powoduje „właściwego” gęstości, który integruje do 1 - a następnie, w jaki sposób to naprawić.