我的数据集包括动物位置和 ID。我想要做的是我正在尝试使用核密度函数来计算 Home Range。由于我的数据集很大,我尝试将数据集分成两部分。
> library(sp)
> library(adehabitatHR)
> head(temp)
id x y
92 10 480147.6 3112738
93 10 480081.6 3112663
94 10 479992.6 3112667
95 10 479972.4 3112759
96 10 479931.7 3112758
97 10 479970.7 3112730
每个数据集有 99586 个观测值,其中包括 190 个唯一 ID。结果,我无法生成可重现的数据集。
当我尝试使用 kernelUD 函数时,计算没有问题。当我试图获得 95% 的 HR 时,它给了我错误。
> kernel_temp<- kernelUD(temp)
> kernel_95 <- getverticeshr(kernel_temp, percent = 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
所以我搜索了这个问题并找到了解决方案。我现在用给定的网格传递网格函数,创建网格坐标时出现另一个错误。
> x <- seq(min(temp$x),max(temp$x),by=1.)
> y <- seq(min(temp$y),max(temp$y),by=1.)
> xy <- expand.grid(x=x,y=y)
> gc()
> coordinates(xy) <- ~x+y
Error: cannot allocate vector of size 6.7 Gb
我有一个 32gb 内存的 Windows 系统,我一直在检查我的进程,我发现我还有剩余的 RAM,但 R 无法分配。
继续前进,我传递了一个随机网格值只是为了看看它是否有效,但仍然是同样的错误。
> kernel_temp<- kernelUD(temp, grid = 1000)
> kernel_95 <- getverticeshr(kernel_temp, percent = 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
这是巨大的。我想知道是否有更简单的方法来计算 HR 或在网格不那么大的情况下传递网格函数?
非常感谢任何帮助。:)
编辑-我尝试了 extent = 2 并遇到了同样的问题。
> kernel_temp<- kernelUD(temp, extent = 2)
> kernel_95 <- getverticeshr(kernel_temp, percent = 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