У меня есть куча точек данных с широтой и долготой. Я хочу использовать R для кластеризации их на основе их расстояния.
Я уже взглянул на эту страницу и попробовал пакет clustTool . Но я не уверен, что функция clust в clustTool рассматривает точки данных (широта, долгота) как пространственные данные и использует соответствующую формулу для вычисления расстояния между ними.
Я имею в виду, я не могу видеть, как они различают пространственные данные и порядковые данные. Я считаю, что расчет расстояния между двумя точками на карте (пространственной) и двумя нормальными числами отличается. (Это не?)
И что произойдет, если я захочу рассмотреть третий параметр в моей кластеризации?
Как сказать, если у меня есть (широта, долгота) и еще один параметр.
Как рассчитывается расстояние?
Другая проблема, которую я имею с clustTool, состоит в том, что он разработан с учетом графического интерфейса. Я не знаю, как я могу пропустить накладные расходы GUI в библиотеке, потому что мне это не нужно.
Какие варианты у меня есть в R для кластерного анализа пространственных данных?
Cluster
, будет принимать в качестве входных данных матрицы различий или расстояний . Это делает их совершенно общими и применимыми к кластеризации на сфере, при условии, что вы можете самостоятельно рассчитать расстояния, что довольно просто.Ответы:
Вот решение, основанное на правиле расстояния «Поиск кластеров точек» , но с использованием
distm
функции изgeosphere
пакета:Вы должны получить что-то вроде:
Следующие шаги предназначены только для визуализации:
источник
for (i in 1:186) { print(paste(i,min(distance[i,c(1:(i-1),(i+1):187)]))) }
оно занимает,4
но при примененииx <- cutree(hc, h=5)
дает 101 кластер из 187. По логике должно быть 1. Что не так?x = as.dist(matrix(runif(100), ncol=10)); hc = hclust(x, method="complete"); cutree(hc, h=max(x))
. Это дает вам один кластер, как и следовало ожидать. Попробуйте построить вашу модель кластеризации с помощью:,plot(hc)
и посмотрите, какое наибольшее значение.Существуют функции для вычисления истинных расстояний на сферической земле в R, так что, возможно, вы можете использовать их и вызывать функции кластеризации с матрицей расстояний вместо координат. Я никогда не могу вспомнить имена или соответствующие пакеты, хотя. Смотрите R-пространственное представление задач для подсказок.
Другой вариант - преобразовать ваши точки в систему отсчета, чтобы расстояния были евклидовыми. В Великобритании я могу использовать справочную систему OSGrid:
используя spTransform из пакета 'rgdal' (или, возможно, maptools). Найдите систему координат для ваших данных (вероятно, подойдет соответствующая зона UTM), и вы без проблем вычислите расстояния в метрах.
Это хорошо, только если ваши данные имеют небольшую область - если у вас есть глобальные данные, вам действительно нужно вычислить сферическое расстояние, и это где-то в одном (или нескольких) из пакетов, обсужденных в R Spatial Task View:
http://cran.r-project.org/web/views/Spatial.html
Похоже, вы хотите пакет "геосфера", но читайте пространственный вид задачи!
источник
Я бы посмотрел на пакет Spatstat . Весь пакет посвящен анализу пространственных точечных паттернов (sic). В CSIRO есть отличная электронная книга, написанная профессором Адрианом Бадделей, которая содержит подробную документацию, инструкции и примеры для всего пакета. Взгляните на главу 19 «Методы расстояния для точечных рисунков».
Тем не менее, я не уверен, что даже spatstat различает пространственные и порядковые данные, поэтому вы можете перепроектировать ваши точки во что-то с постоянными значениями x и y - возможно, попробуйте использовать rgdal (библиотека R для GDAL и OGR).
источник
Может быть, этот ответ приходит на 2 года позже, но в любом случае.
Насколько мне известно, пространственная кластеризация требует определенного соседства, к которому кластеризация ограничена, по крайней мере, в начале. Функция kulldorf в пакете SpatialEpi обеспечивает пространственную кластеризацию на основе агрегированных окрестностей.
Кроме того, может быть полезна статистика DBSCAN, доступная из пакета fpc .
см. также здесь для подобного обсуждения: https://stats.stackexchange.com/questions/9739/clustering-spatial-data-in-r
и здесь для интересной статьи о последних кластерных алгоритмах, таких как CHAMAELEON: http://www.cs.uiuc.edu/homes/hanj/pdf/gkdbk01.pdf
источник
Хотя это и не
R
пакет, geoda может быть интересной программой для изучения, так как она написана Люком Анселином, который внес вклад в теорию пространственной кластеризации, и я полагаю, что она обеспечивает некоторую кластеризацию (хотя прошло уже некоторое время с тех пор, как я ее изучал).spdep - отличный
R
пакет Он включает в себяskater
функцию пространственного анализа K-кластеров методом удаления краев деревьев . Он также предоставляет другие функции для пространственного анализа, включая пространственную автокорреляцию и обнаружение локального кластера с использованием Local Moran и другой пространственной статистики. Это описано следующим образом:Вы можете, по крайней мере, проверить, распределены ли ваши точки случайным образом в пространстве (предположительно, это полезный тест предварительной кластеризации при рассмотрении пространственных расстояний), но он также может генерировать другие полезные меры, которые вы могли бы ввести в свой алгоритм кластеризации. Наконец, возможно, вы можете найти полезные вопросы на https://stats.stackexchange.com/, посвященные вопросам пространственной кластеризации (хотя и больше с теоретической точки зрения).
источник
Попробуйте пакет "leaderCluster" в R. В отличие от многих других алгоритмов кластеризации, он не требует от пользователя указывать количество кластеров, а вместо этого требует приблизительный радиус кластера в качестве основного параметра настройки.
источник
Проверьте функцию расстояния пакета геосферы или функцию ископаемого градуса. У вас есть данные в градусах, и вам необходимо перевести их в метры или футы перед кластеризацией.
источник