You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

Z图像叠加pp点模式

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

pp的像素化结果

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

Z图像叠加pp.cells点模式

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

pp.cells的像素化结果

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

counts.im的图像


内容的提问来源于stack exchange,提问作者Florencia Grattarola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 02:42:12