spatstat中rpois与rpoispp结果对齐疑问:为何需考虑单元格数?
关于spatstat中rpois与rpoispp的差异及lambda参数的理解
核心差异:lambda的定义不同
rpois(n, lambda):lambda代表每个独立单元格的期望点数,直接为每个单元格生成泊松计数。rpoispp(lambda):lambda代表空间强度(单位面积内的期望点数),生成的点过程中,区域内的总期望点数是强度在该区域上的积分。
在你的示例中,Z是定义在单位正方形(总面积=1)上的像素图像,图像被划分为n.cells个单元格,因此每个单元格的面积为1/n.cells。
为什么需要乘以n.cells?
当你希望rpoispp生成的点在每个单元格内的期望点数与rpois生成的单元格计数一致时:
- 对于
rpois,每个单元格的期望点数就是Z[](图像中该单元格的像素值)。 - 对于
rpoispp,每个单元格的期望点数 = 强度值 × 单元格面积。要让这个值等于Z[],强度值需要设为Z[] / (1/n.cells) = Z[] × n.cells,也就是lambda = Z * n.cells。
这就是为什么sum(counts)(rpois生成的总点数)和npoints(pp.cells)(rpoispp生成的总点数)数值接近——两者的期望都是sum(Z[])。而直接用rpoispp(lambda = Z)时,总期望点数是∫Z(x,y)dxdy(整个单位正方形的强度积分),计算得约8,和你得到的npoints(pp)=8完全匹配。
这种使用方式是否正确?
完全正确。当你的需求是让空间点过程在每个单元格内的期望点数与rpois生成的单元格计数匹配时,将lambda设为Z * n.cells完全符合两个函数的定义逻辑。
示例代码与可视化
library(spatstat) set.seed(123) # 像素图像 Z <- as.im(function(x,y){10 * sqrt(x+y)}, unit.square()) n.cells <- dim(Z)[1]*dim(Z)[2] # 直接使用Z作为强度的点模式 pp <- rpoispp(lambda = Z) npoints(pp) # [1] 8 # 调整强度后匹配rpois的点模式 pp.cells <- rpoispp(lambda = Z*n.cells) npoints(pp.cells) # [1] 160100 # rpois生成的单元格计数 counts <- rpois(n=n.cells, lambda=Z[]) counts.im <- im(matrix(counts, nrow=dim(Z)[1], ncol=dim(Z)[2])) sum(counts) # [1] 159980 # 可视化:Z图像叠加pp点 plot(Z) plot(pp, add=T)

# 可视化:pp的像素化结果 plot(pixellate(pp))

# 可视化:Z图像叠加pp.cells点 plot(Z) plot(pp.cells, add=T)

# 可视化:pp.cells的像素化结果 plot(pixellate(pp.cells))

# 可视化:counts.im的图像 plot(counts.im)

内容的提问来源于stack exchange,提问作者Florencia Grattarola
相关产品推荐
相关产品推荐

