#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).