← Back to skills
extension
Category: Data & AnalyticsNo API key required

miloR差异丰度分析-PDAC顶刊复现

miloR差异丰度分析工具方法:Milo对象构建、buildGraph(k=10,d=50)、makeNhoods(refined)、作者式伪样本设计paste(celltype,NI)、testNhoods(model.contrasts)+SpatialFDR<0.3绘图。Invoke when细胞类型丰度在条件间差异检验、Milo邻域分析或nhood参数选择。

personAuthor: user_30836134hubcommunity

作者 (author): LKP kunpeng.liao@abiosciences.com Skill 及脚本参数来源: Chen et al., 2025, Cancer Cell 43, 1656–1676, https://doi.org/10.1016/j.ccell.2025.06.020

miloR 差异丰度分析(Milo)

Milo 在 KNN 图上构建邻域(nhood),用广义线性模型检验条件间细胞丰度差异,适合不重聚群的丰度 DA 分析。

版本

# 论文基线 miloR 1.10.0(不符仅 warning)
packageVersion("miloR")

安装:BiocManager::install("miloR")(清华源:options(BioC_mirror="https://mirrors.tuna.tsinghua.edu.cn/bioconductor"))。

1. 数据准备(每 compartment 独立预处理)

# 注意:Milo 侧 PCA 用 50 维(比主线 30 多),因为 buildGraph 需要 d=50
obj <- NormalizeData(obj) |>
  FindVariableFeatures(selection.method = "vst", nfeatures = 3000) |>
  ScaleData(features = VariableFeatures(obj)) |>
  RunPCA(npcs = 50, seed.use = 2023)

2. Milo 对象与图构建

library(miloR); library(SingleCellExperiment)
sce <- as.SingleCellExperiment(obj)
reducedDim(sce, "PCA") <- Embeddings(obj, "pca")   # 显式注入PCA
milo <- Milo(sce)
milo <- buildGraph(milo, k = 10, d = 50)           # 论文参数:k=10, d=50

3. 邻域采样

# k 值按 compartment 调整:Myeloid=20,CAF=10(细胞密度不同)
milo <- makeNhoods(milo, prop = 1, k = 20, d = 30, refined = TRUE)
# prop=1:每个细胞都可能做种子(充分采样)

4. 伪样本设计与检验(作者式设计)

# 关键设计:伪样本 = celltype × 条件 组合(非真实生物学样本)
meta$Sample <- paste(meta$celltype, meta$NI, sep = "_")
milo <- countCells(milo, meta = meta, samples = "Sample")
# NI 因子水平固定 c("Low","High")
meta$NI <- factor(meta$NI, levels = c("Low", "High"))
design_df <- data.frame(Sample = unique(meta$Sample)) |>
  merge(unique(meta[, c("Sample", "NI")]), by = "Sample")
da <- testNhoods(milo, design = ~ 0 + NI, design.df = design_df,
                 model.contrasts = "NIHigh-NILow",
                 fdr.weighting = "graph-overlap")
milo <- buildNhoodGraph(milo)
milo <- annotateNhoods(milo, coldata_col = "celltype")

敏感性分析:以真实生物样本 ID 作为 Sample 重复 testNhoods,检验伪样本设计的稳健性。

5. 可视化与阈值

# 显著性阈值:SpatialFDR < 0.3(论文口径,比常规0.05宽松)
sig <- da[da$SpatialFDR < 0.3, ]
plotNhoodGraphDA(milo, da_results = da, alpha = 0.3)
plotDA_violin(da)  # 按细胞类型汇总 logFC
# 目标亚群举例:Myeloid 的 M07/M09/M10/M08;CAF 的 F01-F08

常见坑

  1. d 必须与 PCA 维度一致:reducedDim(sce,"PCA") 注入后 buildGraph 才能取到
  2. makeNhoods 的 k 与 buildGraph 的 k 可不同:采样 k 用 compartment 专属值
  3. design.df 必须含 Sample 行且无重复:每伪样本一行
  4. Windows 内存:大图谱 makeNhoods(prop=1) 会产生海量 nhood,建议 future.globals.maxSize 放开
  5. 对照方向:model.contrasts="NIHigh-NILow" 决定 logFC 正负方向,因子水平先固定