我在弄清楚如何使用 R spatstat 包中的 profilepl() 来实现更复杂的混合吉布斯模型时遇到了一些麻烦。例如,我正在尝试构建一个具有硬核和多个 Geyer 交互的混合模型。
我尝试过做这样的事情:
RR <- c(expand.grid(r=seq(4,8, by=1), sat = 1:2), expand.grid(r1=seq(8,12, by=1), sat1 = 1:2))
MS <- function(r, sat, r1, sat1) { Hybrid(A=Hardcore(NA), B=Geyer(r=r, sat = sat), C=Geyer(r=r1, sat = sat1)) }
fit <- profilepl(RR, MS, swedishpines ~ polynom(x,y,2), correction = "isotropic", aic = FALSE)
我不确定我这样做是否正确,似乎可能有比我所做的更好的方法来编写交互函数(RR和MS)。对于 Geyer 相互作用,我目前必须给它两个相互作用“范围”来估计相互作用半径,我想知道我是否可以只提供一个数字“范围”(例如 4 - 12)并让 profilepl 选择该区间内的两个最佳相互作用半径。
绘制剖面可能性也会给出一个奇怪的输出,不确定是否有办法更好地可视化这一点,特别是如果它可以指示两个最佳 Geyer 交互参数:https://i.sstatic.net/mLC0B18D.png
如有任何帮助,我们将不胜感激!谢谢你
您的代码大部分是正确的,并且正在生成有效的拟合对象。
但是,代码并没有搜索所有可能的参数值组合,而只是搜索了一些选定的组合。这导致了奇怪的情节。
profile
的第一个参数应该是一个数据框,其中每一行提供一组要考虑的参数值。数据框的行应枚举您要优化的参数空间(所有参数值)。
在您的代码中,对象
RR
包含 10 组参数值 r
、sat
、r1
、sat1
。参数值也可以从拟合的对象中提取:
fit$param
r sat r1 sat1
1 4 1 8 1
2 5 1 9 1
3 6 1 10 1
4 7 1 11 1
5 8 1 12 1
6 4 2 8 2
7 5 2 9 2
8 6 2 10 2
9 7 2 11 2
10 8 2 12 2
在此数据框中,
sat
和sat1
的值始终彼此相等,并且r1
始终等于r + 4
。如果这就是您的意图,那么实际上只有两个“自由变量”,即 r
和 sat
。这解释了为什么plot(fit)
产生的情节看起来很奇怪。
最好将交互编码为两个自由变量
r
和sat
的函数:
RR <- expand.grid(r=seq(4,8, by=1), sat = 1:2)
MS <- function(r, sat) {
Hybrid(A=Hardcore(NA),
B=Geyer(r=r, sat = sat),
C=Geyer(r=r+4, sat = sat)) }
然后使用对
profilepl
的相同调用进行重新安装。这应该会产生一个看起来合理的情节。