spatstat 中拟合模型参数的约束
Constraints on the parameters of a fitted model in spatstat
在 R
包 spatstat
中,我想对适合我的数据的模型的参数施加一些限制。
我的数据是一个多类型 ppp
对象,其类型称为 BRP
和 GluR
。如下图所示,点(大致)组织成同心圆。 BRP
个物体位于半径为 128.4 的环上,而 GluR
个物体位于半径为 261.8 的外环上。
使用 ppm
函数,我想拟合一个模型,其中类型 BRP
的强度函数与 ~abs(sqrt(x^2+y^2)-128.4)
成比例,并且类型 [=] 的强度函数16=] 与 ~abs(sqrt(x^2+y^2)-261.8)
成比例。但是,当使用以下趋势公式时:
fit_NMJ <- ppm(NMJ,~marks*(abs(sqrt(x^2+y^2)-128.4)+abs(sqrt(x^2+y^2)-261.8)))
我获得了 GluR
和 ~abs(sqrt(x^2+y^2)-radius_BRP )
之间以及 BRP
和 ~abs(sqrt(x^2+y^2)-radius_GluR)
之间的交叉交互(我想避免):
> radius_GluR <- 261.8
> radius_BRP <- 128.4
> fit_NMJ <- ppm(NMJ,~marks*(abs(sqrt(x^2+y^2)-radius_BRP )+abs(sqrt(x^2+y^2)-radius_GluR )))
> fit_NMJ
Nonstationary multitype Poisson process
Possible marks: ‘BRP’ and ‘GluR’
Log intensity: ~marks * (abs(sqrt(x^2 + y^2) - radius_BRP) + abs(sqrt(x^2 + y^2) - radius_GluR))
Fitted trend coefficients:
(Intercept) marksGluR
-9.850558359 0.231315028
abs(sqrt(x^2 + y^2) - radius_BRP) abs(sqrt(x^2 + y^2) - radius_GluR)
-0.044039428 0.009055454
marksGluR:abs(sqrt(x^2 + y^2) - radius_BRP) marksGluR:abs(sqrt(x^2 + y^2) - radius_GluR)
0.039652754 -0.018198305
Estimate S.E. CI95.lo CI95.hi Ztest Zval
(Intercept) -9.850558359 1.92806275 -13.629491901 -6.071624817 *** -5.1090445
marksGluR 0.231315028 2.00684749 -3.702033781 4.164663836 0.1152629
abs(sqrt(x^2 + y^2) - radius_BRP) -0.044039428 0.01749010 -0.078319402 -0.009759454 * -2.5179626
abs(sqrt(x^2 + y^2) - radius_GluR) 0.009055454 0.01392686 -0.018240694 0.036351602 0.6502150
marksGluR:abs(sqrt(x^2 + y^2) - radius_BRP) 0.039652754 0.01784817 0.004670991 0.074634517 * 2.2216710
marksGluR:abs(sqrt(x^2 + y^2) - radius_GluR) -0.018198305 0.01478904 -0.047184295 0.010787685 -1.2305263
即我想将参数 marksGluR:abs(sqrt(x^2 + y^2) - radius_BRP)
和 marksBRP:abs(sqrt(x^2 + y^2) - radius_GluR)
限制为零。是否可以在趋势公式中指定它?它是否也适用于多个独立数据集(使用 mppm
函数时)?
我也可以选择分别拟合这两种类型,但是当用点相互作用拟合不同的非泊松模型时,我可能会错过一些类型间的相互作用(例如,当拟合 MultiStrauss
模型)。
您只需要直接构建规范协变量。
先简写一下
g <- function(x, y, marks, R, type) {
I(marks == type) * abs(sqrt(x^2+y^2) - R)
}
gGluR <- function(x, y, marks) {
g(x, y, marks, radius_GluR, "GluR")
}
gBRP <- function(x, y, marks) {
g(x, y, marks, radius_BRP, "BRP")
}
然后
ppm(NMJ ~ marks + gGluR + gBRP)
在 R
包 spatstat
中,我想对适合我的数据的模型的参数施加一些限制。
我的数据是一个多类型 ppp
对象,其类型称为 BRP
和 GluR
。如下图所示,点(大致)组织成同心圆。 BRP
个物体位于半径为 128.4 的环上,而 GluR
个物体位于半径为 261.8 的外环上。
使用 ppm
函数,我想拟合一个模型,其中类型 BRP
的强度函数与 ~abs(sqrt(x^2+y^2)-128.4)
成比例,并且类型 [=] 的强度函数16=] 与 ~abs(sqrt(x^2+y^2)-261.8)
成比例。但是,当使用以下趋势公式时:
fit_NMJ <- ppm(NMJ,~marks*(abs(sqrt(x^2+y^2)-128.4)+abs(sqrt(x^2+y^2)-261.8)))
我获得了 GluR
和 ~abs(sqrt(x^2+y^2)-radius_BRP )
之间以及 BRP
和 ~abs(sqrt(x^2+y^2)-radius_GluR)
之间的交叉交互(我想避免):
> radius_GluR <- 261.8
> radius_BRP <- 128.4
> fit_NMJ <- ppm(NMJ,~marks*(abs(sqrt(x^2+y^2)-radius_BRP )+abs(sqrt(x^2+y^2)-radius_GluR )))
> fit_NMJ
Nonstationary multitype Poisson process
Possible marks: ‘BRP’ and ‘GluR’
Log intensity: ~marks * (abs(sqrt(x^2 + y^2) - radius_BRP) + abs(sqrt(x^2 + y^2) - radius_GluR))
Fitted trend coefficients:
(Intercept) marksGluR
-9.850558359 0.231315028
abs(sqrt(x^2 + y^2) - radius_BRP) abs(sqrt(x^2 + y^2) - radius_GluR)
-0.044039428 0.009055454
marksGluR:abs(sqrt(x^2 + y^2) - radius_BRP) marksGluR:abs(sqrt(x^2 + y^2) - radius_GluR)
0.039652754 -0.018198305
Estimate S.E. CI95.lo CI95.hi Ztest Zval
(Intercept) -9.850558359 1.92806275 -13.629491901 -6.071624817 *** -5.1090445
marksGluR 0.231315028 2.00684749 -3.702033781 4.164663836 0.1152629
abs(sqrt(x^2 + y^2) - radius_BRP) -0.044039428 0.01749010 -0.078319402 -0.009759454 * -2.5179626
abs(sqrt(x^2 + y^2) - radius_GluR) 0.009055454 0.01392686 -0.018240694 0.036351602 0.6502150
marksGluR:abs(sqrt(x^2 + y^2) - radius_BRP) 0.039652754 0.01784817 0.004670991 0.074634517 * 2.2216710
marksGluR:abs(sqrt(x^2 + y^2) - radius_GluR) -0.018198305 0.01478904 -0.047184295 0.010787685 -1.2305263
即我想将参数 marksGluR:abs(sqrt(x^2 + y^2) - radius_BRP)
和 marksBRP:abs(sqrt(x^2 + y^2) - radius_GluR)
限制为零。是否可以在趋势公式中指定它?它是否也适用于多个独立数据集(使用 mppm
函数时)?
我也可以选择分别拟合这两种类型,但是当用点相互作用拟合不同的非泊松模型时,我可能会错过一些类型间的相互作用(例如,当拟合 MultiStrauss
模型)。
您只需要直接构建规范协变量。
先简写一下
g <- function(x, y, marks, R, type) {
I(marks == type) * abs(sqrt(x^2+y^2) - R)
}
gGluR <- function(x, y, marks) {
g(x, y, marks, radius_GluR, "GluR")
}
gBRP <- function(x, y, marks) {
g(x, y, marks, radius_BRP, "BRP")
}
然后
ppm(NMJ ~ marks + gGluR + gBRP)