使用" envelope"对空间点模式超帧进行基于仿真的假设检验。 spatstat中的函数

时间:2016-07-02 00:04:02

标签: r spatstat

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

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

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

我们假设您有一个标记点​​图案,其中每个标记都是树种。我将使用" lansing" spatstat中可用的数据集:

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)

&#34; ppm&#34;功能识别&#34;标记&#34;作为具有物种名称的列,以及&#34; sim1&#34;作为协变量。

然后执行基于模拟的假设检验,您对在相同位置是否找到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")

这很好用。现在,如果我们出去再采样几个图来使我们的分析更加稳健,我们可以将其他图表合并到一个超帧中,其中每个图都有自己的点模式,并且被认为是&#34;实验&#34;复制。每个情节也会得到自己的空间协变量:

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是我们收集的另外两个图的空间协变量,以及&#34;超帧&#34;函数将三个点模式及其相关的空间协变量组合成一个超帧。

我想使用&#34; mppm&#34;建立一个模型。 (用于创建多点模式的模型),其中每个点模式由其空间协变量来解释,&#34; sims&#34;:

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

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

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

以下错误消息吐出:

  

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

我使用相同的错误:

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错误(&#34;信封&#34;):没有适用于&#39;信封的方法&#39;适用于班级&#34; c(&#39; mppm&#39;,&#39; list&#39;)&#34;

暗示&#34;信封&#34;不适用于mppm对象(仅限ppp或ppm)。我怀疑这是一种巧妙地绕过这个限制的方法,但我还没有找到它。任何建议或指导都会非常有帮助!

2 个答案:

答案 0 :(得分:1)

第一个错误是几天前在spatstat的开发版本中修复的错误。如果您拥有devtools套餐,则可以轻松获得最新(最好)spatstat

devtools::install_github('spatstat/spatstat')

如果这不是您的选择(以及您所在的平台),请告诉我。

第二个错误确实是因为envelope没有为类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(每个模式的汇总汇总函数)的变通方法提供更多详细信息。

答案 1 :(得分:1)

envelope.mppm中没有spatstat,因为一些统计问题(与多个假设检验相关)尚未得到解决。

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

仅从不同的点模式汇集( K 函数的)信封才能获得单个信封提供拟合模型意味着不同的模式应该在统计上是等价的。如果例如模型包括对于不同模式不同的协变量,则这将是无效的。

更好的策略可能是为每个模式绘制全局包络,并使用产品规则进行多次测试。假设数据中有M个点模式,并且您需要对显着性水平α(通常为α= 0.05)进行(拟合模型的)测试。然后,您将构建M个信封,每个模式一个,每个模式具有显着性级别gamma = 1 - (1-alpha)^(1/M)。每个信封都将由envelope.ppp生成,其中大约有global=TRUEnsim = 1/gamma - 1。示例:如果M = 10且alpha = 0.05,则gamma=1 - 0.95^(1/10) = 0.0051nsim=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个模式的&#39; solist&#39;)。然后执行(其中X是包含原始点模式数据集的H列)

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

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