Тестирование на однородность является чем-то обычным, однако мне интересно, каковы методы сделать это для многомерного облака точек.
Тестирование на однородность является чем-то обычным, однако мне интересно, каковы методы сделать это для многомерного облака точек.
Ответы:
Стандартный метод использует K-функцию Рипли или что-то производное от нее, например, L-функцию. Это график, который суммирует среднее число соседей точек как функцию максимального расстояния друг от друга ( ). Для равномерного распределения по n измерениям это среднее значение должно вести себя как ρ n : и всегда будет при малых ρ . Он отклоняется от такого поведения из-за кластеризации, других форм пространственной несамостоятельности и краевых эффектов (откуда важно указать область, выбранную точками). Из - за этого осложнения - который становится хуже , так как пувеличивается - в большинстве приложений устанавливается доверительный интервал для нулевой функции K посредством моделирования, а наблюдаемая функция K накладывается для обнаружения отклонений. С некоторой мыслью и опытом экскурсии могут быть интерпретированы с точки зрения склонности к скоплению или нет на определенных расстояниях.
Примеры K-функции и связанной с ней L-функции от Dixon (2001), там же. Функция L построена так, что для равномерного распределения является горизонтальной линией в нуле: хороший визуальный ориентир. Пунктирные линии - доверительные интервалы для этой конкретной области исследования, рассчитанные с помощью моделирования. Сплошная серая линия - это функция L для данных. Положительная экскурсия на расстояния 0-20 м указывает на некоторую группировку на этих расстояниях.
Я опубликовал работающий пример в ответ на связанный вопрос на /stats//a/7984 , где график, полученный из K-функции для равномерного распределения на двумерном многообразии, встроенном в равен оценивается путем моделирования.
В R
, то spatstat функции kest
и k3est
вычислить K-функцию для и п = 3 , соответственно. В более чем 3 измерениях вы, вероятно, сами по себе, но алгоритмы будут точно такими же. Вы можете сделать вычисления из матрицы расстояний, рассчитанные (с умеренной эффективностью) с помощью .stats::dist
Оказывается, вопрос сложнее, чем я думал. Тем не менее я выполнил домашнее задание и, осмотревшись вокруг, обнаружил два метода в дополнение к функциям Рипли для проверки однородности в нескольких измерениях.
Я сделал пакет R под названием, unf
который реализует оба теста. Вы можете скачать его с github по адресу https://github.com/gui11aume/unf . Большая часть этого находится в C, поэтому вам нужно будет скомпилировать его на вашем компьютере с R CMD INSTALL unf
. Статьи, на которых основана реализация, находятся в формате PDF в пакете.
Первый метод взят из ссылки, упомянутой @Procrastinator ( Тестирование многомерной однородности и ее приложения, Liang et al., 2000 ), и позволяет проверять однородность только на единичном гиперкубе. Идея состоит в том, чтобы спроектировать статистику расхождений, которая будет асимптотически гауссовой по центральной предельной теореме. Это позволяет вычислить статистику , которая является основой теста.
library(unf)
set.seed(123)
# Put 20 points uniformally in the 5D hypercube.
x <- matrix(runif(100), ncol=20)
liang(x) # Outputs the p-value of the test.
[1] 0.9470392
Второй подход менее традиционен и использует минимальные остовные деревья . Первоначальная работа была выполнена Friedman & Rafsky в 1979 году (ссылка на упаковке), чтобы проверить, поступают ли два многомерных образца из одного и того же распределения. Изображение ниже иллюстрирует принцип.
Точки двух двухмерных образцов отображаются красным или синим цветом в зависимости от их исходного образца (левая панель). Минимальное остовное дерево объединенного образца в двух измерениях вычисляется (средняя панель). Это дерево с минимальной суммой длин ребер. Дерево разлагается на поддеревья, где все точки имеют одинаковые метки (правая панель).
На рисунке ниже я показываю случай, когда синие точки агрегируются, что уменьшает количество деревьев в конце процесса, как вы можете видеть на правой панели. Фридман и Рафски вычислили асимптотическое распределение числа деревьев, получаемых в процессе, что позволяет выполнить тест.
Эта идея создать общий тест на однородность многомерного образца была разработана Смитом и Джейном в 1984 году и реализована Беном Пфаффом в Си (ссылка в пакете). Второй образец генерируется равномерно в приближенной выпуклой оболочке первого образца, и испытание Фридмана и Рафски проводится на пуле из двух образцов.
Преимущество метода состоит в том, что он проверяет однородность на каждой выпуклой многомерной форме, а не только на гиперкубе. Сильным недостатком является то, что в тесте присутствует случайный компонент, поскольку второй образец генерируется случайным образом. Конечно, можно повторить тест и усреднить результаты, чтобы получить воспроизводимый ответ, но это не удобно.
Продолжая предыдущую сессию R, вот как это происходит.
pfaff(x) # Outputs the p-value of the test.
pfaff(x) # Most likely another p-value.
Не стесняйтесь копировать / разветвлять код с GitHub.