单细胞衰老评分¶
一句话概述¶
利用SenMayo、CellAge、p16/p21等衰老相关基因集对单细胞RNA-seq数据进行衰老评分,鉴定衰老细胞(senescent cells)及其在组织微环境中的分布和功能影响。
核心知识点总览¶
| 知识点 | 关键内容 | 重要程度 |
|---|---|---|
| 细胞衰老标志物 | p16/p21/SA-β-gal/SASP基因集 | ⭐⭐⭐⭐⭐ |
| SenMayo基因集 | 125基因的综合衰老打分 | ⭐⭐⭐⭐⭐ |
| CellAge数据库 | 已验证的衰老促进/抑制基因 | ⭐⭐⭐⭐ |
| 打分方法 | AUCell/AddModuleScore/ssGSEA/UCell | ⭐⭐⭐⭐ |
| SASP因子 | 衰老相关分泌表型评估 | ⭐⭐⭐⭐ |
| 衰老与TME | 衰老细胞对肿瘤微环境的影响 | ⭐⭐⭐ |
| 多类型衰老 | OIS/RS/DIS不同诱因的特征 | ⭐⭐⭐ |
| Senolytic靶点 | 衰老清除药物靶标评估 | ⭐⭐⭐ |
各步骤详解¶
第一步:细胞衰老的生物学基础¶
白话解释: 细胞衰老(cellular senescence)是细胞永久退出增殖周期但不死亡的状态。衰老细胞有几个关键特征:表达p16/p21细胞周期抑制因子、分泌大量炎症因子(SASP)、形态变大变扁。它们虽然不分裂了,但通过SASP深刻影响周围细胞和组织微环境。
技术细节: 衰老类型: - 复制性衰老(RS):端粒缩短触发 - 癌基因诱导的衰老(OIS):如RAS突变激活 - DNA损伤诱导的衰老(DIS):化疗/放疗后 - 治疗诱导的衰老(TIS):药物触发
核心分子标志: - 细胞周期停滞:CDKN2A(p16), CDKN1A(p21), TP53, RB1 - SASP:IL6, IL8(CXCL8), CCL2, MMP3, IGFBP7, SERPINE1 - 抗凋亡:BCL2, BCL-XL(BCL2L1) - DNA损伤反应:γH2AX(H2AFX), 53BP1(TP53BP1)
# 衰老标志物基因集定义
senescence_markers <- list(
cell_cycle_arrest = c("CDKN2A", "CDKN1A", "CDKN2B", "TP53", "RB1"),
SASP_core = c("IL6", "CXCL8", "CCL2", "MMP3", "MMP1", "IGFBP7",
"SERPINE1", "IL1A", "IL1B", "CXCL1", "CXCL2"),
anti_apoptosis = c("BCL2", "BCL2L1", "MCL1", "BIRC5"),
DDR = c("H2AFX", "TP53BP1", "ATM", "ATR", "CHEK1", "CHEK2")
)
第二步:衰老基因集资源¶
白话解释: 多个已发表的基因集可用于衰老评分。最常用的是SenMayo(2022年发表,125个基因,基于转录组meta分析)、CellAge数据库(经实验验证的衰老基因列表)和各种SASP基因集。
技术细节:
# === 衰老基因集加载 ===
# 1. SenMayo基因集(Saul et al., 2022, Nature Communications)
# 125个在多种衰老模型中一致上调的基因(原文125个,此处去除重复别名PIGF/PGF后为124个)
senmayo_genes <- c(
"ACVR1B", "ANG", "ANGPT1", "ANGPTL4", "AREG", "AXL", "BEX3",
"BMP2", "BMP6", "C3", "CCL1", "CCL13", "CCL16", "CCL2", "CCL20",
"CCL24", "CCL26", "CCL3", "CCL3L1", "CCL4", "CCL5", "CCL7", "CCL8",
"CD55", "CD9", "CSF1", "CSF2", "CSF2RB", "CST4", "CTSB", "CTSD",
"CXCL1", "CXCL10", "CXCL12", "CXCL13", "CXCL14", "CXCL16", "CXCL2",
"CXCL3", "CXCL8", "DKK1", "EDN1", "EGF", "EGFR", "EREG", "ESM1",
"ETS2", "FAS", "FGF1", "FGF2", "FGF7", "GDF15", "GEM", "GMFG",
"HGF", "HMGB1", "ICAM1", "ICAM3", "IGF1", "IGFBP1", "IGFBP2",
"IGFBP3", "IGFBP4", "IGFBP5", "IGFBP6", "IGFBP7", "IL10", "IL13",
"IL15", "IL18", "IL1A", "IL1B", "IL2", "IL32", "IL6", "IL6ST",
"IL7", "INHA", "INHBA", "IQGAP2", "ITGA2", "ITPKA", "JUN", "KITLG",
"LCP1", "MIF", "MMP1", "MMP10", "MMP12", "MMP13", "MMP14", "MMP2",
"MMP3", "MMP9", "NAP1L4", "NRG1", "PAPPA", "PECAM1", "PGF",
"PLAUR", "PLAT", "PLAU", "PTBP1", "PTGES", "RPS6KA5",
"SCAMP4", "SELPLG", "SEMA3F", "SERPINE1", "SERPINE2", "SERPINB2",
"SPP1", "SPX", "TIMP2", "TNF", "TNFRSF10C", "TNFRSF11B",
"TNFRSF1A", "TNFRSF1B", "TUBGCP2", "VEGFA", "VEGFC", "VGF", "WNT16"
)
# 2. CellAge数据库(genomics.senescence.info/cells)
# 下载并筛选
cellage_genes <- read.csv("cellage_genes.csv")
cellage_promote <- cellage_genes$gene[cellage_genes$type == "promotes_senescence"]
cellage_inhibit <- cellage_genes$gene[cellage_genes$type == "inhibits_senescence"]
# 3. p16/p21核心衰老通路基因
p16_p21_pathway <- c("CDKN2A", "CDKN1A", "TP53", "MDM2", "RB1",
"E2F1", "CCND1", "CDK4", "CDK6", "CCNE1")
第三步:单细胞衰老评分方法¶
白话解释: 给每个单细胞计算一个"衰老分数",反映该细胞表达衰老相关基因的程度。就像给学生打分一样——衰老基因表达越高,分数越高,该细胞越可能处于衰老状态。常用方法有Seurat的AddModuleScore、AUCell、UCell等。
技术细节:
# === 衰老评分方法 ===
library(Seurat)
library(UCell)
library(AUCell)
# 方法1:Seurat AddModuleScore
seurat_obj <- AddModuleScore(
seurat_obj,
features = list(SenMayo = senmayo_genes),
name = "SenMayo_Score"
)
# 结果存在 seurat_obj$SenMayo_Score1
# 方法2:UCell(更鲁棒,基于排名)
signatures <- list(
SenMayo = senmayo_genes,
SASP = senescence_markers$SASP_core,
CellCycleArrest = senescence_markers$cell_cycle_arrest
)
seurat_obj <- AddModuleScore_UCell(seurat_obj, features = signatures)
# 结果存在 seurat_obj$SenMayo_UCell 等
# 方法3:AUCell
# 更适合稀疏单细胞数据
expr_matrix <- GetAssayData(seurat_obj, slot = "data")
cells_rankings <- AUCell_buildRankings(expr_matrix, nCores = 8)
cells_AUC <- AUCell_calcAUC(signatures, cells_rankings, aucMaxRank = 500)
auc_scores <- getAUC(cells_AUC)
seurat_obj$SenMayo_AUCell <- auc_scores["SenMayo", ]
# 方法4:ssGSEA (GSVA包)
# 注意:GSVA >= 1.50 已废弃旧API,需使用ssgseaParam()新接口
library(GSVA)
ssgsea_param <- ssgseaParam(as.matrix(expr_matrix), signatures)
ssgsea_scores <- gsva(ssgsea_param)
seurat_obj$SenMayo_ssGSEA <- ssgsea_scores["SenMayo", colnames(seurat_obj)]
# 可视化衰老评分
FeaturePlot(seurat_obj, features = "SenMayo_Score1",
cols = c("lightgrey", "red"), min.cutoff = "q10")
VlnPlot(seurat_obj, features = "SenMayo_Score1", group.by = "celltype")
第四步:鉴定衰老细胞¶
白话解释: 评分之后,需要设定阈值来判断哪些细胞是"衰老的"。可以用统计方法(如高于均值+2SD),也可以结合多个指标(如SenMayo高 + p21高 + 增殖标志物低)进行综合判断。
技术细节:
# === 衰老细胞鉴定 ===
# 策略1:单一评分阈值
threshold <- mean(seurat_obj$SenMayo_Score1) + 2 * sd(seurat_obj$SenMayo_Score1)
seurat_obj$is_senescent <- seurat_obj$SenMayo_Score1 > threshold
# 策略2:多指标综合判断
# 衰老细胞应该:SenMayo高 + 增殖低 + p21高
seurat_obj <- CellCycleScoring(seurat_obj, s.features = cc.genes$s.genes,
g2m.features = cc.genes$g2m.genes)
seurat_obj$proliferation_score <- seurat_obj$S.Score + seurat_obj$G2M.Score
# 综合条件
seurat_obj$senescent_multi <- (
seurat_obj$SenMayo_Score1 > quantile(seurat_obj$SenMayo_Score1, 0.9) &
seurat_obj$proliferation_score < quantile(seurat_obj$proliferation_score, 0.25) &
GetAssayData(seurat_obj, layer = "data")["CDKN1A", ] > 0.5 # p21表达阳性(Seurat v5用layer参数)
)
# 统计各细胞类型的衰老比例
senescent_prop <- seurat_obj@meta.data %>%
group_by(celltype) %>%
summarise(
n_total = n(),
n_senescent = sum(senescent_multi),
pct_senescent = n_senescent / n_total * 100
) %>%
arrange(desc(pct_senescent))
print(senescent_prop)
# 可视化
DimPlot(seurat_obj, group.by = "senescent_multi",
cols = c("grey90", "red"), order = TRUE)
第五步:SASP评估与微环境影响¶
白话解释: 衰老细胞最重要的功能影响是通过SASP(衰老相关分泌表型)——分泌大量炎症因子、趋化因子和基质金属蛋白酶。评估SASP可以预测衰老细胞对周围组织微环境的影响。
技术细节:
# === SASP分析 ===
# SASP评分
sasp_genes <- c("IL6", "CXCL8", "CCL2", "MMP3", "MMP1", "IGFBP7",
"SERPINE1", "IL1A", "IL1B", "CXCL1", "CXCL2", "CXCL3",
"TNF", "CSF2", "GDF15", "VEGFA", "HGF", "FGF2")
seurat_obj <- AddModuleScore(seurat_obj, features = list(SASP = sasp_genes),
name = "SASP_Score")
# 比较衰老vs非衰老细胞的SASP
VlnPlot(seurat_obj, features = "SASP_Score1",
group.by = "is_senescent", cols = c("grey", "red"))
wilcox.test(seurat_obj$SASP_Score1[seurat_obj$is_senescent],
seurat_obj$SASP_Score1[!seurat_obj$is_senescent])
# 衰老细胞与免疫细胞的通讯分析(结合CellChat)
# 衰老细胞的SASP因子作为配体,免疫细胞上的受体
# 参见123_单细胞细胞通讯分析.md
# === 衰老细胞的细胞类型特征 ===
# 不同细胞类型的衰老表现不同
# 找衰老细胞vs同类型非衰老细胞的差异基因
senescent_de <- list()
for (ct in unique(seurat_obj$celltype)) {
ct_cells <- subset(seurat_obj, celltype == ct)
if (sum(ct_cells$is_senescent) < 10) next
Idents(ct_cells) <- "is_senescent"
markers <- FindMarkers(ct_cells, ident.1 = TRUE, ident.2 = FALSE,
min.pct = 0.1, logfc.threshold = 0.25)
senescent_de[[ct]] <- markers
}
第六步:与临床表型和预后关联¶
白话解释: 衰老细胞的丰度与肿瘤患者的预后、治疗反应可能相关。可以将单细胞衰老评分汇总到bulk水平(使用反卷积或平均评分),然后与TCGA等大队列的临床数据做关联分析。
技术细节:
# === 衰老评分与临床关联(Bulk RNA-seq层面)===
library(GSVA)
library(survival)
# 对TCGA bulk数据计算衰老评分
tcga_expr <- read.csv("TCGA_BRCA_tpm.csv", row.names = 1)
tcga_clinical <- read.csv("TCGA_BRCA_clinical.csv")
# ssGSEA打分(GSVA >= 1.50 新API)
ssgsea_param <- ssgseaParam(as.matrix(log2(tcga_expr + 1)),
list(SenMayo = senmayo_genes))
tcga_scores <- gsva(ssgsea_param)
tcga_clinical$senmayo_score <- tcga_scores["SenMayo", tcga_clinical$sample_id]
# 生存分析
tcga_clinical$sen_group <- ifelse(tcga_clinical$senmayo_score >
median(tcga_clinical$senmayo_score),
"High_Senescence", "Low_Senescence")
fit <- survfit(Surv(OS_time, OS_status) ~ sen_group, data = tcga_clinical)
ggsurvplot(fit, data = tcga_clinical, pval = TRUE, risk.table = TRUE,
title = "SenMayo Score and Overall Survival")
# Cox回归
cox_fit <- coxph(Surv(OS_time, OS_status) ~ senmayo_score + age + stage,
data = tcga_clinical)
summary(cox_fit)
第七步:Senolytic药物靶点评估¶
白话解释: Senolytic药物专门杀死衰老细胞(如Dasatinib+Quercetin, Navitoclax/ABT-263, Fisetin)。通过分析衰老细胞中抗凋亡基因(BCL2家族)和其他Senolytic靶点的表达,可以预测哪种Senolytic药物对特定衰老细胞群体最有效。
技术细节:
# === Senolytic靶点分析 ===
# Senolytic药物靶点基因
senolytic_targets <- list(
Navitoclax_ABT263 = c("BCL2", "BCL2L1", "BCL2L2"), # BCL-2/BCL-xL抑制
Dasatinib = c("SRC", "EFNB1", "EFNB3"), # 酪氨酸激酶
Quercetin = c("PIK3CA", "PIK3CB", "SERPINE1"), # PI3K/PAI-1
Fisetin = c("BCL2L1", "MCL1", "CCND1"), # 多靶点
FOXO4_DRI = c("FOXO4", "TP53") # FOXO4-p53互作
)
# 评估各靶点在衰老细胞中的表达
senescent_cells <- subset(seurat_obj, is_senescent == TRUE)
nonsenescent_cells <- subset(seurat_obj, is_senescent == FALSE)
for (drug in names(senolytic_targets)) {
targets <- senolytic_targets[[drug]]
targets_present <- targets[targets %in% rownames(seurat_obj)]
sen_expr <- rowMeans(GetAssayData(senescent_cells)[targets_present, ])
nonsen_expr <- rowMeans(GetAssayData(nonsenescent_cells)[targets_present, ])
cat(sprintf("%s targets - Senescent: %.3f, Non-senescent: %.3f, Ratio: %.2f\n",
drug, mean(sen_expr), mean(nonsen_expr), mean(sen_expr)/mean(nonsen_expr)))
}
实战命令速查¶
# 快速衰老评分
library(Seurat); library(UCell)
seurat_obj <- AddModuleScore_UCell(seurat_obj, features=list(SenMayo=senmayo_genes))
FeaturePlot(seurat_obj, "SenMayo_UCell", cols=c("grey","red"))
VlnPlot(seurat_obj, "SenMayo_UCell", group.by="celltype")
面试常问点¶
Q1: 为什么不能只用p16或p21来标记衰老细胞?¶
A: p16(CDKN2A)和p21(CDKN1A)虽是经典衰老标志,但不足以单独定义衰老:(1) p21在DNA损伤修复中也短暂上调(非衰老状态);(2) p16在某些衰老类型中不高表达(如OIS早期主要依赖p21);(3) 这些基因在scRNA-seq中检测率低(dropout)。需要多基因集(如SenMayo 125基因)综合评分才更可靠。
Q2: AddModuleScore和AUCell/UCell的区别?¶
A: AddModuleScore计算基因集平均表达减去随机背景基因均值,受高表达基因主导。AUCell基于AUC(Area Under Curve of recovery curve),考虑排名信息,对dropout更鲁棒。UCell类似AUCell但使用Mann-Whitney U统计量,计算更快。稀疏单细胞数据推荐AUCell/UCell。
Q3: 衰老细胞在肿瘤微环境中是促癌还是抑癌?¶
A: 双面作用:(1) 抑癌面——衰老是阻止受损细胞增殖的保护机制(如OIS阻止癌前病变进展);(2) 促癌面——SASP中的炎症因子促进慢性炎症、血管生成、免疫抑制,加速肿瘤进展。效果取决于衰老细胞的比例、持续时间和SASP组分。短暂衰老保护性,慢性积累促癌。
Q4: 如何验证scRNA-seq推断的衰老细胞?¶
A: (1) SA-β-gal染色(组织学验证);(2) p16/p21免疫组化确认蛋白水平表达;(3) γH2AX foci检测DNA损伤灶;(4) BrdU/Ki67确认增殖停滞;(5) SASP因子的ELISA/蛋白芯片验证。单细胞水平可用FISH+IHC联合验证。
Q5: 不同衰老诱因(OIS/RS/DIS)的转录特征有何区别?¶
A: 虽有共同核心特征(p21上调、增殖基因下调),但SASP组分差异大:OIS的SASP偏炎症(IL6/IL8为主),RS偏ECM重塑(IGFBP/MMP),DIS强调DDR信号(γH2AX高)。SenMayo虽是综合集,某些特定衰老类型的基因可能不在其中。对特定研究可选择诱因特异的基因集。
易错点¶
1. 将增殖暂停与真正衰老混淆¶
静息(quiescence/G0)和衰老都是不增殖的,但静息可逆、衰老不可逆。仅凭增殖标志物低不能确认衰老,需要同时有SASP和DDR标志。
2. 过度依赖单一基因集¶
SenMayo虽广泛使用,但其衍生自成纤维细胞为主的体外实验。对上皮细胞、免疫细胞等特定类型的衰老,可能需要补充组织特异性基因集。
3. dropout导致p16/p21检测不到¶
CDKN2A和CDKN1A在scRNA-seq中检测率很低(高dropout),这不代表细胞不衰老。应使用多基因打分代替单基因检测。
4. 混淆SASP基因的来源¶
SASP因子(如IL6, CCL2)也可由活化的免疫细胞高表达。不能仅凭SASP基因高就判断为衰老——需要在同一细胞中同时看到衰老诱导(p21/p53)和SASP。
5. 阈值设定的任意性¶
没有一个"正确"的衰老评分阈值。建议:(1) 报告敏感性分析;(2) 结合多个指标;(3) 与组织学验证对照;(4) 使用连续评分而非二元分类做下游关联分析。
补充知识¶
衰老相关数据库¶
- CellAge (genomics.senescence.info/cells):实验验证的衰老基因
- SeneQuest:衰老基因集和通路
- HAGR(Human Ageing Genomic Resources):衰老基因组资源
衰老研究热点方向¶
- 衰老细胞图谱(Senescence Cell Atlas)
- 空间转录组定位衰老细胞
- 衰老细胞与免疫清除(immunosurveillance)
- Senolytic临床试验的生物标志物
引用推荐¶
- SenMayo: Saul et al., Nature Communications, 2022
- CellAge: Avelar et al., Genome Biology, 2020
- Senescence review: Gorgoulis et al., Cell, 2019
- SASP: Coppé et al., PLoS Biology, 2008