用于大型数据集的 spatstat 置换测试的替代方法

问题描述

空间统计的新手,我一直在使用它来分析超分辨率显微镜数据集。我得到了一些非常有趣的汇总统计数据(尤其是 K 函数),它们显示了两组数据之间的差异。我想对两组进行假设检验,以便能够回答这个问题——两组点模式是否来自同一个点过程?

我有一列包含点模式 (ppp) 的超帧,以及第二列中表示分组的因子。每组有 10 个点过程。每个点过程至少有1500000个点需要分析。

>superResData
Hyperframe:
       locs Experiment
X1    (ppp)      basal
X2    (ppp)      basal
X3    (ppp)      basal
X4    (ppp)      basal
X5    (ppp)      basal
X6    (ppp)      basal
X7    (ppp)      basal
X8    (ppp)      basal
X9    (ppp)      basal
X10   (ppp)      basal
X1.1  (ppp)    insulin
X2.1  (ppp)    insulin
X3.1  (ppp)    insulin
X4.1  (ppp)    insulin
X5.1  (ppp)    insulin
X6.1  (ppp)    insulin
X7.1  (ppp)    insulin
X8.1  (ppp)    insulin
X9.1  (ppp)    insulin
X10.1 (ppp)    insulin

如 Baddeley 等人所述。关于空间统计的书,我用过:

studpermu.test(superResData,locs ~ Experiment,summaryfunction=Kinhom)

但不幸的是,由于数据集的大小,我遇到了内存问题:

Error: cannot allocate vector of size 1.2 Gb

即使在 Google Colab Pro 上运行此分析也会因为内存不足而失败。

是否有替代测试或函数可用于容纳这个庞大的数据集? 提前感谢您的建议!

解决方法

这是一个关于 studpermu.test 系列包中的函数 spatstat 的问题(该函数现在在子包 spatstat.core 中)。

请提供有关您使用 studpermu.test 的上下文的更多信息。传递给 studpermu.test 的参数是什么?点模式数据是在超帧中组织的,还是作为点模式列表的列表组织的?在错误消息之前或之后是否打印了任何其他消息或警告?您选择了哪个汇总函数?

请重新运行相同的命令,等待错误,然后键入 traceback(),然后向我们显示输出。这将告诉我们错误发生的确切时间,这非常重要。

studpermu.test 是用 R(而不是 C)编写的用户贡献代码。对于大型数据集,它可能不是很有效。我们会将其列入需要改进的事项清单。

尝试以下技巧:

  • 在对 correction="none" 的调用中添加参数 studpermu.test。这将抑制边缘校正因子的计算,这有时在计算上可能很昂贵。您不需要在数据中进行边缘校正,因为点太多了。

  • 计算一个或两个点模式的 K 函数,并直观地判断距离值的合理范围(从某种意义上说,有趣的信息包含在这个距离范围内)。然后将参数 rinterval=c(0,rmax) 添加到对 studpermu.test 的调用中,其中 rmax 是距离的合理最大值。 (距离值的默认范围可能太大。)