微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用内核密度计算人力资源电网问题?

如何解决使用内核密度计算人力资源电网问题?

我的数据集包括动物的位置和编号。我想做的是尝试使用内核密度函数来计算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%的人力资源时,它给了我错误

> 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 RAM的Windows系统,我一直在检查我的进程,发现我还有RAM,但是R无法分配。

继续前进,我传递了一个随机的网格值,只是看它是否有效,但仍然是相同的错误

> kernel_temp<- kernelUD(temp,grid = 1000)
> kernel_95 <- getverticeshr(kernel_temp,: 
  The grid is too small to allow the estimation of home-range.
You should rerun kernelUD with a larger extent parameter

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

observationsw

这是巨大的。我想知道在没有网格那么大的情况下,是否有更简便的方法来计算HR或传递网格功能

任何帮助都非常有用。 :)

编辑- 我尝试了程度上= 2并遇到相同的问题。

> kernel_temp<- kernelUD(temp,extent = 2)
> kernel_95 <- getverticeshr(kernel_temp,: 
  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是最佳选择。!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。