Домашние ограждения диапазона в 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)
А вот на рисунке вы можете увидеть, как распределение ядра выходит далеко за границы.