r - перечисление и построение графиков ближайших соседей с использованием пакета spdep

Это мое первое использование spdep пакет в R, так что я надеялся, что кто-то может мне помочь с несколькими вещами.

Давайте рассмотрим следующие моменты.

set.seed(1)
loc <- data.frame(id=1:15,
                  x=sample(-10:10,15,replace=TRUE),
                  y=sample(-10:10,15,replace=TRUE))
plot(loc[,-1],asp=1)
text(loc$x, loc$y, cex=0.7, pos=3)

По сути, я хочу построить пути, соединяя точки, которые находятся ближе всего друг к другу. Например, если нам нужны пути длиной 3, и мы начинаем с точки 1, то мы должны перейти к точке 11, а затем, наконец, к точке 10. Вот другие пути, которые я получил вручную.

      [,1] [,2] [,3]
[1,]     1   11   10
[2,]     2    5   14
[3,]     2   14    3
[4,]     2   14    5
[5,]     3   14    2
[6,]     4    7   15
[7,]     4   15   13
[8,]     5    2   14
[9,]     6    3   14
[10,]    7    4   15
[11,]    8   13   15
[12,]    9   15   13
[13,]   10   11    1
[14,]   11    1    2
[15,]   12   10   11
[16,]   13   15    4
[17,]   14    2    5
[18,]   15   13    4
[19,]   15   13    8

Я пытаюсь получить эту же информацию, используя функции в spdep пакет. Это насколько я получил:

library(spdep)
loc_copy <- loc
coordinates(loc_copy) <- c("x","y")
coords <- coordinates(loc_copy)
n2 <- knn2nb(knearneigh(coords, k=2), row.names=loc$id)
plot(c(-10,10), c(-10, 10), type='n', xlab="x", ylab="y", asp=1)
abline(v=0, col="grey"); abline(h=0,col="grey")
plot(n2, coords, add=TRUE)
text(loc$x, loc$y, cex=0.7, pos=3)

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

Получившийся сюжет - почти то, что я хочу, за исключением того, что некоторые точки, которые не должны быть связаны, соединены. Например, точки 11 и 12 не должны быть связаны, потому что мы не можем перейти напрямую из пункта 11 в 12 или наоборот. Я, вероятно, не создал n2 правильно. Как мне это исправить? И как мне посмотреть список соседей, похожий на тот, что у меня в матрице из ранее?

0 ответов

Другие вопросы по тегам