Домашние ограждения диапазона в AdehabitatHR не работают

Я пытаюсь оценить домашний диапазон для набора точек, используя распределения ядра. Идея состоит в том, чтобы включить границу, которая охватывает все точки, имитирующие закрытый забор. Я смог сделать это, используя пакет adehabitatHR, который работает относительно хорошо, проблема возникает, когда я проверяю графику, потому что похоже, что дистрибутив ядра не распознает барьер или границы и проходит через них. Есть идеи, что происходит?

Вот воспроизводимый пример

# -*- coding: utf-8 -*-
# Author: Irbin B. Llanqui

#"""
# Language: R script
# This is a temporary script file.
#"""

# 1. Packages
library(adehabitatHR)         # Package for spatal analysis

# 2. Empty Dataframe
points <- data.frame(ID = double())
XY_cor <- data.frame(X = double(),
                 Y = double())
# 3. Assigning values (this will be our spatial coordinates)
set.seed(17)
for(i in c(1:100)){
  if(i >= 50){points[i, 1] <- 1}
  else {points[i, 1] <- 2}
  XY_cor[i, 1] <- runif(1, 0, 100)
  XY_cor[i, 2] <- runif(1, 0, 100)}

# 4. Transform to SpatialDataframe
coordinates(points) <- XY_cor[, c("X", "Y")]
class(points)

# 5. Boundary and Domain
bnd <- structure(list(x = c(0, 0, 100, 100,
                            0),
                      y = c(0, 100, 100, 0,
                            0)),
                 .Names = c("x", "y"))

bnd <- do.call("cbind", bnd)
Slo <- Line(bnd)
Sli <- Lines(list(Slo), ID = "Frontiers")
barrier <- SpatialLines(list(Sli))

x <- seq(-50, 150, by=1.) # resolution is the pixel size you desire 
y <- seq(-50, 150, by=1.)
xy <- expand.grid(x=x,y=y)
coordinates(xy) <- ~x+y
gridded(xy) <- TRUE
class(xy)

# 6. Kernel Density
kud_points <- kernelUD(points, h = 14.77982, grid = xy,
                       boundary = barrier)
image(kud_points)

# 7. Get the Volum
vud_points <- getvolumeUD(kud_points)

# 8. Get contour
levels <- c(50, 75, 95)
list <- vector(mode="list", length = 2)

list[[1]] <- as.image.SpatialGridDataFrame(vud_points[[1]])
list[[2]] <- as.image.SpatialGridDataFrame(vud_points[[2]])

# 9. Plot
par(mfrow = c(2, 1))
image(vud_points[[1]])
contour(list[[1]], add=TRUE, levels=levels)
image(vud_points[[2]])
contour(list[[2]], add=TRUE, levels=levels)

# 10. Get vertices 
vkde_points <- getverticeshr(kud_points, percent = 75,
                             unin = 'm', unout='m2')
plot(vkde_points)

А вот на рисунке вы можете увидеть, как распределение ядра выходит далеко за границы. введите описание изображения здесь

0 ответов

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