adehabitat HR的文档建议使用以下代码在创建UD对象后计算家庭范围的95%内核:
## Calculation of the 95 percent home range
ver <- getverticeshr(ud, 95)
对于我的部分数据,会出现以下错误:
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
在Nabble论坛上,人们建议更改“网格”和“范围”输入,但在使用这两个参数的多种组合后,我无法获得任何更好的结果。有什么建议?
答案 0 :(得分:1)
这是我在某些论坛中发现的一个常见问题。但答案很简单,正好在错误信息中。 &#34;你需要扩展你的网格&#34;。发生这种情况是因为当您应用getverticeshr(ud, 95)
部分多边形不在网格中时,因此无法获得区域。
例如,在下面的代码中,估计了两个假设动物的KDE。我使用从0到100的随机点,所以我定义了一个网格100x100(域)。
#"""
# 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(0, 100, by=1.) # resolution is the pixel size you desire
y <- seq(0, 100, 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)
图表显示50%的轮廓位于网格内部,但是75%的轮廓被切割,这意味着该部分的一部分已经出局。
如果您尝试将KDE的顶点估计为50%,您将获得良好的结果:
# 10. Get vertices (It will be fine)
vkde_points <- getverticeshr(kud_points, percent = 50,
unin = 'm', unout='m2')
plot(vkde_points)
但是如果你尝试75%的水平,你将获得经典错误: getverticeshr.estUD(x [[i]],%,ida = names(x)[i],unin,中的错误: 网格太小,无法估计归属范围。 您应该使用更大范围的参数重新运行kernelUD
# 10. Get vertices (Will be an Error)
vkde_points <- getverticeshr(kud_points, percent = 75,
unin = 'm', unout='m2')
plot(vkde_points)
现在,您可以清楚地看到发生了什么,R无法将顶点估计为75%,因为它们位于网格之外,因此您需要增加域(网格)!在这里,我将在50中增加域名(参见#5。域名)
# 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)
您可以看到所有轮廓都在网格(域)内。所以,现在你将能够估计顶点。
# 10. Get vertices
vkde_points <- getverticeshr(kud_points, percent = 75,
unin = 'm', unout='m2')
plot(vkde_points)