【发布时间】:2020-01-20 20:30:15
【问题描述】:
我想分析动物所显示的空间模式类型(即随机、聚集、统一),同时考虑其可用栖息地的潜在空间模式。有问题的动物栖息在树上,因此对动物 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
从那里我将运行聚合模型的测试,但添加第二个点模式的逻辑应该是相似的。
我将不胜感激有关处理此问题的方法的任何建议。我想不出一种有效的方法来谷歌这个,并且在 R 中缺少聪明的编码解决方案。提前致谢!
【问题讨论】: