将单个模型拟合到 spatstat 中的多个数据集时如何优化 r 参数?

How to optimize the r parameter when fitting a single model to several datasets in spatstat?

我想使用 spatstat 包将单个模型拟合到 R 中的几个独立数据集。在这里,我有 3 个独立的数据集(ppp 个名为 NMJ1NMJ2NMJ3 的对象),我想在其中拟合一个通用模型。要走的路应该是使用 mppm 函数:

data <- listof(NMJ1,NMJ2,NMJ3)
data <- hyperframe(X=1:3, Points=data)
r <- matrix(c(120, 240, 240, 90), nrow = 2, ncol = 2)
model <- mppm(Points ~marks*abs(sqrt(x^2+y^2)), data, Strauss(r))

但是,r是一个自由参数,我想优化一下。我开始做:

ll <- -Inf
r_hat <- 0
for (r in seq(from=0.5, to=10, by=0.05)){
  fit1 <- ppm(NMJ1~marks*sqrt(x^2+y^2),Strauss(r))
  fit2 <- ppm(NMJ2~marks*sqrt(x^2+y^2),Strauss(r))
  fit3 <- ppm(NMJ3~marks*sqrt(x^2+y^2),Strauss(r))
  if(logLik.ppm(fit1)+logLik.ppm(fit2)+logLik.ppm(fit3) > ll) { 
    ll <- logLik.ppm(fit1)+logLik.ppm(fit2)+logLik.ppm(fit3)
    r_hat <- r
  }
}

(即通过找到 r 的值优化我的 3 个数据集上的 3 个拟合的对数似然之和),它在没有警告的情况下运行;然而,这里我在每个数据集上拟合了 3 个独立模型,而我希望我的模型对所有这些模型都是相同的。

然后我尝试了:

ll <- -Inf
r_hat <- 0
for (r in seq(from=0.5, to=10, by=0.05)){
  fit <- mppm(Points ~ marks*sqrt(x^2+y^2), data, Strauss(r))
  ll_temp <- logLik.mppm(fit)
  
  if(ll_temp > ll) { 
    ll <- ll_temp
    r_hat <- r
  }
}

其中 returns 以下警告:

Warning message:
In logLik.mppm(fit) :
  log likelihood is not available for non-Poisson model; log-pseudolikelihood returned

除此警告外,r 的返回值似乎不符合实际(它们大于我的点之间的平均距离)。因此,我的问题如下:

  1. 使用 mppm 时,是否有一种“干净”的方法来优化 r 参数?
  2. 在统计方面,r 可以分析计算吗(例如,根据我的点之间的距离分布)?

mppm 目前还没有以简洁的方式实现,也就是说,将模型拟合到多个点模式数据集。它在“待办事项”列表中。 (对于将模型拟合到单点模式数据集,请参阅下面的最后一段。)

除了一个 问题 之外,您的代码是正确的:它假设比较两个模型的对数伪似然值是有效的 r .这并不总是正确的,因为默认情况下,ppmmppm 使用边缘校正的边界方法,默认情况下,边界距离 rbord 选择等于交互距离 r。在您的代码中,每个模型的 rbord 都不同,因此伪似然不具有严格的可比性(实际上模型基于不同的“样本量”)。

为避免此问题,您可以将边界距离 rbord 显式设置为等于将要使用的 rmaximum 值:

mppm(Points ~ something, Strauss(r), rbord=rmax)

或在对 mppm 的调用中指定另一个边缘校正,例如 correction="iso"correction="none"。这些策略中的任何一个都将确保伪似然值具有可比性。

您注意到通过您的搜索程序获得的 r 估计值是不现实的。这可能归因于上面讨论的问题。但有时当搜索域选择太大时也会发生这种情况(如果您允许软件尝试不切实际的值)。

另一个更快的选择是使用 mppm 来拟合具有 PairPiece 交互作用的模型,指定一系列跳跃点 r,然后绘制结果拟合交互(从使用 fitin 的模型中提取)这将使您能够判断 r 的最合适值,或者至少是合适的 r 范围。它还为您提供了一种判断阈值类型交互模型是否合适的方法。请参见 the spatstat book.

中第 517 页的底部和图 13.19 的左面板

用行话来说,r叫做不规则参数。正如 spatstat 包文档和 spatstat book 中所解释的,只有常规参数由 ppmmppm 估计,不规则参数必须以其他方式确定。请参阅 spatstat 书的第 9.12 节和第 13.6.3 节。

因为 r 是距离阈值,所以似然或伪似然作为 r 的函数不是连续的。所以你的第二个问题的答案是严格的“否”,没有估计r.

的解析公式

为了将模型拟合到点模式数据集,有两个函数可以估计交互范围:profilepl,它使用类似于您在上面实现的一个,以及 ippm 解析地求解得分方程。要将 Strauss 模型拟合到必须估计 r 的单个数据集,唯一支持的选项是 profilepl,因为 Strauss 模型相对于 r 不可微分。关于相互作用范围估计量的统计性能,我们知之甚少。这仍然是一个研究问题。