создание оценок плотности ядра для нескольких животных в adehabitatHR

#r #adehabitathr

#r #adehabitathr

Вопрос:

Я пытаюсь создать оценки плотности ядра (KDE), чтобы оценить домашние ареалы для нескольких пар длиннохвостых синиц. Несмотря на фильтрацию пар (переменная «nest_id»), которые имеют менее пяти местоположений GPS, я по-прежнему получаю сообщение об ошибке «Требуется не менее 5 перемещений, чтобы соответствовать домашнему ареалу» при попытке создать объекты ядра для всех особей. Я не уверен точно, в чем проблема / что я делаю неправильно. Я очень новичок в анализе домашнего ареала в целом, а также в R и adehabitatHR. Ниже приведен мой код.

 library(dplyr)
# reading in location data
locations <- read.csv("./data/GPS_LOCATIONS_MASTER.csv")

## making nest_id a factor
locations$nest_id <- as.factor(locations$nest_id)

## filtering for points I want to include
location_sub <- filter(locations, start_at_nest == "no")

## taking out pairs (via nest_id) with less than 5 GPS locations
xorig <- subset(location_sub,
                with(location_sub,
                     nest_id %in% names(which(table(nest_id) >= 5))))

glimpse(xorig)


Observations: 257
Variables: 10
$ point_id          <int> 293, 294, 299, 300, 303, 306, 307, 312, 315, 318, 324$ nest_id           <fct> 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,$ female_id         <fct> RPR, RPR, RPR, RPR, RPR, RPR, RPR, RPR, RPR, RPR, RPR…
$ male_id           <fct> OWL, OWL, OWL, OWL, OWL, OWL, OWL, OWL, OWL, OWL, OWL…
$ lat               <dbl> 53.38293, 53.38285, 53.38282, 53.38302, 53.38300, 53.$ lon               <dbl> -1.554700, -1.554000, -1.553967, -1.554067, -1.553867$ start_at_nest     <fct> no, no, no, no, no, no, no, no, no, no, no, no, no, n…
$ place_in_sequence <int> 3, 1, 3, 4, 3, 3, 4, 3, 3, 3, 3, 4, 5, 1, 2, 3, 4, 5,$ date_time         <fct> 2019-02-27T13:26:31Z, 2019-02-27T13:28:46Z, 2019-02-2$ notes             <fct> , , , , , , , , , , , , , , , , , , , , , , , , , , 


library(sp)

## projecting so that my x amp; y (in coords.x1 amp; coords.x2) are in metres
xorig_s <- SpatialPointsDataFrame(xorig,
                                  coords = cbind(xorig$lon, xorig$lat),
                                  proj4string =  CRS(" proj=longlat  datum=WGS84  no_defs"))
xorig_utm <- spTransform(xorig_s, CRS(" proj=utm  zone=30  ellps=WGS84 
                                       datum=WGS84  units=m  no_defs"))
glimpse(as.data.frame(xorig_utm))

Observations: 257
Variables: 12
$ point_id          <int> 293, 294, 299, 300, 303, 306, 307, 312, 315, 318, 324$ nest_id           <fct> 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,$ female_id         <fct> RPR, RPR, RPR, RPR, RPR, RPR, RPR, RPR, RPR, RPR, RPR…
$ male_id           <fct> OWL, OWL, OWL, OWL, OWL, OWL, OWL, OWL, OWL, OWL, OWL…
$ lat               <dbl> 53.38293, 53.38285, 53.38282, 53.38302, 53.38300, 53.$ lon               <dbl> -1.554700, -1.554000, -1.553967, -1.554067, -1.553867$ start_at_nest     <fct> no, no, no, no, no, no, no, no, no, no, no, no, no, n…
$ place_in_sequence <int> 3, 1, 3, 4, 3, 3, 4, 3, 3, 3, 3, 4, 5, 1, 2, 3, 4, 5,$ date_time         <fct> 2019-02-27T13:26:31Z, 2019-02-27T13:28:46Z, 2019-02-2$ notes             <fct> , , , , , , , , , , , , , , , , , , , , , , , , , , 
$ coords.x1         <dbl> 596131.3, 596178.1, 596180.4, 596173.3, 596186.6, 596$ coords.x2         <dbl> 5915843, 5915835, 5915831, 5915853, 5915852, 5915848,…

library(adehabitatHR)

## trying to create :
kud <- kernelUD(xorig_utm[,1], h = "href")
## this procures the error message:
Error in kernelUD(xorig_utm[, 1], h = "href") : 
  At least 5 relocations are required to fit an home range
  

Ответ №1:

Обновлено, чтобы указывать на текущую версию документации по функции kernelUD():

справочные документы для kernelUD

Использование

 kernelUD(xy, h = "href", grid = 60,
         same4all = FALSE, hlim = c(0.1, 1.5),
         kern = c("bivnorm", "epa"), extent = 1,
         boundary = NULL)
  

Аргументы

 xy 

An object inheriting the class SpatialPoints containing the x and y relocations
of the animal. If xy inherits the class SpatialPointsDataFrame, it should contain
only one column (factor) corresponding to the identity of the animals for
each relocation.
  

Таким образом, используя приведенное выше, вы также можете использовать виньетку, где есть пример, которому вы, возможно, уже следуете:

Ниже я привожу краткий пример использования kernelUD с использованием набора данных puechabonsp. Помните, что первый столбец перемещений компонентов этого набора данных содержит идентификационные данные животных:

 > data(puechabonsp)
> kud <- kernelUD(puechabonsp$relocs[,1], h="href")
> kud
  

Один из способов понять, что вам нужно для приведенного выше xy, — распечатать пример данных, включенных в пример пакета:

 data("puechabonsp")
head( puechabonsp$relocs[,1] )


            coordinates  Name
    1 (699889, 3161560) Brock
    2 (700046, 3161540) Brock
    3 (698840, 3161030) Brock
    4 (699809, 3161500) Brock
    5 (698627, 3160940) Brock
    6 (698719, 3160990) Brock
    Coordinate Reference System (CRS) arguments: NA 
  

Обратите внимание выше, puechabonsp$relocs[,1] — это объект SpatialPointsDataFrame, содержащий как координаты, так и идентификатор (который является ‘Name’ выше).

Двигаясь дальше, посмотрите на ?SpatialPointsDataFrame справку, чтобы понять эту функцию и объект, который она создает:

Использование

 SpatialPointsDataFrame(coords, data, coords.nrs = numeric(0), 
      proj4string = CRS(as.character(NA)), match.ID, bbox = NULL)
  

Аргументы

 coords      numeric matrix or data.frame with coordinates (each row 
is a point); in case of SpatialPointsDataFrame an object of class
SpatialPoints-class is also allowed.
  

«Ваша задача, если вы решите принять …» — правильно создать coords в вашем SpatialPointsDataFrame, где coords указаны как координаты, так и идентификатор животного.

Отсюда может быть полезно задать новый вопрос типа «Как создать SpatialPointsDataFrame , который включает идентификаторы животных?». Если вы поднимаете этот вопрос, обязательно включите воспроизводимый набор данных, поскольку это будет иметь большое значение для людей, помогающих.

Комментарии:

1. Привет, крадс, спасибо за ваш ответ! Это имеет смысл. Я исправил свой код ud <- kernelUD(xy = xorig_utm[, c («coords.x1», «coords.x2»)], id = xorig_utm[, «nest_id»], h = «LSCV»), это должно выбрать преобразованные столбцы lat amp; lon (coords.x1 amp; coords.x2) в качестве координат, плюс xorig_utm[, «nest_id»] в качестве аргумента id должен указывать функции группировать точки по nest_id. Однако, когда я запускаю это, у меня все еще возникают проблемы с получением сообщения об ошибке Error в kernelUD(xy = xorig_utm[, c («coords.x1», «coords.x2»)], id = xorig_utm[, : неиспользуемый аргумент (id = xorig_utm[, «nest_id»])

2. Извините, мой предыдущий ответ связан с документом об устаревшей kernelUD() версии функции. Теперь я обновил свой ответ, чтобы описать текущие kernelUD() параметры функции и связать его с документами текущей версии.

3. @Tobit ты когда-нибудь это понимал? У меня такая же проблема. Мои данные имеют точно такую же структуру, что и образец набора данных, который они предоставляют (SpatialPointsDataFrame)

4. @spops Привет, я обошел проблему очень некрасивым способом — по сути, я вычислил домашний ареал каждой особи отдельно, а не всех сразу… это, конечно, не то, что вы хотите делать, если у вас много отдельных домашних ареалов. Хотя в конце концов я был вынужден использовать минимальные выпуклые многоугольники в любом случае из-за способа, которым я собирал свои данные.

5. @Tobit Спасибо, что перезвонил мне! У меня тоже есть очень хитрое «решение» с моей стороны — я сохранил фрейм данных с species, x, y в формате csv (это был исходный df, который я использовал для преобразования в SpatialPointsDataFrame ), затем прочитал его обратно в R. Повторное чтение показало, что у меня был невидимый столбец ID в исходном фрейме данных, который все портил. kernelUD читал этот невидимый столбец идентификаторов и видел, что для каждой координаты было только одно «перемещение» (ID).