如何使用ADEShibitathr软件包计算home range分析的KUD?

如何使用ADEShibitathr软件包计算home range分析的KUD?,r,sp,rgdal,adehabitathr,R,Sp,Rgdal,Adehabitathr,我试图为我的企鹅追踪数据计算KUD 50%和95%,但遇到了一个错误。我的目标是计算主范围密度,然后将数据导出为多边形 library(adehabitatHR) library(sp) library(readxl) library(rgdal) HRtracks<- as.data.frame(read_excel("allinterpolatedtracks.xlsx")) # assign the correct columns as coordina

我试图为我的企鹅追踪数据计算KUD 50%和95%,但遇到了一个错误。我的目标是计算主范围密度,然后将数据导出为多边形

library(adehabitatHR)  
library(sp)
library(readxl)
library(rgdal)

HRtracks<- as.data.frame(read_excel("allinterpolatedtracks.xlsx")) 

# assign the correct columns as coordinates
coordinates(HRtracks)<-c("x","y")   
proj4string(HRtracks)<- CRS("+init=epsg:3857")

#convert the coordinates to utm format
tracks.utm<-spTransform(HRtracks, CRS("+proj=utm +zone=60 +datum=WGS84"))
我怀疑我的脚本中缺少了一些东西,但是我还不是一个有经验的用户,所以希望得到一些建议

数据:

tracks.utm <- dput(new("SpatialPointsDataFrame", data = structure(list(TripID = c(1, 
1, 1, 1, 1, 1)), row.names = c(NA, -6L), class = c("data.frame")), 
coords.nrs = numeric(0), coords = structure(c(165846.488217799, 
165846.488227808, 165846.488167749, 165846.488257839, 165846.488237819, 
165846.488718291, -19995889.0262206, -19995889.0261311, -19995889.0262007, 
-19995889.0261311, -19995889.0260814, -19995889.0254053), .Dim = c(6L, 
2L), .Dimnames = list(NULL, c("x", "y"))), bbox = structure(c(165846.488167749, 
-19995889.0262206, 165846.488718291, -19995889.0254053), .Dim = c(2L, 
2L), .Dimnames = list(c("x", "y"), c("min", "max"))), proj4string = new("CRS", 
projargs = "+proj=utm +zone=60 +datum=WGS84 +units=m +no_defs")))

tracks.utm基于dput,数据中只有一列。检查数据是一种很好的做法!如果你看
str(轨迹)。utm@data)
唯一一列是TripID,您正在尝试指定第三列

如果查看函数帮助,您将看到正在传递的
xy
参数指定:

继承类SpatialPoints(包含x和y)的对象 动物的迁移。如果xy继承该类 SpatialPointsDataFrame,它应仅包含一列(因子) 与每次搬迁的动物身份相对应

这意味着TripID应该是唯一的列,是一个因子,并对应于单个动物id。由于预期只有一列,因此不需要指定它,只需指定sp对象。但是,显然不需要一个列,您可以有多个列,但需要指定包含唯一动物ID的列,从而指定列括号索引

为了确保您的动物ID是一个因子(根据帮助),我建议将适当的列(例如TripID)强制为一个因子

library(sp)
library(adehabitatHR)

tracks.utm <- dput(new("SpatialPointsDataFrame", data = structure(list(TripID = c(1, 
1, 1, 1, 1, 1)), row.names = c(NA, -6L), class = c("data.frame")), 
coords.nrs = numeric(0), coords = structure(c(165846.488217799, 
165846.488227808, 165846.488167749, 165846.488257839, 165846.488237819, 
165846.488718291, -19995889.0262206, -19995889.0261311, -19995889.0262007, 
-19995889.0261311, -19995889.0260814, -19995889.0254053), .Dim = c(6L, 
2L), .Dimnames = list(NULL, c("x", "y"))), bbox = structure(c(165846.488167749, 
-19995889.0262206, 165846.488718291, -19995889.0254053), .Dim = c(2L, 
2L), .Dimnames = list(c("x", "y"), c("min", "max"))), proj4string = new("CRS", 
projargs = "+proj=utm +zone=60 +datum=WGS84 +units=m +no_defs")))

tracks.utm@data$TripID <- factor(tracks.utm@data$TripID)
  str(tracks.utm@data) 
( colkud <- adehabitatHR::kernelUD(tracks.utm[,1], h="href", 
                                 grid=1000, same4all=TRUE) )
  image(colkud)
    points(tracks.utm, pch=20)
库(sp)
图书馆(Adesthobitathr)

tracks.utm我修复了dupt语法,这样它将生成一个有效的sp对象,并将您的xlsx read语句修改为
as.data.frame(read\u excel(“allinterpolatedtracks.xlsx”)
,从而生成data.frame而不是tribble。我认为,如果将sp对象中的数据槽作为tribble而不仅仅是data.frame,可能会出现一些非常意外的行为。由于HRtracks继承了“tbl_df”和“data.frame”,空间强制只是将对象解析到数据槽中,而没有检查结果类。
tracks.utm <- dput(new("SpatialPointsDataFrame", data = structure(list(TripID = c(1, 
1, 1, 1, 1, 1)), row.names = c(NA, -6L), class = c("data.frame")), 
coords.nrs = numeric(0), coords = structure(c(165846.488217799, 
165846.488227808, 165846.488167749, 165846.488257839, 165846.488237819, 
165846.488718291, -19995889.0262206, -19995889.0261311, -19995889.0262007, 
-19995889.0261311, -19995889.0260814, -19995889.0254053), .Dim = c(6L, 
2L), .Dimnames = list(NULL, c("x", "y"))), bbox = structure(c(165846.488167749, 
-19995889.0262206, 165846.488718291, -19995889.0254053), .Dim = c(2L, 
2L), .Dimnames = list(c("x", "y"), c("min", "max"))), proj4string = new("CRS", 
projargs = "+proj=utm +zone=60 +datum=WGS84 +units=m +no_defs")))
library(sp)
library(adehabitatHR)

tracks.utm <- dput(new("SpatialPointsDataFrame", data = structure(list(TripID = c(1, 
1, 1, 1, 1, 1)), row.names = c(NA, -6L), class = c("data.frame")), 
coords.nrs = numeric(0), coords = structure(c(165846.488217799, 
165846.488227808, 165846.488167749, 165846.488257839, 165846.488237819, 
165846.488718291, -19995889.0262206, -19995889.0261311, -19995889.0262007, 
-19995889.0261311, -19995889.0260814, -19995889.0254053), .Dim = c(6L, 
2L), .Dimnames = list(NULL, c("x", "y"))), bbox = structure(c(165846.488167749, 
-19995889.0262206, 165846.488718291, -19995889.0254053), .Dim = c(2L, 
2L), .Dimnames = list(c("x", "y"), c("min", "max"))), proj4string = new("CRS", 
projargs = "+proj=utm +zone=60 +datum=WGS84 +units=m +no_defs")))

tracks.utm@data$TripID <- factor(tracks.utm@data$TripID)
  str(tracks.utm@data) 
( colkud <- adehabitatHR::kernelUD(tracks.utm[,1], h="href", 
                                 grid=1000, same4all=TRUE) )
  image(colkud)
    points(tracks.utm, pch=20)