在R的spatstat中用图像设置kappa模拟Thomas聚类时出错
非均匀父点强度的Thomas过程模拟问题解决
报错本质
这个错误源于Thomas过程的生成逻辑:父点的后代会以父点为中心、scale为半径分布。当kappa传入强度图像时,该图像的窗口必须覆盖目标模拟窗口(win)向外扩张scale距离后的区域——否则会出现父点过于靠近图像边缘,导致后代超出目标窗口的情况,触发窗口范围不足的报错。
解决步骤
要实现非均匀父点强度的Thomas模拟,需要先扩大生成kappa的窗口,确保其范围足够覆盖目标窗口的扩张区域,具体代码如下:
- 初始化参数与目标窗口
library(spatstat) scale_val <- 0.1 # 设定你要输出的目标模拟窗口,这里用默认单位正方形 target_win <- owin()
- 生成适配的异质父点强度图像
# 将目标窗口向外扩张scale_val距离,用于生成kappa图像 expanded_win <- dilation(target_win, scale_val) # 在扩张后的窗口生成泊松点过程,再计算密度得到非均匀强度Z Z <- as.im(density(rpoispp(lambda = 14, win = expanded_win)))
- 执行非均匀Thomas过程模拟
# 指定目标窗口win,传入适配的kappa图像 thomas_result <- rThomas(scale = scale_val, kappa = Z, mu = 50, win = target_win) plot(thomas_result)
补充说明
这种方式完全可以实现非均匀父点分布的Thomas聚类,和你用mu设置非均匀后代数的逻辑平行:kappa控制父点的空间密度差异,mu控制每个父点产生后代数量的空间差异,二者都能实现非均匀的聚类模式。
内容的提问来源于stack exchange,提问作者nis38
相关产品推荐
相关产品推荐

