Я исхожу из этого вопроса на случай, если кто-нибудь захочет пойти по следу.
По сути, у меня есть набор данных состоящий из объектов, где к каждому объекту прикреплено заданное количество измеренных значений (два в данном случае):N
Мне нужен способ определить вероятность того, что новый объект принадлежать поэтому в этом вопросе мне посоветовали получить плотность вероятности через оценщик плотности ядра, который, как я полагаю, уже есть.
Поскольку моя цель - получить вероятность того, что этот новый объект ( ) будет принадлежать этому двухмерному набору данных , мне было сказано интегрировать значения pdf over " поддержки, для которой плотность меньше той, которую вы наблюдали ". «Наблюдаемая» плотность оценивается в в новом объекте , то есть: . Поэтому мне нужно решить уравнение:
PDF моего 2D-набора данных (полученный через модуль python stats.gaussian_kde ) выглядит следующим образом:
где красная точка представляет новый объект нанесенный поверх PDF моего набора данных.
Итак, вопрос: как я могу вычислить вышеуказанный интеграл для пределов когда pdf выглядит так?
добавлять
Я провел несколько тестов, чтобы понять, насколько хорошо работает метод Монте-Карло, о котором я упоминал в одном из комментариев. Вот что я получил:
Значения, кажется, изменяются немного больше для областей с более низкой плотностью, причем обе полосы пропускания показывают более или менее одинаковое изменение. Наибольшее изменение в таблице происходит для точки (x, y) = (2.4,1.5), сравнивая выборочное значение Сильвермана 2500 против 1000, что дает разницу 0.0126
или ~1.3%
. В моем случае это было бы в значительной степени приемлемо.
Edit : Я просто заметилчто в 2 измерении правило Скотта эквивалентно Silverman в соответствии с определениемприведенным здесь .
Ответы:
Простой способ - растеризовать область интегрирования и вычислить дискретное приближение к интегралу.
Есть некоторые вещи, на которые стоит обратить внимание:
Удостоверьтесь, что вы охватили больше, чем степень точек: вам нужно включить все места, где оценка плотности ядра будет иметь какие-либо заметные значения. Это означает, что вам нужно увеличить экстент точек в три-четыре раза по пропускной способности ядра (для ядра Гаусса).
Результат будет несколько отличаться в зависимости от разрешения растра. Разрешение должно составлять небольшую часть полосы пропускания. Поскольку время расчета пропорционально количеству ячеек в растре, для выполнения серии вычислений с использованием более грубых разрешений почти не требуется дополнительного времени: убедитесь, что результаты для более грубых совпадают с результатами для лучшее разрешение. Если это не так, может потребоваться более точное разрешение.
Вот иллюстрация для набора данных 256 точек:
Точки показаны черными точками, наложенными на две оценки плотности ядра. Шесть больших красных точек - это «зонды», на которых оценивается алгоритм. Это было сделано для четырех полос пропускания (по умолчанию от 1,8 (по вертикали) до 3 (по горизонтали), 1/2, 1 и 5 единиц) с разрешением 1000 на 1000 ячеек. Следующая матрица диаграммы рассеяния показывает, насколько сильно результаты зависят от ширины полосы для этих шести точек измерения, которые охватывают широкий диапазон плотностей:
Изменение происходит по двум причинам. Очевидно, что оценки плотности отличаются, вводя одну форму изменения. Что еще более важно, различия в оценках плотности могут создать большие различия в любой отдельной («пробной») точке. Последний вариант наиболее велик вокруг «полос» скоплений точек средней плотности - именно в тех местах, где этот расчет, вероятно, будет использоваться чаще всего.
Это демонстрирует необходимость существенной осторожности при использовании и интерпретации результатов этих вычислений, поскольку они могут быть настолько чувствительны к относительно произвольному решению (используемой полосе пропускания).
Код R
Алгоритм содержится в полдюжины строк первой функции
f
. Чтобы проиллюстрировать его использование, остальная часть кода генерирует предыдущие цифры.источник
Default
иHp5
полосы пропускания (я предполагаюH1
иH5
имею в видуh=1
иh=5
) Является лиHp5
значениеh=1/2
? Если так, то чтоDefault
?kde2d
помощьюbandwidth.nrd
. Для данных выборки он равен в горизонтальном направлении и в вертикальном направлении, примерно на полпути между значениями и в тесте. Обратите внимание, что эти значения ширины полосы по умолчанию достаточно велики, чтобы разместить значительную долю общей плотности намного выше экстента самих точек, поэтому этот экстент необходимо расширять независимо от того, какой алгоритм интеграции вы можете использовать.kde
также увеличивается (и поэтому мне нужно расширить пределы интеграции)? Учитывая, что я могу жить с ошибкой<10%
в полученном значении интеграла, что вы думаете об использовании правила Скотта?Если у вас есть приличное количество наблюдений, вам, возможно, не понадобится делать какую-либо интеграцию вообще. Скажите, что ваша новая точка - . Предположим, у вас есть оценщик плотности ; Суммируйте количество наблюдений для которых и разделите на размер выборки. Это дает вам приближение к требуемой вероятности.x0 f^ x f^(x)<f^(x0)
Это предполагает, что не является «слишком маленьким», а размер вашей выборки достаточно велик (и достаточно разбросан), чтобы дать достойную оценку в регионах с низкой плотностью. Тем не менее, 20000 случаев кажутся достаточно большими для двумерного .f^(x0) x
источник