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

基于R语言spatstat分析带标记点模式:绿点相对白点的聚集性检验

问题:判断绿点相对白点的聚集性分析方法

我有一份数据集,计划使用R语言的spatstat包进行分析。观测区域为一个多边形,数据的标记为数值型的0和1:标记为0的点(圆形)显示为白色,标记为1的点显示为绿色。我希望分析绿色标记点的分布情况,通过Moran检验或其他量化方法判断其是否存在聚集性。但我的需求是:并非分析绿点相对于整个多边形区域的聚集性,而是判断绿点是否相对白点聚集,请问如何应用Moran检验或其他量化方法完成该分析?

我认为标记为1的点的位置类似事故点呈随机分布,而所有点的位置是固定的(构成多边形),我将其视为观测窗口。

现有代码

x = c(3,0.5,1,0,0,0,2,2.5,5.5, 16,21,26,28,40, 47, 52, 58, 60, 65, 63, 63, 75, 77, 78, 75)
y = c(116,106,82.5,64,40,35,25,17.5,5,5,5,8,10,8, 14, 14, 10, 0, 0, 17, 20, 24, 30, 50, 116)
p <- owin(poly = cbind(x, y))
point_pattern = as.ppp(deviation_binary_locations_marks, p)
marks(point_pattern) <- as.factor(deviation_binary_locations_marks[, "APOD"])
table(marks(point_pattern))
plot(point_pattern,which.marks="APOD", main="Point pattern for gene APOD", chars = c("o","o"), bg = c("white", "green"),pch = 21, size = 0.75, cols = c("black", "green"), leg.side=c("left"))

点模式可视化

点模式可视化图


可行的分析方法

1. 交叉K函数(Cross K-function)

spatstat自带的crossK函数是分析两类点空间关联的标准工具,直接匹配你的需求:

  • 计算K₁₀(r):距离任意白点r范围内的绿点数量期望,用于判断绿点是否倾向于聚集在白点周围
  • 代码示例:
# 分离两类点
green <- subset(point_pattern, marks == 1)
white <- subset(point_pattern, marks == 0)

# 计算交叉K函数,i=1对应绿点,j=0对应白点
cross_k <- crossK(point_pattern, i = 1, j = 0)

# 绘图对比实际值与完全空间随机(CSR)的期望值
plot(cross_k, main = "绿点相对于白点的交叉K函数", xlab = "距离r", ylab = "K₁₀(r)")
  • 解读:若某一距离r处的实际K值显著高于CSR虚线,说明该尺度下绿点相对白点聚集;低于则说明两者相互排斥。

2. 空间自相关分析(Moran's I)

Moran's I可量化二元标记的空间关联,针对你的需求可按以下方式操作:

  • 将所有点的标记(1=绿,0=白)作为变量,计算全局或局部Moran's I,聚焦绿点与周边点的关联
  • 代码示例(需加载spdep包):
library(spdep)

# 提取点坐标和标记变量
coords <- coordinates(point_pattern)
marks_var <- as.integer(marks(point_pattern))

# 构建空间权重矩阵(这里取距离5以内的邻居,可根据实际调整)
neighbors <- dnearneigh(coords, d1 = 0, d2 = 5)
weight <- nb2listw(neighbors, style = "W")

# 全局Moran's I检验,判断整体是否存在聚集
moran.test(marks_var, weight)

# 局部Moran's I,查看每个绿点的局部关联情况
local_moran <- localmoran(marks_var, weight)
green_local_moran <- local_moran[marks_var == 1, ]
  • 解读:局部Moran's I值显著为正的绿点,说明其周边区域绿点占比更高,即相对白点聚集;显著为负则说明周边白点更多。

3. 最近邻距离检验

通过对比绿点到最近白点的实际距离与随机分布下的期望距离,判断绿点是否偏向白点:

  • 代码示例:
# 计算每个绿点到最近白点的距离
actual_dist <- nndist(green, white)

# 生成与绿点数量相同的随机点,计算其到最近白点的距离
random_green <- rpoint(npoints(green), win = p)
random_dist <- nndist(random_green, white)

# Wilcoxon秩和检验,判断实际距离是否显著小于随机期望
wilcox.test(actual_dist, random_dist, alternative = "less")
  • 解读:若检验结果显著(p值<0.05),说明绿点到白点的距离比随机情况更近,即相对白点聚集;反之则是排斥。

关键注意事项

  • 确认观测窗口的准确性:多边形窗口需完全覆盖所有点,后续分析结果才可靠
  • 若白点本身在窗口内分布不均匀,建议使用crossKinhom(非齐次交叉K函数)替代crossK,消除白点分布异质性的影响

内容的提问来源于stack exchange,提问作者MK Huda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 13:15:17