Площа під “pdf” при оцінці щільності ядра в R


15

Я намагаюся використовувати функцію ' щільності ' в R, щоб робити оцінки щільності ядра. У мене виникають труднощі з інтерпретацією результатів та порівнянням різних наборів даних, оскільки, здається, площа під кривою не обов'язково 1. Для будь-якої функції щільності ймовірностей (pdf) нам потрібно мати область . Я припускаю, що оцінка щільності ядра звітує про pdf. Я використовую integrate.xy від sfsmisc для оцінки площі під кривою.ϕ(х)-ϕ(х)гх=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)

щільність при bw = .001

> 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)

щільність при bw = 1

> xy <- density(xx,bw=1e-6)
> integrate.xy(xy$x,xy$y)
[1] 6507.451
> plot(xy)

щільність при bw = 1e-6

Чи не повинна площа під кривою завжди бути 1? Здається, невеликі смуги пропускання є проблемою, але іноді ви хочете показати деталі тощо в хвостах, і потрібні невеликі смуги пропускання.

Оновлення / відповідь:

Здається, що відповідь нижче про завищення в опуклих регіонах правильна, оскільки збільшення кількості точок інтеграції, здається, зменшує проблему (я не намагався використовувати більше балів.)220

> 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


3
Це виглядає як обмеження плаваючої точки у щільності (): використовуючи пропускну здатність 1e-6, ви створюєте (теоретично) колекцію з 10000 шипів, кожен із загальною масою 1/10000. Ці шипи в кінцевому підсумку представлені головним чином своїми вершинами, без прогалин належним чином охарактеризованих. Ви просто штовхаєте щільність () за її межі.
whuber

@whuber, обмежуючи плаваючою комою, ви маєте на увазі межі точності, так як при використанні поплавків призведе до більшої завищення помилки порівняно з використанням подвійних. Я не думаю, що я бачу, як це могло б статися, але хотів би бачити деякі докази.
highBandWidth

Ваше оновлення демонструє, що опуклість не є проблемою; проблема полягає у використанні занадто малого значення для обчислення щільності. н
whuber

Чи не повинно інтегральне значення правильної оцінки щільності бути ? 1
Мав QUIT - Anonymous-Mousse

@ Аноні-Мус, так, саме це і задається цим питанням. Чому він не оцінюється до 1?
highBandWidth

Відповіді:


9

Подумайте про правила integrate.xy()використання трапеції . Для нормального розподілу це занизить площу під кривою в інтервалі (-1,1), де щільність увігнута (а значить, лінійна інтерполяція нижче справжньої щільності), і завищить її в іншому місці (як йде лінійна інтерполяція) поверх справжньої щільності). Оскільки останній регіон більший (за мірою Лесбега, якщо хочете), правило трапеції, як правило, переоцінює інтеграл. Тепер, переходячи до меншої пропускної здатності, майже вся ваша оцінка є кусково опуклою, з великою кількістю вузьких шипів, що відповідають точкам даних, і долин між ними. Ось де правило трапеції порушується особливо погано.


це означає, що ми "пересилюємо" вершини і "недоозброюємо" долини, в деякому ручно-хвилястому сенсі. Оскільки візуалізація також відповідає трапецієподібному правилу (лінійна інтерполяція між зразками), здається, занадто мала пропускна здатність ядра також погана для візуалізації. Крім того, якби ми могли отримати більшу кількість точок, в яких обчислюємо щільність, проблем було б менше.
highBandWidth

1
Це пояснення не тримає води. Проблема полягає в тому, що щільність недостатньо дискретизована, а не в тому, що правило трапеції погано руйнується. integrate () безпорадний отримати правильну відповідь, оскільки щільність () не дає правильного подання. Щоб побачити це, просто перевірте xy $ x: він має лише 512 значень, призначених представляти 10000 вузьких шипів!
whuber

@whuber, саме так сказала відповідь. Справа в тому, що вам потрібно використовувати трапецієподібне правило для кінцевої кількості зразків, і це завищує площу порівняно з справжньою щільністю на суцільній осі відповідно до ядер. Моє оновлення в кінці питання розширюється на ньому.
highBandWidth

1
@high Ні; правило трапеції працює нормально. Проблема полягає в тому, що вона працює з неправильною дискретизацією інтегранда. Можливо, ви не можете мати "багато вузьких шипів, що відповідають точкам даних", коли в масиві щільності є 10000 точок даних і лише 512 значень!
whuber

1
Дивлячись на ці графіки, я зараз думаю, що проблема є, densityа не з проблемою integrate.xy. З N = 10000 і bw = 1e-6, ви повинні побачити гребінець з висотою кожного зуба близько 1e6, а зуби щільнішими приблизно 0. Натомість ви все ще бачите впізнавану кришку дзвіноподібної форми. Так densityце обман на вас, або, принаймні, його слід використовувати по-різному з крихітними пропускними можливостями: nмає бути приблизно (діапазон даних) / (bw), а не за замовчуванням n=512. Інтергратор повинен назбирати одне з цих величезних значень, яке densityповертається нещасним збігом обставин.
Стаск

-1

Це добре, ви можете виправити зміщення та масштабування; додайте найменше число, таке, що густина невід’ємна, а потім помножте всю річ на постійну, щоб площа була єдністю. Це простий спосіб.

L2c[ϕ(х)-c]+


2
Зверніть увагу , що мова йде скоріше про чомуdensity функція не дає «правильний» щільність , яка інтегрується в 1 - а потім про те , як це виправити.
Тім
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.