Інтеграція оцінювача щільності ядра в 2D


12

Я виходжу з цього питання на випадок, якщо хтось захоче піти слідом.

В основному у мене є набір даних складається з об'єктів, де кожен об'єкт має задане число вимірюваних значень, приєднаних до нього (у цьому випадку два):NΩN

Ω=о1[х1,у1],о2[х2,у2],...,оN[хN,уN]

Мені потрібен спосіб визначити ймовірність приналежності нового об’єкта до тому мені було запропоновано в цьому питанні отримати густину ймовірності через оцінювач щільності ядра, який я вважаю, що я вже є.Ω еp[xp,yp]Ωf^

Оскільки моя мета - отримати ймовірність того, що цей новий об’єкт ( ) належить до цього двовимірного набору даних , мені сказали інтегрувати значення pdf над " підтримкою, для якої щільність менша за ту, яку ви спостерігали ". Щільність "спостережуваної" оцінюється в новому об'єкті , тобто: . Тому мені потрібно розв’язати рівняння:Ω еp[xp,yp]Ωf^ р е (хр,ур)f^pf^(xp,yp)

∬х,у:f^(х,у)<f^(хp,уp)f^(х,у)гхгу

PDF мого набору даних 2D (отриманий через модуль stats.gaussian_kde python ) виглядає приблизно так:

введіть тут опис зображення

де червона точка являє собою новий об’єкт побудований над PDF-файлом мого набору даних.p[хp,уp]

Отже, питання: як я можу обчислити вищевказаний інтеграл для меж коли pdf виглядає так?х,у:f^(х,у)<f^(хp,уp)


Додайте

Я зробив кілька тестів, щоб побачити, наскільки добре працює метод Монте-Карло, який я згадую в одному з коментарів. Ось що я отримав:

стіл

Ці значення, схоже, трохи змінюються для областей нижчої щільності, обидві смуги пропускання показують більш-менш однакові зміни. Найбільша різниця в таблиці виникає для точки (x, y) = (2.4,1.5), порівнюючи значення вибірки Сільвермена 2500 проти 1000, що дає різницю 0.0126або ~1.3%. У моєму випадку це було б цілком прийнятно.

Редагувати : Я щойно помітив, що у двох вимірах правило Скотта рівносильне Сільверману відповідно до даного тут визначення.


2
Чи помітили ви, що ваш оцінювач не є одномодальним, а те, що рекомендація, яку ви дотримуєтесь, явно стосується лише "унімодальних" розподілів? Це не означає, що ви робите щось не так, але це повинно породжувати серйозні роздуми над тим, що може означати відповідь.
— whuber

Привіт @whuber, насправді відповідь на це запитання говорить про те, що це "добре поводиться" для одномодальних розподілів, тому я подумав, що, можливо, це може спрацювати над моєю проблемою з деякими модифікаціями. Чи "добре поводиться" означає "працює лише" в статистичному жаргоні (чесне запитання)? Ура.
— Габріель

Моє основне занепокоєння полягає в тому, що KDE може бути чутливим до вибору пропускної здатності, і я очікую, що ваш інтеграл, особливо для таких місць, як показано на ілюстрації, буде дуже чутливий до вибору. (До речі, сам обчислення, до речі, легко, як тільки ви створили растрове зображення таким чином: воно пропорційне середньому значенню зображення серед точок, значення яких менше, ніж у точки "зонда".) Ви можете підходити це, обчислюючи відповідь для повного діапазону розумної пропускної здатності та перевіряючи, чи змінюється вона будь-яким матеріальним чином у межах цього діапазону. Якщо ні, то все добре.
— whuber

Я не буду коментувати рішення, але інтеграцію можна зробити за допомогою простого Монте-Карло: вибіркові точки з (це просто, оскільки kde - це суміш щільності, яку легко відібрати), і порахувати частка точок, які потрапляють у область інтеграції (де нерівність). f^
— Дзен

Скільки спостережень у вас у наборі даних?
— Hong Ooi

Відповіді:


11

Найпростіший спосіб - розширити область інтеграції та обчислити дискретне наближення до інтеграла.

На що слід звернути увагу:

  1. Не забудьте охопити більше, ніж ступінь балів: вам потрібно включити всі місця, де оцінка щільності ядра матиме будь-які помітні значення. Це означає, що вам потрібно розширити ступінь точок в три-чотири рази більше смуги ядра (для ядра Гаусса).

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

Ось ілюстрація для набору даних з 256 балів:

Фігура 1

Точки показані у вигляді чорних крапок, накладених на дві оцінки щільності ядра. Шість великих червоних точок є "зондами", за допомогою яких оцінюється алгоритм. Це було зроблено для чотирьох ширини смуги (за замовчуванням між 1,8 (вертикально) і 3 (по горизонталі), 1/2, 1 і 5 одиниць) при роздільній здатності 1000 на 1000 комірок. Наступна матриця розсіювання показує, наскільки сильно результати залежать від пропускної здатності для цих шести точок зонду, які охоплюють широкий діапазон щільності:

Малюнок 2

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

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


R код

Алгоритм міститься в півдюжини рядків першої функції, f. Для ілюстрації його використання решта коду формує попередні фігури.

library(MASS)     # kde2d
library(spatstat) # im class
f <- function(xy, n, x, y, ...) {
  #
  # Estimate the total where the density does not exceed that at (x,y).
  #
  # `xy` is a 2 by ... array of points.
  # `n`  specifies the numbers of rows and columns to use.
  # `x` and `y` are coordinates of "probe" points.
  # `...` is passed on to `kde2d`.
  #
  # Returns a list:
  #   image:    a raster of the kernel density
  #   integral: the estimates at the probe points.
  #   density:  the estimated densities at the probe points.
  #
  xy.kde <- kde2d(xy[1,], xy[2,], n=n, ...)
  xy.im <- im(t(xy.kde$z), xcol=xy.kde$x, yrow=xy.kde$y) # Allows interpolation $
  z <- interp.im(xy.im, x, y)                            # Densities at the probe points
  c.0 <- sum(xy.kde$z)                                   # Normalization factor $
  i <- sapply(z, function(a) sum(xy.kde$z[xy.kde$z < a])) / c.0
  return(list(image=xy.im, integral=i, density=z))
}
#
# Generate data.
#
n <- 256
set.seed(17)
xy <- matrix(c(rnorm(k <- ceiling(2*n * 0.8), mean=c(6,3), sd=c(3/2, 1)), 
               rnorm(2*n-k, mean=c(2,6), sd=1/2)), nrow=2)
#
# Example of using `f`.
#
y.probe <- 1:6
x.probe <- rep(6, length(y.probe))
lims <- c(min(xy[1,])-15, max(xy[1,])+15, min(xy[2,])-15, max(xy[2,]+15))
ex <- f(xy, 200, x.probe, y.probe, lim=lims)
ex$density; ex$integral
#
# Compare the effects of raster resolution and bandwidth.
#
res <- c(8, 40, 200, 1000)
system.time(
  est.0 <- sapply(res, 
           function(i) f(xy, i, x.probe, y.probe, lims=lims)$integral))
est.0
system.time(
  est.1 <- sapply(res, 
           function(i) f(xy, i, x.probe, y.probe, h=1, lims=lims)$integral))
est.1
system.time(
  est.2 <- sapply(res, 
           function(i) f(xy, i, x.probe, y.probe, h=1/2, lims=lims)$integral))
est.2
system.time(
  est.3 <- sapply(res, 
           function(i) f(xy, i, x.probe, y.probe, h=5, lims=lims)$integral))
est.3
results <- data.frame(Default=est.0[,4], Hp5=est.2[,4], 
                      H1=est.1[,4], H5=est.3[,4])
#
# Compare the integrals at the highest resolution.
#
par(mfrow=c(1,1))
panel <- function(x, y, ...) {
  points(x, y)
  abline(c(0,1), col="Red")
}
pairs(results, lower.panel=panel)
#
# Display two of the density estimates, the data, and the probe points.
#
par(mfrow=c(1,2))
xy.im <- f(xy, 200, x.probe, y.probe, h=0.5)$image
plot(xy.im, main="Bandwidth=1/2", col=terrain.colors(256))
points(t(xy), pch=".", col="Black")
points(x.probe, y.probe, pch=19, col="Red", cex=.5)

xy.im <- f(xy, 200, x.probe, y.probe, h=5)$image
plot(xy.im, main="Bandwidth=5", col=terrain.colors(256))
points(t(xy), pch=".", col="Black")
points(x.probe, y.probe, pch=19, col="Red", cex=.5)

Дивовижний відповідь, хоча я не впевнений , що розумію сенс Defaultі Hp5ширину смуги (я припускаю , H1і H5середній , h=1і h=5) є чи Hp5значення h=1/2? Якщо так, що таке Default?
— Габріель

1
Ваше розуміння правильне. ("p5" означає ".5".) За замовчуванням обчислюється автоматично за kde2dдопомогою bandwidth.nrd. Для даних вибірки вона дорівнює у горизонтальному напрямку та у вертикальному напрямку, приблизно на півдорозі між значеннями та у тесті. Зауважте, що ці ширини смуги за замовчуванням є досить великими, щоб помітити значну частку загальної щільності набагато більше меж самих точок, і саме тому цю міру потрібно розширити незалежно від того, який алгоритм інтеграції ви можете вибрати. 1,85 1 531,8515
— whuber

Тож чи правильно я розумію, якщо я скажу, що зі збільшенням використовуваної пропускної здатності збільшується і ступінь отриманого kdeефекту (і тому мені потрібно розширити межі інтеграції)? Зважаючи на те, що я можу жити з помилкою <10%в отриманому значенні інтеграла, що ви думаєте про використання правила Скотта?
— Габріель

Я думаю, що оскільки ці правила були розроблені для зовсім інших цілей, ви повинні підозрювати, що вони можуть не працювати добре для ваших цілей, особливо якщо це реалізувати пропозицію, зроблену на сайті stats.stackexchange.com/questions/63263 . Попередньо турбуватися про те, чиє велике правило ви можете використовувати для KDE; на цьому етапі вам слід серйозно занепокоєти, чи буде весь підхід працювати надійно.
— whuber

1
Закресліть вищесказане. У мене є спосіб знати, чи реалізація працює, і навіть оцінити, наскільки вона працює. Це трохи складно і забирає багато часу, але я можу (повинен вміти) це зробити.
— Габріель

1

х0f^хf^(х)<f^(х0)

f^(х0)х


Буде вітатися деякий кількісний аналіз цієї рекомендації або хоча б один приклад фактичного застосування. Я підозрюю, що точність вашої пропозиції сильно залежить від форми ядра. Це змусить мене покладатися на такий розрахунок без істотного вивчення його властивостей.
— whuber
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.