0

我想使用复制的空间点模式在spatstat. spatstat有精彩的文档,您可以在此处找到有关复制点模式分析的详细信息:https ://cran.r-project.org/web/packages/spatstat/vignettes/replicated.pdf

几个映射的森林图将代表在不同位置工作的点过程。每个点图案都被标记,其中每个标记代表一个树种。此外,每个点模式都与协变量光栅图像相关联。首先,我想创建一个空模型,它假设每个标记与协变量有不同的关系。然后我想使用这个空模型来测试某些物种是否相互关联(或避免),通过模拟随机标记假设并绘制生成的模拟包络线。(随机标记假设指出标记是随机分配给点模式中的点的。)

首先,我将展示我通常如何使用单点模式进行此分析。然后我将解释我在使用超帧执行相同分析时遇到的两个问题。

假设您有一个标记点​​模式,其中每个标记都是树种。我将使用 spatstat 中可用的“lansing”数据集:

library(spatstat)
data(lansing)
par(mar=rep(0.5,4))
plot(split(lansing),main="")

现在假设您想查看一些空间协变量(例如,土壤养分或水分),因此您创建了测量的核平滑密度的光栅图像:

sim1 <- rpoispp(function(x,y) {500 * exp(-3*x)}, win=owin(c(0,1),c(0,1)))
sim1 <- density(sim1)

首先创建空模型:

single.mod <- ppm(lansing ~ marks*sim1)

其中“ppm”函数将“marks”识别为具有物种名称的列,将“sim1”识别为协变量。

然后执行基于模拟的假设检验,您对 Black Oak 和 Maple 是否位于相同位置感兴趣。

single.E<-envelope.ppm(single.mod,Lcross,i="blackoak",j="maple",nsim=39, nrank=1,global=TRUE,correction="best",simulate=expression(rlabel(lansing)))
par(mar=rep(4,4))
plot(E,legend=FALSE,ylab="L-function",xlab="Spatial scale (m)",main="Testing random label hypothesis \nfor single point pattern")

这工作正常。现在,如果我们出去采样更多的图以使我们的分析更加稳健,我们可以将额外的图合并到超帧中,其中每个图都有自己的点模式并被视为“实验”复制。每个图也将获得自己的空间协变量:

sim2 <- rpoispp(function(x,y) {500 * exp(-2*y)}, win=owin(c(0,1),c(0,1)))
sim2 <- density(sim2)

sim3 <- rpoispp(500, win=owin(c(0,1),c(0,1)))
sim3 <- density(sim3)

hyper <- hyperframe(pp=list(lansing,lansing,lansing),sims=list(sim1,sim2,sim3))

Sim2 和 sim3 是我们收集的另外两个图的空间协变量,“超帧”函数将三点模式及其相关的空间协变量组合成一个超帧。

我想使用“mppm”(用于为多点模式创建模型)构建一个模型,其中每个点模式都由它们的空间协变量“sims”解释:

hyper.mod <- mppm(pp ~ sims, data = hyper)

当我试图让每个标记与协变量具有不同的关系时,就会出现第一个问题:

int.mod <- mppm(pp ~ marks*sims, data=hyper)

吐出以下错误消息:

checkvars 中的错误(公式,data.sumry$col.names,extra = c(“x”,“y”,:公式中的变量“标记”不是数据中的名称之一)

我得到同样的错误使用:

int.mod <- mppm(pp ~ pp$marks*sims, data=hyper)

第二个问题是弄清楚如何在超帧上运行基于模拟的假设检验。让我们使用有效的超帧模型(hyper.mod)来试试这个:

E.hyper <- envelope(hyper.mod,Lcross,i="blackoak",j="maple",nsim=39, nrank=1,global=TRUE,correction="best",simulate=expression(rlabel(pp)))

您收到一条错误消息:

UseMethod(“信封”)中的错误:没有适用于“信封”的适用方法应用于“c('mppm','list')”类的对象

暗示“信封”不适用于 mppm 对象(仅 ppp 或 ppm)。我怀疑有办法巧妙地绕过这个限制,但我还没有找到。任何建议或指导都会非常有帮助!

4

2 回答 2

2

没有envelope.mppmspatstat因为一些统计问题(与多假设检验有关)尚未解决。

最快的解决方案可能是使用cdf.test.mppm它将执行测试并提供一些图形输出。

如果拟合模型暗示不同的模式在统计上应该是等效的,那么从不同的点模式中汇集(例如K个函数的)包络以获得单个包络是合理的。如果,例如,模型包括对不同模式不同的协变量,那将是无效的。

更好的策略可能是为每个模式绘制全局包络,并使用乘积规则进行多次测试。假设数据中有 M 个点模式,并且您想要(拟合模型的)显着性水平 alpha(通常 alpha = 0.05)的检验。然后你要构建 M 个信封,每个模式一个,每个都有显着性水平gamma = 1 - (1-alpha)^(1/M)。每个信封将由信封.ppp 生成global=TRUEnsim = 1/gamma - 1近似。示例:如果 M = 10 且 alpha = 0.05 那么gamma=1 - 0.95^(1/10) = 0.0051如此nsim=1/gamma-1 = 194.45,调用它nsim=195。由于您要制作全局信封,因此您可能需要两倍的模拟次数,如envelope. 执行如下操作,fit拟合模型在哪里H,数据的原始超帧在哪里:

sims <- simulate(fit, nsim=2*195)
SIMS <- list()
for(i in 1:nrow(sims)) SIMS[[i]] <- as.solist(sims[i,,drop=TRUE])
Hplus <- cbind(H, hyperframe(Sims=SIMS))

这通过添加一列模拟模式来增强原始超帧(列中的每个条目都是一个包含 2*195 模式的“单一列表”)。然后做(包含原始点模式数据集X的列在哪里)H

EE <- with(Hplus, envelope(X, Lest, global=TRUE, nsim=195, simulate=Sims))
plot(EE)

这会产生一个包含许多信封面板的图。他们的解释是,如果观察到的 L 函数中的任何一个在相应的包络之外徘徊,则结果是显着的 - 测试拒绝拟合模型为真的原假设。

于 2016-07-04T02:48:44.207 回答
1

第一个错误是几天前在spatstat. 如果你有这个devtools包,你可以spatstat很容易地获得最新的(和最好的):

devtools::install_github('spatstat/spatstat')

让我知道这是否不适合您(以及您在哪个平台上)。

第二个错误确实是因为envelope没有为 class 实现mppm,所以你现在必须设计一个解决方法,就像你说的那样。

我认为您到目前为止所做的事情存在几个问题:模型是不均匀的,但是您使用Lcross而不是Lcross.inhom,我认为您single.E的等效于(根本不使用拟合模型):

single.E <- envelope(lansing, Lcross, i="blackoak", j="maple", nsim=39, rank=1, global=TRUE, correction="best", simulate=expression(rlabel(lansing)))

让我知道你在这方面的进展情况。我可能会抽出时间提供有关缺失的解决方法的更多详细信息envelope.mppm(为每个模式汇集汇总函数)。

于 2016-07-02T07:27:54.353 回答