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

如何用R spatstat包验证显微镜图像两类细胞共定位的显著性

两类细胞共定位显著性蒙特卡洛检验实现(R spatstat)

你已完成的点模式可视化结果如下:
数据可视化结果
其中mypattern为第一类细胞的点模式,mypattern2为第二类细胞的点模式,L函数结果已提示存在聚类特征,以下是基于最近邻距离的蒙特卡洛显著性检验实现逻辑与代码:


核心逻辑

零假设为两类细胞的空间分布相互独立,即不存在显著的靠近/远离关联。通过多次模拟满足零假设的随机点模式,计算随机场景下两类细胞的最近邻距离分布,再将实际观测的距离与该分布对比,计算显著性p值。


手动实现蒙特卡洛检验

步骤1:计算实际观测的最近邻距离

# 计算第一类细胞到第二类细胞的最近邻距离
obs_dist <- nncross(mypattern, mypattern2, what = "dist")
# 选择统计量,此处用平均距离,也可替换为中位数、分位数等
obs_mean <- mean(obs_dist)

如果需要修正边界效应,可在nncross中添加参数correct = "border"

步骤2:模拟零假设下的距离分布

# 设置模拟次数,精度要求高可调整为9999次
nsim <- 999
sim_means <- numeric(nsim)

for (i in 1:nsim) {
  # 生成与第二类细胞数量相同、同观测窗口的完全随机点
  # 若第二类细胞本身存在已知的聚类规律,可替换为对应点过程模型的模拟结果
  random_pattern2 <- rpoint(n = mypattern2$n, win = Window(mypattern))
  # 计算模拟场景下的最近邻平均距离
  sim_dist <- nncross(mypattern, random_pattern2, what = "dist")
  sim_means[i] <- mean(sim_dist)
}

如果细胞仅能分布在组织内的特定区域,需将rpoint的win参数替换为实际有效组织的窗口对象

步骤3:计算显著性p值

# 单侧检验(验证两类细胞是否显著靠近):观测平均距离小于等于模拟值的占比
p_value <- (sum(sim_means <= obs_mean) + 1) / (nsim + 1)
# 双侧检验(验证是否存在显著关联,不管靠近还是远离):
# p_value <- 2 * min(sum(sim_means <= obs_mean), sum(sim_means >= obs_mean)) / (nsim + 1)

通常p<0.05即可认为存在统计学显著的关联

步骤4:结果可视化(可选)

hist(sim_means, col = "lightgray", main = "零假设下平均最近邻距离分布", xlab = "平均距离")
abline(v = obs_mean, col = "red", lwd = 2, lty = 2)
text(obs_mean, max(hist(sim_means, plot = F)$counts)*0.9, 
     labels = paste0("观测值\np = ", round(p_value,3)), col = "red", pos = 2)

简化实现方案

spatstat内置的envelope函数可直接生成双变量关联的蒙特卡洛包络,无需手动写循环:

# 合并两个点模式为带标记的点模式
combined <- superimpose(type1 = mypattern, type2 = mypattern2)
# 生成双变量最近邻距离的95%置信包络
env <- envelope(combined, fun = nndist, i = "type1", j = "type2", nsim = 999)
# 绘图查看结果,若观测曲线落在包络外则存在显著关联
plot(env)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:09:01