Как преобразовать пространственные точки в список соседей в R? - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь преобразовать некоторые пространственные точки в список соседей в R. У меня есть список вхождений отдельных видов животных по всему миру, каждое из которых имеет одно значение широты и долготы.Поскольку я пытаюсь провести статистический анализ возможной пространственной автокорреляции, мне нужно создать класс объектов nb (список соседей), но я не знаю, как выполнить это преобразование в R.

Мои данныевыглядит так:

SPECIES   LATITUDE    LONGITUDE
species A     -85           134
species B      34             2
species B      42             3
species B      45             5
species C      -2            80
species C      -5            79
(...)

Набор данных также содержит другие столбцы со значениями определенных переменных, но я думаю, что это не важно для моей цели.

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 27 сентября 2018

Пакет spdep имеет разные методы для расчета списка соседей.Лучше сначала преобразовать ваш фрейм данных в пространственный объект.Это обеспечит правильную интерпретацию координат.

dataSp <- read.table( text = '
  SPECIES   LATITUDE    LONGITUDE
  speciesA     -85           134
  speciesB      34             2
  speciesB      42             3
  speciesB      45             5
  speciesC      -2            80
  speciesC      -5            79',
  header = TRUE )

library(spdep)

coordinates(dataSp) <- ~ LONGITUDE + LATITUDE

Соседи обычно рассчитываются по полигонам, поскольку общие критерии являются основными критериями.Для очков вы можете сначала сделать триангуляцию Делоне, а затем вычислить окрестности.Пакеты 'rgeos' помимо прочего имеют функцию для этого:

delau <- rgeos::gDelaunayTriangulation(dataSp)
neib <- poly2nb(delau)

Пакет spdep имеет функцию, которая делает это напрямую, генерируя сначала графовый объект.См. ?graphneigh для получения дополнительных параметров:

grph <- relativeneigh(coordinates(dataSp))
neib <- graph2nb(grph)

Вместо использования границ можно использовать k ближайших в качестве критериев:

knea <- knearneigh(coordinates(dataSp), longlat = TRUE)
neib <- knn2nb(knea)

Или использовать диапазон расстояний:

neib <- dnearneigh(coordinates(dataSp), 0, 10, longlat = TRUE)
...