0

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

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

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

1 回答 1

0

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

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

在这种情况下,我能够计算 HR -

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

我尝试了多种方法grid=1000,但仍然无法做到。grid = 500, extent = 5是甜蜜的地方。!

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

于 2020-10-19T18:43:50.060 回答