dies ein weit verbreitetes Problem, das ich habe in einigen Foren gefunden. Aber die Antwort ist einfach und liegt genau in der Fehlermeldung. "Sie müssen Ihr Raster erweitern". Dies geschieht, weil, wenn Sie getverticeshr(ud, 95)
Teil der Polygone anwenden aus dem Netz ist, so ist es nicht möglich, einen Bereich zu erhalten. Zum Beispiel in dem unten stehenden Code wird KDE für zwei hypothetische Tiere geschätzt. Ich verwende zufällige Punkte von 0 bis 100, so habe ich eine grid 100x100 (Domain) definiert sind.
#"""
# 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. Domain
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 = "href", grid = xy)
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)
Das Diagramm zeigt, dass die Kontur zu 50% innerhalb des Gitters ist, aber 75% Kontur geschnitten wird, bedeutet dies, Teil dieses heraus ist.
Wenn Sie versuchen, zu 50% Ecken von KDE zu schätzen finden Sie ein gutes Ergebnis erhalten:
# 10. Get vertices (It will be fine)
vkde_points <- getverticeshr(kud_points, percent = 50,
unin = 'm', unout='m2')
plot(vkde_points)
Aber wenn Sie mit 75% -Grenze versuchen werden Sie die klassischen Fehler erhalten: Fehler in getverticeshr.estUD (x [[i]], Prozent, ida = Namen (x) [i], unin,: Das Gitter ist zu klein, um die Schätzung des Home-Bereichs zu ermöglichen Sie sollten KernelUD mit einem größeren Extent-Parameter
erneut ausführen
# 10. Get vertices (Will be an Error)
vkde_points <- getverticeshr(kud_points, percent = 75,
unin = 'm', unout='m2')
plot(vkde_points)
Jetzt können Sie klar sehen, was passiert, R kann die Scheitelpunkte nicht auf 75% schätzen, weil sie außerhalb des Rasters liegen, also müssen Sie die Domäne (Gitter) vergrößern! Hier werde ich die Domain in 50 erhöhen
# 5. Domain HERE GRID IS INCREASED 50 AT X AND Y!!
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 = "href", grid = xy)
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)
Sie (# 5. Domain sehen) sehen alle Konturen innerhalb des Gitters sind (Domäne). Jetzt können Sie die Scheitelpunkte schätzen.
# 10. Get vertices
vkde_points <- getverticeshr(kud_points, percent = 75,
unin = 'm', unout='m2')
plot(vkde_points)