为什么不规则窗口方向会改变 spatstat 的 K 和 pcf 距离范围?
结论
Kest() 和 pcf() 的默认距离范围取决于点模式的窗口和数据特征。窗口方向改变时,轴对齐外接矩形也可能随之改变,默认的 r 范围因此不同。图中 x 轴更长,通常是因为默认距离范围不同,并不表示函数只沿多边形的某个方向计算距离。单独设置绘图的 xlim 只会缩放显示范围,不会重新计算统计量。
你给出的简化例子中,两个多边形的方向和大小都不同,无法单独说明差异是由旋转造成的。比较两组结果前,应先设定相同的距离范围,并确认两个窗口在该范围内都有足够的边界校正支持。
为什么默认范围会变化
Kest() 的默认 r 网格由 rmax.rule() 等规则确定。规则会考虑窗口外接矩形的短边和点密度。spatstat 的 FAQ 说明,最大距离取这些限制中的较小值,再在 0 到最大距离之间生成等间距的 r 值。spatstat FAQ
对于细长或不规则的窗口,旋转可能改变轴对齐外接矩形的边长,因此默认最大距离也可能变化。pcf() 也会在一组 r 值上估计函数。帮助文档说明,可以用 r 指定这些距离;pcf() 的距离范围也与 K 函数的范围规则相关。Kest 文档 pcf.ppp 文档
窗口会参与边界校正和估计。点对距离始终是平面上的欧氏距离;r 轴的默认上限则是函数估计所选的距离范围。窗口形状会影响校正结果和可用距离的可靠程度,但函数不会只沿多边形的朝向计算距离。
统一两组分析的距离范围
先为两组数据选定共同的最大距离 rmax_common。选择时应考虑较小或较窄的窗口、研究目的,以及所用估计方法对窗口几何形状的限制。下面展示了如何在 K 和 pcf 计算中使用共同范围,具体数值需根据实际数据确定:
rmax_common <- 5 # 示例值;请按窗口尺寸和研究目的选择
r_common <- seq(0, rmax_common, length.out = 513)
K_d1 <- Kest(pp_d1, rmax = rmax_common)
K_d2 <- Kest(pp_d2, rmax = rmax_common)
pcf_d1 <- pcf(pp_d1, r = r_common)
pcf_d2 <- pcf(pp_d2, r = r_common)
示例中的 5 不是推荐值。pcf.ppp 文档指出,显式提供的 r 最大值不能超过窗口直径的一半。如果共同范围超出任一窗口适用的范围,就应缩小。实际可用范围还取决于窗口形状、边界校正和数据量。
如果只想调整图上显示的横轴,可以使用 plot(..., xlim = c(0, rmax_common))。这只改变可见范围。如果原始估计没有覆盖所需距离,还需在计算时设置合适的 rmax 或 r,然后重新计算。
最近邻距离是否也受方向影响
nndist() 这类函数直接计算每个点到最近其他点的欧氏距离,没有 K 或 pcf 曲线那样的 r 轴和默认最大距离。同一组点经过刚性旋转后,这些距离不会改变。不过,Gest() 等最近邻距离分布函数仍会按距离范围汇总,应查看各自的参数和默认范围,不能据此推断所有 spatstat 函数都采用同一规则。
即使统一了 r,两组统计量也不一定能直接比较。还应检查实际观测窗口是否相同、点的抽样设计是否可比,以及边界校正和点密度是否合适。你的代码使用了大小不同的窗口,建议先分别检查窗口面积、外接矩形尺寸和各结果对象中的 r 值,再判断差异来自默认范围,还是数据与采样区域本身。
备注:内容仅供参考。
