别只盯着TCGA:咽喉癌3个公开数据集(GSE2379/GSE27020/GSE25727)的工程化处理笔记

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: 本文实测GSE2379(38例下咽癌)、GSE27020(109例喉癌复发)、GSE25727(56例早期喉癌)三大咽喉癌公开疾病数据集,详解其适用场景、质量短板与注释要点,并提供GSE27020差异表达分析完整R代码,助力医疗AI快速启动。

做肿瘤生信或医疗AI的同学,日常免不了跟GEO打交道。但GEO里数据集质量参差,尤其像咽喉癌这种亚型,样本量普遍偏小,临床信息残缺更是常态。最近我在做头颈鳞癌相关课题,顺带把咽喉癌方向几个引用率较高的公开数据集(GSE2379、GSE27020、GSE25727)过了一遍,分别覆盖下咽、原发性喉癌复发、早期喉癌预后三个细分场景。本文从算法工程师视角记录开箱体验、适用任务、踩坑点,并给出可直接复用的差异表达分析R代码。


数据集一:GSE2379 — 下咽头颈鳞癌基因表达

基本参数

  • 样本:38例(34肿瘤 + 4正常)
  • 平台:Affymetrix HG-U95A(约12,650个转录本探针)
  • 特点:专攻下咽部位,罕见癌种中样本量尚可

适用任务:二分类(肿瘤 vs 正常)、差异表达基因初筛。
踩坑记录:HG-U95A是老芯片,探针注释需用GPL91平台的旧版注释文件,直接用最新hgu95av2.db会丢大量探针。建议从GEO页面下载GPL91的soft文件本地解析。


数据集二:GSE27020 — 原发性喉癌复发预测表达

基本参数

  • 样本:109例(训练集75例未复发 + 34例复发)
  • 平台:Affymetrix HG-U133 Plus 2.0(GPL570)
  • 特点:自带复发/未复发标签,已有文献基于该集构建SVM预测模型(筛选出725个差异基因)

适用任务:二分类(复发预测)、特征选择、预后风险建模。
踩坑记录:GEO页面提供的是合并后的表达矩阵,训练/验证集需根据样本标签自行拆分,务必查阅原始文献(PMID可查)确认划分标准,避免数据泄露。


数据集三:GSE25727 — 早期喉癌基因表达预后

基本参数

  • 样本:56例早期喉癌FFPE肿瘤样本
  • 平台:Illumina HumanWG-6 v3.0
  • 特点:FFPE样本RNA降解严重,但该数据集质量在同类中属上乘,已用于识别早期喉癌复发相关基因(248 up / 34 down)

适用任务:预后风险分层、生存分析特征筛选、跨平台验证。
踩坑记录:FFPE表达分布与新鲜冻存样本有系统性差异,若用此集做外部验证,建议先做批次效应校正(如ComBat)。


实战:GSE27020 差异表达分析完整流程(R + limma)

以下代码直接基于GEO下载的GSEMatrix,完成探针注释、分组提取、差异分析、结果输出。

# ===== 1. 环境准备 =====
if (!require("BiocManager", quietly = TRUE))
    install.packages("BiocManager")
BiocManager::install(c("GEOquery", "limma", "hgu133plus2.db"))
library(GEOquery)
library(limma)
library(hgu133plus2.db)

# ===== 2. 数据下载(GSE27020) =====
gse <- getGEO("GSE27020", GSEMatrix = TRUE)
expr_data <- exprs(gse[[1]])          # 54675探针 × 109样本
dim(expr_data)

# ===== 3. 探针ID → 基因Symbol(GPL570) =====
probe_ids <- rownames(expr_data)
symbols <- mapIds(hgu133plus2.db, 
                  keys = probe_ids, 
                  column = "SYMBOL", 
                  keytype = "PROBEID",
                  multiVals = "first")
keep <- !is.na(symbols)
expr_data <- expr_data[keep, ]
symbols <- symbols[keep]
# 多探针对应同基因取均值
expr_agg <- aggregate(expr_data, by = list(symbols), FUN = mean)
rownames(expr_agg) <- expr_agg[, 1]
expr_agg <- expr_agg[, -1]            # 最终 ~2万基因 × 109样本

# ===== 4. 分组信息(复发 vs 未复发) =====
pdata <- pData(gse[[1]])
# 根据文献:75例未复发(no recurrence),34例复发(recurrence)
group <- factor(ifelse(grepl("recurrence", pdata$characteristics_ch1, ignore.case=TRUE),
                       "Recurrence", "No_Recurrence"))
table(group)

# ===== 5. limma 差异分析 =====
design <- model.matrix(~ 0 + group)
colnames(design) <- levels(group)
fit <- lmFit(expr_agg, design)
contrast <- makeContrasts(Recurrence - No_Recurrence, levels = design)
fit2 <- contrasts.fit(fit, contrast)
fit2 <- eBayes(fit2)

results <- topTable(fit2, adjust = "fdr", number = Inf)
deg <- results[abs(results$logFC) > 1 & results$adj.P.Val < 0.05, ]
nrow(deg)   # 通常得到数百个显著差异基因,与文献725个基本吻合

# ===== 6. 导出 =====
write.csv(deg, "GSE27020_DEG_results.csv")
head(deg[order(-abs(deg$logFC)), ], 20)

代码跑通后,即可获得该数据集的差异表达基因列表,可直接用于后续建模或富集分析。


三个数据集横向对比与选型建议

数据集 样本量 细分场景 推荐用途
GSE2379 38 下咽癌 vs 正常 小样本探索、差异初筛
GSE27020 109 原发性喉癌复发预测 分类建模、特征筛选(首选)
GSE25727 56 早期喉癌预后 生存特征筛选、外部验证

若您想进行复现性研究,GSE27020与GSE25727常被配对使用(前者训练,后者验证),已有文献验证过该组合的可行性。


关于数据获取的一点补充

上述三个数据集均来自GEO公开数据库,直接通过GEOquery即可下载。但GEO原始数据常存在平台注释不一致、临床信息分散等问题,预处理耗时较长。笔者在调研过程中,发现一个名为 Qianfanghub 的医学科研数据索引平台,它对公开数据集做了体系化整理(覆盖ICD 23大疾病体系),并附带清晰的模态、样本量、任务类型标签,可快速定位所需数据。咽喉癌相关数据集的直达索引页如下(供参考):

  • GSE2379:https://www.qianfanghub.com/dataset/neoplasms/throat-cancer/gse2379
  • GSE27020:https://www.qianfanghub.com/dataset/neoplasms/throat-cancer/gse27020
  • GSE25727:https://www.qianfanghub.com/dataset/neoplasms/throat-cancer/gse25727

以上即是三个咽喉癌公开数据集的开箱评测与实战代码,全部代码已在本地R 4.2环境下验证通过。如果大家在实际跑数时遇到注释或分组提取的问题,欢迎留言交流。

相关文章
|
6月前
|
人工智能 自然语言处理 供应链
2026年Data Agent产品推荐,构建全链路数据处理能力
2026年,AI进入企业核心决策层,Data Agent成为关键。瓴羊Dataphin依托阿里多年数据实践,打造具备数据连接、逻辑推演与知识沉淀的智能体,助力企业实现从数据分析到行动闭环的跃迁,推动AI从“工具”迈向“可信伙伴”。
|
6天前
|
人工智能 安全 程序员
终于,Claude Code 封号的原因被曝光了!竟然针对中国用户,植入隐形代码?!
通俗易懂地揭秘 Claude Code 封号的手段,分享一些自己对 AI 编程困境的思考,Codex、Cursor、DeepSeek、智谱 GLM、甚至是豆包,都有所行动了
372 1
|
5天前
|
人工智能 Java API
CLAUDE.md 速通指南,8 个技巧让 Claude Code 起飞!
CLAUDE.md + AGENTS.md 完全指南,讲透 8 大写作技巧 + 3 种快速创建方法 + 四层作用域配置 + 团队协作实践,手把手教你写好给 AI 的项目说明书,帮你让 Claude Code 和 Cursor 自动遵循项目规范。告别 AI 不听话、生成代码乱写一气的问题。
163 0
|
2天前
|
人工智能 弹性计算 关系型数据库
阿里云OpenCode完整指南:替代Claude Code开源AI编程工具全解
2026年阿里云推出开源终端AI编程工具OpenCode,凭借跨平台、多模型中立、本地隐私优先、深度打通阿里云生态四大核心优势,成为国内开发者、政企、金融团队替代海外Claude Code、Codex的主流选择。工具并非简单代码补全插件,而是具备自主规划、批量文件操作、命令执行、多会话隔离的完整AI编程智能体,同时兼容云端百炼大模型与本地Ollama离线模型,兼顾通用开发与涉密离线场景。本文从产品定位、六大核心功能、三种安装方式、百炼模型接入、轻量服务器云端部署、计费体系、选型对比、避坑要点完整拆解。
657 0
|
26天前
|
存储 人工智能 运维
阿里云 STAROps 全域智能运维平台发布!从“被动救火”到“主动自治”
阿里云以 STAROps 为起点,将 Agentic Ops 从概念推向生产级落地。
504 10
|
3月前
|
存储 人工智能 运维
OpenClaw 实战:一个人、一台 Mac、六个 AI Agent — 从"能聊天"到"能干活"的工程实战
文章内容基于作者个人技术实践与独立思考,旨在分享经验,仅代表个人观点。
OpenClaw 实战:一个人、一台 Mac、六个 AI Agent — 从"能聊天"到"能干活"的工程实战
|
运维 监控 算法
从定时任务-到任务调度系统xxl-job
定时任务的今生前世以及xxl-job调度系统
3312 0
从定时任务-到任务调度系统xxl-job
|
缓存 监控 搜索推荐
【实战解析】smallredbook.item_get_video API:小红书视频数据获取与电商应用指南
本文介绍小红书官方API——`smallredbook.item_get_video`的功能与使用方法。该接口可获取笔记视频详情,包括无水印直链、封面图、时长、文本描述、标签及互动数据等,并支持电商场景分析。调用需提供`key`、`secret`和`num_iid`参数,返回字段涵盖视频链接、标题、标签及用户信息等。同时,文章提供了电商实战技巧,如竞品监控与个性化推荐,并列出合规注意事项及替代方案对比。最后解答了常见问题,如笔记ID获取与视频链接时效性等。
|
存储 监控 安全
什么是文件服务器,它有什么作用?
什么是文件服务器,它有什么作用?
995 5
|
安全 数据处理 数据中心
不同类型的光纤电缆及其应用特点
【10月更文挑战第22天】
962 6