【问题标题】:How to optimize the r parameter when fitting a single model to several datasets in spatstat?将单个模型拟合到spatstat中的多个数据集时如何优化r参数?
【发布时间】:2021-11-19 17:00:27
【问题描述】:

我想使用 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
  }
}

返回以下警告:

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

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

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

【问题讨论】:

    标签: r spatstat


    【解决方案1】:

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

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

    为避免此问题,您可以将边框距离 rbord 显式设置为等于将使用的r最大值值:

    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 不可微分。关于交互范围估计量的统计性能的信息知之甚少。这仍然是一个研究问题。

    【讨论】:

    • 感谢您对rbord 参数的评论。限制候选值的范围确实会产生更现实的结果。只有一条评论:看起来fitin 的当前版本不接受mppm 对象作为参数。
    • 如果modmppm类的拟合模型,则执行f &lt;- anylapply(subfits(mod), fitin)提取拟合的交互对象,然后plot(f)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 2018-12-09
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多