Я хочу проанализировать тип пространственного паттерна, показываемого животным (то есть случайный, кластерный, равномерный), принимая во внимание базовый пространственный паттерн его доступной среды обитания.Животные, о которых идет речь, живут на деревьях, поэтому стандартный анализ spp животных всегда будет показывать кластерное распределение (т.е. кластеризацию вокруг деревьев), но я хочу проверить, существует ли кластеризация между деревьями, а также распределяются ли они случайно среди деревьев.Чтобы обеспечить визуальное представление, я хочу иметь возможность различать следующие сценарии в изображении:
https://imgur.com/a/iE3nAoh (изображение не разрешено, поскольку я новичок в переполнении стека, но доступно черезссылка)
Вот воспроизводимый кадр данных.Здесь приведен сценарий с однородной средой обитания (25 мест обитания) и однородными животными (16 животных на среду обитания):
library(spatstat)
data <- data.frame(matrix(ncol = 4, nrow = 25))
x <- c("habitat", "x", "y", "animalcount")
colnames(data) <- x
data$habitat <- 1:25
data$x <- seq(from=2, to=20, by=4)
data$y[1:5] <- 2
data$y[6:10] <- 6
data$y[11:15] <- 10
data$y[16:20] <- 14
data$y[21:25] <- 18
data$animalcount <- 16
Настройка условий для пространственного анализа:
plot.win <- owin(c(0,20), c(0,20)) # set the plot window as 20x20m
nS <- 499 # number of simulations
cd <- 5 # cluster distance
ed <- 50 # envelope distance
incr.dist <- 0.5 # increment distance for envelopes
Создатьточечный рисунок для среды обитания:
habitat <- ppp(x = data$x, y = data$y, window = plot.win)
Создайте точечный рисунок для животных.Для этого сначала создайте новый кадр данных с повторяющимися строками для числа в числе животных, чтобы точки были отдельными животными.Джиттер x / y, так что координаты x / y не совпадают:
data <-data[which(data$animalcount>0),]
duplicate_rows <- function(habitat, x, y, animalcount) {
expanded <- paste0("animal-", 1:animalcount)
repeated_rows <- data.frame("habitat" = habitat, "x" = x, "y" = y, "animalcount" = expanded)
repeated_rows
}
expanded_rows <- Map(f = duplicate_rows, data$habitat, data$x, data$y, data$animalcount)
animal_data <- do.call(rbind, expanded_rows)
animal_data$xan <- jitter(animal_data$x)
animal_data$yan <- jitter(animal_data$y)
animal <- ppp(x = animal_data$xan, y = animal_data$yan, window = plot.win)
Теперь протестируйте полную пространственную случайность животных независимо от среды обитания.Это должно получиться в виде кластера:
an.csr <- envelope(animal, Kest, nsims = nS, savepatterns = TRUE, r = seq(0, ed, incr.dist), correction=c("Ripley"), verbose = FALSE) #CSR fit and determine the number of simulations
an.dclf <- dclf.test(an.csr, rinterval = c(0,cd), verbose = FALSE) #calculate the summary statistics of the CSR null model fit (dclf.test)
plot(an.csr, sqrt(./pi)-r~r, ylab="L(r)-r", xlab="r (meters)", xlim=c(0,ed), legend="NULL", main=paste("Animal - CSR", sep = "")) #plot 0-centered fit with the confidence bounds
clarkevans(animal)[2] #R > 1 suggests ordering, < 1 suggests clustering
clarkevans.test(animal, "Donnelly")$p
Теперь проверьте полную пространственную случайность животных, учитывая доступную среду обитания.Это должно выйти не кластеризованным.Но простое добавление среды обитания в качестве ковариаты явно не является подходящим способом сделать это:
an.csr <- envelope(animal, covariates = animal_data[,2:3], Kest, nsims = nS, savepatterns = TRUE, r = seq(0, ed, incr.dist), correction=c("Ripley"), verbose = FALSE)
an.dclf <- dclf.test(an.csr, rinterval = c(0,cd), verbose = FALSE)
plot(an.csr, sqrt(./pi)-r~r, ylab="L(r)-r", xlab="r (meters)", xlim=c(0,ed), legend="NULL", main=paste("Animal - CSR", sep = ""))
clarkevans(animal)[2]
clarkevans.test(animal, "Donnelly")$p
Я также попытался запустить тест полной пространственной случайности на подходящей модели точечного процесса, где точечный рисунок животного мог быбыть предсказанным x & y, но это также не изменило результаты:
animalppm<-ppm(animal~x+y)
an.csr <- envelope(animalppm, Kest, nsims = nS, savepatterns = TRUE, r = seq(0, ed, incr.dist), correction=c("Ripley"), verbose = FALSE)
an.dclf <- dclf.test(an.csr, rinterval = c(0,cd), verbose = FALSE)
plot(an.csr, sqrt(./pi)-r~r, ylab="L(r)-r", xlab="r (meters)", xlim=c(0,ed), legend="NULL", main=paste("Animal - CSR", sep = ""))
clarkevans(animalppm)[2] #R > 1 suggests ordering, < 1 suggests clustering
clarkevans.test(animalppm, "Donnelly")$p
Оттуда я бы запустил тесты моделей агрегации, но логика добавления шаблона второй точки должна быть аналогичной.
Буду признателен за любые предложения о способах решения этой проблемы.Я не могу придумать эффективный способ для Google это, и мне не хватает умных решений для кодирования в R. Заранее спасибо!