2017-01-16 1 views
2

Die Dokumentation für adehabitat HR empfiehlt der folgende Code ein 95% Kernel für ein Heimbereich nach der Erstellung des UD-Objekt für die Berechnung:Gitter zu klein für kernelUD/getverticeshr/adehabitatHR home range Schätzung

## Calculation of the 95 percent home range 
    ver <- getverticeshr(ud, 95) 

Für einige meine Daten, die folgende Fehlermeldung angezeigt:

Error in getverticeshr.estUD(x[[i]], percent, ida = names(x)[i], unin, : 
    The grid is too small to allow the estimation of home-range. 
You should rerun kernelUD with a larger extent parameter 

auf einem Nabble Forum Leuten empfehlen „Grid“ und „Umfang“ Eingänge zu ändern, aber ich war keine besseren Ergebnisse zu erhalten, nachdem zahlreiche Kombinationen davon 2 mit nicht in der Lage Parameter. Irgendwelche Vorschläge?

Antwort

0

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) 

enter image description here enter image description here

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) 

enter image description here enter image description here

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)