ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

用kmplot快速完成生存分析:肿瘤生信在线工具全攻略

用kmplot快速完成生存分析:肿瘤生信在线工具全攻略 过去几年在肿瘤生信里摸爬滚打如果说有一个工具我逢人就推荐kmplot绝对排前三。生存分析作为预后研究的核心环节很多人第一反应是R包survival、是Cox回归、是那张三线表但其实大部分前期验证工作压根不需要写代码。kmplot这个在线工具能让你在几分钟内完成高通量表达数据与患者生存期的关联分析把原本需要半天到一天的活儿压缩成喝杯咖啡的时间。这篇东西完全基于我自己的使用心得来写不讲空泛的理论只讲怎么用、为什么这么用、以及那些官网没写但你迟早会踩的坑。不管你是有几篇生信文章在手里的老手还是刚接触肿瘤表达谱数据的新人这篇内容都值得你花十分钟读完。1. 先把话说清楚kmplot到底解决什么问题1.1 生存分析在生信里的位置先花点时间说背景。在肿瘤研究里我们经常问一个问题某个基因的高表达或者低表达到底跟患者活得久不久有没有关系这就是生存分析要回答的问题。传统做法是拿到临床随访数据包括生存时间、生存状态、表达分组然后算Kaplan-Meier曲线、跑log-rank检验、再拟合Cox回归模型。但在实际项目里尤其是刚开始看一个候选基因的时候你手上往往只有一堆表达量数据根本等不起几年的随访。这时候怎么验证这个基因的预后价值答案是用别人已经公开的数据。TCGA、GEO这些数据库里有大量带完整随访信息的表达谱数据问题在于数据量大、格式混乱、临床信息还得清洗处理起来相当麻烦。kmplot这个在线工具把这件事变成了填表单输入一个基因名选一个癌种选好参数点一下生存曲线和统计结果就出来了。它背后整合了多个公开数据库的mRNA表达数据和对应的临床随访信息甚至把探针选择、数据归一化、最佳截断值搜索这些技术细节都替你处理好了。1.2 为什么不是所有生存分析都能用它做kmplot确实强大但它不是万能的。它主要覆盖的是几种常见癌种包括乳腺癌、卵巢癌、肺癌和胃癌后来也加入了肝癌、肾癌等新的数据集。如果你的研究方向是甲状腺癌或者结直肠癌那kmplot可能就没有对应的数据或者样本量小到没有参考价值。另外kmplot能做的是基于表达水平的整体分组比较它做不了复杂的多因素校正也不太适合处理带有特定临床亚型标签的精细分析。换句话说它是用来快速回答“这个基因在某个癌种里有没有预后价值”的筛查工具而不是取代你后续完整的、个性化的统计分析。我自己的定位很明确kmplot是预实验和文章“奠基石”级别的工具。文章里放一张kmplot的生存曲线图审稿人大概率不会挑剔因为数据来源是公开权威的方法写得也很清楚。但如果项目核心结论完全依赖kmplot那还是要把完整的Cox回归分析补上至少得有单因素和多因素的组合拳。2. kmplot背后的数据与统计你得知道它帮你做了什么2.1 数据来源和癌种覆盖kmplot的数据来源分两大块一部分来自TCGAThe Cancer Genome Atlas另一部分来自GEOGene Expression Omnibus里的独立芯片数据集。不同癌种用的数据源不完全一样这一点很多人没注意到。比如乳腺癌kmplot背后用的是METABRIC队列和多个GEO芯片数据集样本量能做到数千例卵巢癌主要基于TCGA卵巢癌队列和部分GEO数据肺癌有肺腺癌和肺鳞癌的区分数据分别来自不同的GEO芯片集合。样本量不同统计效能也不同。这就是为什么有些基因在乳腺癌里P值能到e-10这种量级在胃癌里却只有0.04——不一定是生物学差异也可能就是样本量差了好几倍。这里有一个非常重要的操作原则在写文章或者解读结果前先去kmplot的“About”页面看清楚当前癌种的数据构成。你总不能在文章里写“基于TCGA数据”结果选到的却是METABRIC队列这就很容易被审稿人抓包。2.2 统计模型和处理逻辑kmplot在计算生存差异时主要用的是两种统计方法log-rank检验和Cox比例风险回归。前者用来判断两组生存曲线是否显著不同后者用来计算风险比Hazard RatioHR以及相应的95%置信区间。我们经常说HR是0.6意思是高表达组的死亡风险是低表达组的0.6倍也就是高表达反而有保护效应。反过来HR大于1说明高表达是风险因素。置信区间如果跨越了1那就说明这个效应在统计学上不显著即使P值勉强小于0.05也要小心。kmplot最关键的一个自动化参数是“Auto select best cutoff”也就是自动选择最佳表达截断值。它会在所有可能的表达值里遍历找一个能够让两组生存差异最大的切点然后根据这个切点把样本分成高表达组和低表达组。这个策略能得到很漂亮的P值和HR但也很容易产生“过拟合”的嫌疑。所以正规的做法是用“Auto select best cutoff”做探索然后用中位数Median或者已知的临床截断值做验证。如果两种分组方式都能得到一致的显著性结论那这个基因的预后价值才比较稳固。3. 从零开始实操5分钟跑出一个生存分析结果3.1 第一步确定基因和数据类型开始之前先想清楚一个问题你要分析的是mRNA表达水平还是蛋白水平kmplot目前主要支持的是mRNA数据包括基于芯片和基于RNA-seq的。虽然平台也有单独的蛋白数据模块那个主要是针对部分有蛋白芯片数据的癌种应用面窄很多。选定基因之后还需要确定基因标识符的类型。kmplot里支持三种一种是我们最常用的基因Symbol比如EGFR、TP53一种是Entrez Gene ID还有一种是探针IDAffymetrix探针号。对绝大多数人来说直接用基因Symbol就行。但有个小坑如果这个基因有多个别名比如同一基因在不同文献里叫A也叫Bkmplot的搜索框不一定能同时识别。稳妥的做法是先到NCBI Gene数据库把官方Symbol查清楚再拿回来搜。3.2 第二步选择癌种和数据集在主页面选完基因之后选择你要分析的癌种。我拿最常见的肺癌来举例。kmplot的肺癌模块分得很细有肺腺癌LUAD、肺鳞癌LUSC两个单独的入口也有一个合并了多个数据集的肺癌总入口。不同入口的结果可能有差异原因在于样本构成和临床特征的异质性。比如单独看肺鳞癌时某基因可能没有预后意义但合并到所有肺癌里反而有统计显著性。这种情况解释起来要很小心有可能是组织学亚型之间的真实差异也有可能是样本量变化带来的统计效能变化。这里插一个实用建议如果是为了文章筛选基因建议先把目标癌种主入口跑一遍再按亚型分别跑一遍。三个结果一致性高这个基因就值得进入下一轮分析如果结论相反那要么放弃要么就要找个能解释得通的生物学机制。3.3 第三步设置分组参数与统计选项进入分析页面后你会看到一个参数面板。最核心的几个选项分别是探针选择Probe selector默认是“Jet set best probe”这个选项会自动选取该基因最特异、最稳定的探针来代表表达水平。没有把握的情况下保持默认就好。分组截断值Cutoff可选项有Auto select best cutoff、Median、Upper/Lower Tercile、Upper/Lower Quartile等。探索阶段选Auto正式展示阶段建议用Median或者你研究领域的公认标准。生存终点Endpoint根据数据源不同可选的终点有总生存时间OS、无复发生存RFS、无进展生存PFS、无远处转移生存DMFS等。选择哪个终点取决于你想回答什么问题。想说明基因对整体生存的影响就选OS想说明对复发的影响就选RFS。随访时间限制Follow up threshold默认不设置。在某些数据集里随访时间过长后期事件极少会让曲线尾巴“拖”得很丑。我有时候会设定一个合理的时间窗口比如120个月或60个月把极度随访期之后的噪声去掉。3.4 第四步看懂输出结果页面提交后你会得到一个标准的Kaplan-Meier生存曲线图。图上有两条分组曲线横轴是生存时间以月为单位纵轴是生存概率曲线上的竖线表示删失事件也就是随访结束时患者还活着或者失访了。图的下方会列出三项核心统计量样本量n、风险比HR和P值。这里要特别注意kmplot默认展示的是Cox回归得到的HR和P值如果你在设置里选了“Use the log-rank test”呈现的就是log-rank检验的P值。两者数值差别通常不大但会存在细微差异。文章里如果只报一种建议统一用Cox回归的HR和P值因为信息量更大审稿人也更习惯看这个。还有一个容易被忽略的信息在图的顶部或者侧边当前分析所用的数据集和样本数量。比如“Cohort: All”下方的数字是多少就能判断这个分析有多少样本做支撑。样本太少比如低于50例的时候即使P值小于0.05可信度也要打折扣。4. 在文章里使用kmplot图片导出与写作规范4.1 图片导出的正确姿势生存曲线图出来后直接右键存PNG当然最快但为了文章排版我建议做两步处理。首先kmplot的页面右下角或工具栏里有图片导出选项可以选择保存为不同格式。常规选择是PNG分辨率选300dpi以上如果期刊要求矢量图那就需要导SVG格式再自己转一下。kmplot导出的图默认带有平台水印或页面信息如果你要用在Paper里建议把导出图片放进AI或Inkscape里重绘一轮统一字体和线条宽度。其次是配色问题。kmplot默认的红黑配色对比度很高但有些期刊对配色风格有要求特别是那些要求色盲友好配色的期刊。你可以在绘图设置里选择不同的配色方案或者后期自己重新着色。只要保持KM曲线的统计信息不变这种程度的加工是允许的。4.2 结果描述与图注怎么写生存分析结果在文章里一般以图和图注的方式呈现。图注部分至少要包含以下信息分析的基因、数据集来源、样本总数和分组样本量、分组方式比如以表达量中位数为界、统计方法log-rank test或Cox回归、HR及95%置信区间、P值。正文描述的时候不要只写一句“P 0.05”要写清楚效应方向和效应大小。举例来说“EGFR高表达组的总体生存时间显著缩短n1415HR1.6295%CI 1.35-1.94Cox log-rank P1.2e-7”。这个写法信息密度很高审稿人一眼就能看出你做了什么。我见过太多人在正文里干巴巴地写“生存分析结果显示有统计学意义”这除了让审稿人怀疑你分析做得粗糙之外没有任何好处。4.3 一个值得注意的版权和引用问题kmplot是免费学术工具但在文章中发布了它的结果图需要在Methods部分引用对应的原始数据来源和kmplot方法学文章。我之前审过一些稿件发现不少作者用了kmplot的图却完全没有引用这会被视为数据源标注不清。正确的引用方式是在材料与方法里写清楚“Kaplan-Meier survival analysis was performed using the KM Plotter online toolhttp://kmplot.com/analysis/which integrates gene expression data and clinical data from the TCGA and GEO databases. The log-rank test and Cox proportional hazard regression were used to assess the association between gene expression and survival.” 然后把原始的数据库引用也带上比如TCGA系列文章的引用。不同期刊要求不同但总原则是别把别人的数据当成自家的。5. 实测过程记录以一个具体基因为例走完整流程5.1 分析目标与参数选择光说不练假把式下面我以一个常见的示例基因——假装我们关心的是某个在肺癌里热议的基因X——来完整走一遍kmplot流程。假设我要在肺腺癌数据里验证基因X的表达水平与总生存期的关系。目标明确之后我先打开kmplot的肺癌模块选择LUAD入口在基因搜索框输入基因X的官方Symbol。平台会自动补全确认后进入参数设置页面。在探针选择里我刻意选择了“Jet set best probe”作为首选方案原因是这个选项能排除掉那些在芯片上杂交效率不佳的探针类型。分组方式我先选了Auto select best cutoff这样做是为了先探个底看数据里是否存在一个有生物学意义的表达切点。5.2 结果解读的完整过程提交后返回的KM曲线显示基因X高表达组的生存曲线明显低于低表达组HR1.7695%CI 1.44-2.13log-rank P值在1e-7量级。乍一看是一个非常强的预后标志物。但我没有马上高兴而是做了一步很多人会忽略的验证切回设置页面把分组方式从Auto换成Median再跑一遍。改用中位数分组后HR下降到1.35P值从1e-7变成了0.012。虽然仍然显著但效应量缩水不少。这说明基因X的预后效应可能依赖一个比较高的表达阈值而不是线性递增关系。这个信息对于后续实验设计很重要如果你要做功能实验也许要在表达量足够高的细胞系里才能看到表型差异。5.3 亚型分层与终点选择接下来我又做了两个方向的探索。第一个是用来做对比的肺鳞癌LUSC模块结果显示基因X在肺鳞癌里完全没有预后价值P值接近0.4。第二个是在肺腺癌模块里把生存终点换成无复发生存RFS结果HR1.22P0.09接近但未达到显著水平。综合三轮结果我对基因X的判断是在肺腺癌里它对OS存在中等强度的预后预测能力但对RFS的预测价值有限组织学亚型的影响也需要在正式分析中作为分层因素。这些信息单独靠kmplot不可能完全确定但kmplot给了我们足够多线索去设计后续研究。这就是这个工具的定位它能帮你快速圈定方向但没法替你走到终点。6. 常见问题与避坑指南官网不会告诉你的那些事6.1 同一个基因两次跑出来的结果不一致这是kmplot使用中最多人遇到的困惑。我分析下来常见原因有三个一是参数选择不一致比如第一次用Auto cutoff第二次换成Median结果当然不同二是数据源选择变化同是肺癌LUAD、LUSC和全肺癌的数据集完全不同三是kmplot后台数据集有过版本更新如果你隔了很长时间再去跑底层数据可能已经变化了。对应的解决思路也简单记录下每一次分析的完整截图或参数快照写文章或者项目报告时附上运行时间和工具版本。别人复现的时候才能对得上。6.2 P值特别小真的靠谱吗很多人看到P1e-12就觉得捡到宝了但我想泼一盆冷水。kmplot的P值计算只考虑了单个基因的检验没有做多重假设检验校正。你在一万个基因里筛预后标志物光靠P值排序去挑前50个里可能一大半都是假阳性。所以更稳妥的筛选策略是先看HR绝对值有没有意义比如在0.6-0.7以下或1.4-1.5以上再看P值有没有经过类似Benjamini-Hochberg校正的补充分析或者用额外的独立数据集做验证。kmplot的优势在于能快速做多癌种交叉验证这本身就是一种内建的验证策略如果某个基因在乳腺癌、肺癌、卵巢癌里都显著且方向一致那偶然性就大大降低了。6.3 肿瘤分期和分子亚型没校正怎么办kmplot默认的分析是把所有患者混在一起比但肿瘤分期、年龄、性别、抽烟状态等都会影响生存。一个基因可能只是因为跟分期正相关才显得“有预后价值”。这种情况在真实项目里非常常见。我的建议是kmplot适合做初步证据但在论文里讨论预后独立性的位置需要自己做多因素Cox回归。把表达分组、分期、年龄等放进同一个模型里调整看看基因还有没有独立预后价值。这一步需要用你自己的数据或从TCGA官网下载的临床数据来完成kmplot本身不提供。6.4 常见问题速查表问题现象可能原因对策搜索结果为空基因Symbol输入有误或该基因在当前数据源中无探针检查官方Symbol换用Entrez ID重试HR方向与预期相反探针选择不同导致表达值方向反转切换探针选项交叉验证检查正反义链注释两组样本量差距悬殊Auto cutoff选中的截断值偏向一侧改用中位数分组说明数据分布置信区间极宽样本量太小或事件数不足检查样本量选择更大的合并数据集入口P值不显著但趋势明显随访时间短或事件率低延长随访阈值或换用RFS/DMFS等终点不同癌种结论矛盾真实异质性或数据源差异以效应量和一致性为主做综合判断6.5 别忘了记录参数做可复现分析我见过不少人用kmplot跑完结果不记录参数等要写方法学部分的时候想不起来当时怎么设置的。这个习惯非常危险。我的做法是每次跑完一个基因立刻用浏览器把当时页面截图或者导出为PDF存档同时在实验记录本里写清楚基因名、数据入口、探针选择、分组方式、生存终点、跑图日期。这一套流程下来写论文时Methods部分简直信手拈来。从我个人的经历来说kmplot这类工具最大的价值在于把那些原本需要大量数据清洗和统计建模的工作变成了逻辑清晰、界面友好的交互过程。它让研究者能把更多精力放在提出问题和解释结果上而不是困在R脚本和报错里出不来。但这并不意味着统计分析变得廉价——恰恰相反正因为操作变简单了我们更应该理解每一步背后的统计逻辑才能在碰到异常结果时知道问题出在哪。最后再分享一个小技巧如果你在kmplot上筛到了一个在多个癌种里都稳定显著的基因别忘了去它的“mRNA”和“蛋白质”切换功能里看一眼看看蛋白水平的趋势能不能跟mRNA对上。很多时候mRNA水平有差异蛋白表达却完全不是一回事这种信息对于下一步要不要投入实验验证能起到非常关键的决策作用。
返回列表