spatstat拟合多类型点过程模型的参数约束设置方法咨询
问题解决方案
1. 直接通过趋势公式实现参数约束
你不需要额外的约束函数,直接构造条件化的趋势公式即可完全去掉不需要的交叉项,公式写法如下:
# 预定义半径常量 radius_GluR <- 261.8 radius_BRP <- 128.4 # 构造约束后的趋势公式 fit_NMJ_constrained <- ppm(NMJ, ~ marks + I(ifelse(marks == "BRP", abs(sqrt(x^2+y^2) - radius_BRP), 0)) + I(ifelse(marks == "GluR", abs(sqrt(x^2+y^2) - radius_GluR), 0)) )
该公式的系数完全符合你的要求:
- 截距项为BRP类点的对数强度基准值
marksGluR为GluR类点相对于BRP的对数强度截距差- 第一个
I(...)项的系数仅对应BRP类点到128.4半径的距离效应 - 第二个
I(...)项的系数仅对应GluR类点到261.8半径的距离效应
不存在你不想要的两类交叉项,等价于将两个交叉参数强制设为0。
2. 多数据集mppm场景适配
上述公式写法是R标准模型公式语法,完全兼容mppm函数,你可以直接将该趋势公式传入mppm的趋势参数中,多独立数据集的拟合逻辑不会发生变化。
3. 带点交互的非泊松模型适配
该约束方法仅作用于一阶强度(趋势)部分,和二阶点交互项的估计互不影响:你可以正常指定ppm/mppm的interaction参数为MultiStrauss等多类型交互模型,不同类型点之间的交互效应会正常估计,不会丢失联合建模的信息。
可选通用约束方案
如果后续需要处理更复杂的参数约束场景,也可以先拟合全参数模型,再调用spatstat的constrain.ppm函数强制指定参数值:
# 基于你原来的全参数模型,强制两个不需要的参数为0 fit_constrained <- constrain.ppm(fit_NMJ, constraints = list( "marksGluR:abs(sqrt(x^2 + y^2) - radius_BRP)" = 0, "abs(sqrt(x^2 + y^2) - radius_GluR)" = 0 ) )
注:原全参数模型中BRP类点对GluR半径的效应就是abs(sqrt(x^2 + y^2) - radius_GluR)的主效应(因为BRP是marks的参考组),所以需要将该参数也固定为0。
内容的提问来源于stack exchange,提问作者Camille Gontier
相关产品推荐
相关产品推荐

