使用核密度计算 HR。网格问题?

Computing HR using Kernel Density. Grid issues?

我的数据集包括动物位置和 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

我有一个 windows 系统和 32gb 内存,我一直在检查我的进程,我发现我还有剩余内存,但 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

当我展开 xy 网格时 - 我看到我的观察结果是

这是巨大的。我想知道是否有任何更简单的方法来计算 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

经过多位朋友和同事的咨询,我找到了答案。

当您有多个位置时,使用 KDE 计算 HR 的最佳方法是使用网格大小和范围。降低网格并增加范围是对此的最佳答案。

在这种情况下,我可以用-

计算心率

kernelUD(locs_year,grid = 500, h="href", extent = 5)

我尝试了多种方法grid=1000,但仍然无法。 grid = 500, extent = 5 是最佳点。!

感谢您的帮助!不确定,但总有一天,这个答案对某人有用。 :)