← 返回分析流程中心创建时间 2026/6/3 分析难度 中级 推荐场景 免疫微环境 预计耗时 1-3 天
Pipeline Detail
Immunogenomics机制解释与多组学调控
免疫浸润分析 CIBERSORT/xCell/ESTIMATE
基于 bulk RNA-seq 表达矩阵估计免疫细胞浸润和肿瘤微环境状态,覆盖 CIBERSORT/xCell/MCP-counter/ESTIMATE 多方法比较和可视化解释。
Metadata
流程元数据
先看应用场景、输入输出和工具依赖,再进入正文命令细节。
Difficulty
中级
Scenario
免疫微环境
Estimated Time
1-3 天
Tools
GSVACIBERSORTxCellESTIMATE
Inputs
TPMexpression matrix
Outputs
heatmapimmune scorereport
Workflow DAG
流程图
用步骤节点快速理解这个分析从原始数据到结果报告的流转关系。
STEP 1
→建立免疫浸润项目
STEP 2
→TPM 表达矩阵
STEP 3
→选择 CIBERSORT/xCell/ESTIMATE
STEP 4
→细胞比例/分数估计
STEP 5
→组间比较
STEP 6
→与基因/通路相关
STEP 7
→堆叠图/热图/箱线图
STEP 8
免疫微环境报告
Protocol
流程文档
正文保留 Markdown 排版、代码语言标识和表格样式,适合边学边复现。
免疫浸润分析 CIBERSORT/xCell/ESTIMATE
一、项目目录
mkdir -p immune_infiltration_project/{00_input,01_deconvolution,02_statistics,03_plots,report}
二、示例数据
免疫浸润通常使用 gene symbol 行名、样本列名的 TPM 矩阵。
00_input/tpm_matrix.csv:
gene_symbol,Tumor_1,Tumor_2,Normal_1,Normal_2
CD3D,20.1,18.4,5.2,4.9
MS4A1,4.2,3.8,2.1,2.0
LYZ,30.2,35.1,12.5,13.1
00_input/sample_info.csv:
sample_id,group
Tumor_1,Tumor
Tumor_2,Tumor
Normal_1,Normal
Normal_2,Normal
三、整体流程图
flowchart TD
A[TPM expression matrix] --> B[gene symbol cleanup]
B --> C[CIBERSORT / xCell / MCP-counter / ESTIMATE]
C --> D[cell fraction or immune score matrix]
D --> E[group comparison]
D --> F[correlation with genes/pathways]
E --> G[boxplot / stacked bar / heatmap]
F --> G
G --> H[TME interpretation report]
四、immunedeconv 多方法分析
library(immunedeconv)
library(tidyverse)
expr <- read.csv("00_input/tpm_matrix.csv", row.names = 1, check.names = FALSE)
expr <- as.matrix(expr)
res_xcell <- deconvolute(expr, method = "xcell", arrays = FALSE)
res_mcp <- deconvolute(expr, method = "mcp_counter")
res_estimate <- deconvolute(expr, method = "estimate")
write.csv(res_xcell, "01_deconvolution/xcell_scores.csv", row.names = FALSE)
write.csv(res_mcp, "01_deconvolution/mcp_counter_scores.csv", row.names = FALSE)
write.csv(res_estimate, "01_deconvolution/estimate_scores.csv", row.names = FALSE)
CIBERSORT/CIBERSORTx 可使用官方 web 或本地授权脚本。输入通常是 TPM,不建议使用 log 转换矩阵。
五、组间比较
scores <- read.csv("01_deconvolution/xcell_scores.csv")
sample_info <- read.csv("00_input/sample_info.csv")
score_long <- scores |>
pivot_longer(-cell_type, names_to = "sample_id", values_to = "score") |>
left_join(sample_info, by = "sample_id")
stat <- score_long |>
group_by(cell_type) |>
summarise(
pvalue = wilcox.test(score[group == "Tumor"], score[group == "Normal"])$p.value,
mean_tumor = mean(score[group == "Tumor"]),
mean_normal = mean(score[group == "Normal"]),
.groups = "drop"
) |>
mutate(padj = p.adjust(pvalue, method = "BH"))
write.csv(stat, "02_statistics/xcell_group_comparison.csv", row.names = FALSE)
六、可视化
library(ggplot2)
ggplot(score_long |> filter(cell_type %in% c("CD8+ T-cells", "Macrophages", "B-cells")),
aes(group, score, fill = group)) +
geom_boxplot(width = 0.5, outlier.shape = NA) +
geom_jitter(width = 0.08, size = 2) +
facet_wrap(~ cell_type, scales = "free_y") +
theme_bw()
ggsave("03_plots/immune_cell_boxplot.pdf", width = 9, height = 5)
堆叠图:
fraction <- score_long |>
group_by(sample_id) |>
mutate(prop = score / sum(score)) |>
ungroup()
ggplot(fraction, aes(sample_id, prop, fill = cell_type)) +
geom_col(width = 0.8) +
theme_bw() +
labs(x = "Sample", y = "Relative proportion")
七、与基因或通路相关
gene <- "PDCD1"
gene_expr <- expr[gene, ]
cor_df <- score_long |>
group_by(cell_type) |>
summarise(
cor = cor(score, gene_expr[sample_id], method = "spearman"),
pvalue = cor.test(score, gene_expr[sample_id], method = "spearman")$p.value,
.groups = "drop"
) |>
mutate(padj = p.adjust(pvalue, method = "BH"))
八、结果解释示例
Tumor 组 macrophage score 升高,同时 ESTIMATE immune score 升高。
CD8 T cell score 与 PDCD1 表达正相关,提示存在 T cell exhaustion 相关免疫状态。
如果与 GSVA 的 interferon response 分数一致升高,可以增强免疫激活解释。
九、注意事项
- CIBERSORT 输出是相对比例,总和通常为 1。
- xCell/MCP-counter 更偏 enrichment score,不一定能解释为绝对比例。
- 肿瘤组织细胞状态复杂,最好结合 scRNA-seq 或空间数据验证。
- 不同算法结果可能不完全一致,应看趋势一致的细胞类型。
十、交付物
- immune cell score/fraction matrix
- ESTIMATE immune/stromal score
- 组间比较统计表
- 细胞比例堆叠图
- 免疫细胞箱线图
- immune score 与基因/通路相关图
- 肿瘤微环境解释报告