实验指南

GraphPad Prism 生存曲线分析:Kaplan-Meier 法绘制、Log-rank 检验与结果解读完整教程

详解用 GraphPad Prism 绘制 Kaplan-Meier 生存曲线并进行组间比较的完整流程:数据格式与截尾值标注、建立 Survival 数据表、输入生存时间与事件、GraphPad 自动生成 Kaplan-Meier 曲线与中位生存时间,详解 Log-rank 检验、Wilcoxon 检验、HR 风险比与 95%CI 计算方法,附动物实验 / 细胞存活实验的数据结构示例。

更新于 2026-08-19 8 分钟
链接已复制到剪贴板

生存分析是什么,什么时候用

生存分析(Survival Analysis)是处理”到事件发生的时间”这类数据的统计方法,因最早用于医学上患者生存期比较而得名。在生物学实验室常见应用:

  • 动物实验:比较不同给药组小鼠的生存期(肿瘤模型、药物治疗)
  • 细胞存活:比较不同冻存条件下、不同复苏方法下细胞存活率随时间变化
  • 细胞毒性 / 药物 LD₅₀:不同浓度药物处理下,细胞死亡时间曲线
  • 分子事件:报告基因到达表达阈值的时间、细胞迁移穿越 Transwell 膜的时间等

核心特点是存在截尾(Censoring)——有些实验个体在实验结束时事件还没发生(比如小鼠还活着),或中途退出实验(比如意外死亡、处理错误)。这种数据 t 检验 / ANOVA 处理不了,必须用生存分析方法。

实验设计与数据准备

必须记录的三个要素

每一只小鼠 / 每一个样本,需要记录:

要素含义示例
分组它属于哪一组(Control / Drug A / Drug B 等)Control
时间从实验开始到事件发生(或实验结束 / 截尾)的时间长度Day 18、Day 25
事件状态在该时间点,“事件发生了”还是”截尾了”1 = 事件发生(如小鼠死亡),0 = 截尾(如小鼠还活着 / 实验终止时仍存活)

截尾(Censoring)的三种情况

  1. 右截尾(最常见):实验截止日该动物仍存活,或中途因非实验原因丢失
  2. 左截尾:事件在某次检查之前就发生了,但不知道具体时间
  3. 区间截尾:事件发生在两次检查时间之间(动物实验通常是每日观察一次,所以事件发生在 Day 17 与 Day 18 之间,记录为 Day 18,属于区间截尾简化为右截尾)

截尾数据是有效数据,不能删! 很多同学做生存分析时,把最后还活着的动物直接删掉,只统计死的——这会严重高估死亡率(删了存活贡献的信息)。截尾动物虽然不知道具体死亡时间,但提供了”它至少活了这么久”的重要信息。

动物实验数据示例

假设做了 3 组(Control、Drug Low、Drug High),每组 10 只小鼠,每日观察死亡情况,实验持续 40 天:

Group       Time(days)  Status
Control     15         1(死了)
Control     17         1
...
Control     40         0(到 Day 40 仍活着,截尾)
Drug Low    21         1
...
Drug High   31         1
...
Drug High   40         0(2 只还活着)

每组 10 条记录,不要取均值、不要提前汇总,GraphPad 需要的是单只动物一行。

GraphPad Prism 操作步骤(8.x / 9.x / 10.x 通用)

第 1 步:新建数据表格

  1. 启动 GraphPad Prism,New Project
  2. 在左侧选择 Survival 类型的数据表
  3. 数据格式选项:
    • Enter/import raw data for each subject in a column structure → 选择 “Grouped” 数据格式(适合多组比较)
    • 或新版 Prism 直接选 “Survival → Start with sample data to follow a tutorial” 也可以,先看示例
  4. 创建 3 个子列 × N 行(取决于最大动物数,通常 15 行就够)

第 2 步:数据录入

两种录入方式,选一种即可:

方式 A:一列式(推荐,有分组标签)

如果 Prism 版本允许 Survival 表直接录入,采用”长表格式”:

  • 一列 Group(Control/Drug Low/Drug High)
  • 一列 Time(时间数字)
  • 一列 Status(1/0,事件或截尾)

方式 B:分组结构式(旧版 Prism 默认)

每个子列对应一组,两行一组:

  • 第 1 行:生存时间(X)
  • 第 2 行:事件标识,0 = 截尾,1 = 事件发生

示例(只看 Control 列):

               Control  
Time(Day)     15    17    20    22    40…
Status         1     1     1     1     0…

操作细节:把光标放在列标题上,右键 → “Insert Number of Subcolumns” 可以设置每个组多少子列。子列不够就加,每只动物占用 1 个子列(Time+Status 配对)。

第 3 步:自动生成 Kaplan-Meier 曲线

  1. 左侧导航栏切换到 Graphs → Data 1(就是你刚录入数据的那张图)
  2. Prism 会自动弹出图类型选择:选 Survival curve(Kaplan-Meier),X 轴 = Time,Y 轴 = Percent Survival(生存率 %)
  3. 默认样式:阶梯状下降曲线,每一个事件发生时曲线垂直下降一截。截尾点默认用 ”+” 符号标记在曲线上

第 4 步:曲线美化(论文要求)

双击图打开 Format Graph:

  • 线条:加粗到 2 pt,每组用不同颜色或线型(实线/虚线/点划线),色盲友好配色
  • 点:截尾标记保持 ”+“,Size 8 左右
  • 坐标轴:
    • X 轴标题:“Time (days)“,范围 0–40 或根据实验终止日定,Major Ticks 每 5 或 10
    • Y 轴标题:“Survival (%)“,范围 0–100,Major Ticks 每 20
  • 图例:放图右侧或下方,文字清晰

第 5 步:Log-rank 检验(组间比较)

这是生存分析的核心统计:

  1. 点击左侧导航 Analyze → Survival → Compare curves (log-rank, Gehan-Breslow-Wilcoxon)
  2. 勾选你要比较的组(3 组就全勾选)
  3. 检验选项:
    • Test for trend(for ordered groups):如果分组是有序的(Control → Low → High,剂量递增),勾选这个(Tarone-Ware 趋势检验),检验效能更高
    • 如果是普通无序分组(Control vs Drug vs 联合用药),不勾选
  4. OK,输出检验结果报告

第 6 步:结果报告解读

GraphPad 会输出一个完整报告,重点看以下几个数字:

1. 中位生存时间(Median Survival Time)

GroupMedian Survival (days)95% CI
Control2017.5–22.5
Drug Low2723.5–30.5
Drug High3430.5–未达到

解释:Control 组一半小鼠在 Day 20 时死亡;Drug High 组超过实验末还没死完,中位生存时间**“未达到”(Not reached)**,95% CI 只有下限没有上限。

2. Log-rank 检验结果

比较对比Chi-squareP value
Overall(三组整体比较)13.80.0010 ✅ 有显著差异
Control vs Drug Low4.50.033 ✅
Control vs Drug High12.70.0004 ✅✅✅
Drug Low vs Drug High3.30.069 NS

解读逻辑:

  • 先看 Overall P < 0.05,说明三组间至少有一组和其他组有差异 → 再看两两比较
  • 如果 Overall P ≥ 0.05,两两比较一般也不会显著(GraphPad 会自动用 Bonferroni 校正多重比较)

3. 风险比 Hazard Ratio(HR,仅两组比较时输出)

两组之间的 GraphPad 额外给出 HR:

对比HR95% CI of HR
Drug High vs Control0.210.08–0.53

解释:

  • HR < 1 = 处理组风险更低、存活更久(药物有效)
  • HR = 0.21 意味着 Drug High 组在任何一个时间点的”瞬时死亡风险”只有 Control 组的 21%
  • HR = 1 = 两组无差异;HR > 1 = 处理组更差
  • 95% CI 不跨越 1,说明差异显著(与 Log-rank P 结果一致)

两种检验方法的选择

GraphPad 的 Compare 对话框中有三种检验:

检验方法别名适用场景
Log-rank(Mantel-Cox)Mantel-Haenszel默认推荐。给每个时间点等权重,对组间长期持续差异最敏感,论文最常用
Gehan-Breslow-WilcoxonWilcoxon-Breslow给早期时间点更大权重。如果药物前期效果明显、后期效果减弱,用这个更灵敏
Tarone-Ware—给中早期中等权重,折衷方案

一般情况用 Log-rank 就够了,90% 的论文都用这个。只有你确实关心早期差异(比如给药前 10 天效果强,后期耐药)才换 Wilcoxon。但不要挑最显著的那个报告(会被认为 P-hacking),在方法里说明你预设用哪种检验。

易错点合集

1. 截尾标反了(把活着的标成 1,死的标成 0)

GraphPad 默认为”时间 + 死亡指示(1=事件)“,但有时候会和其他软件(R、SPSS)的截尾约定(0=事件)搞混。标反了生存率会从 0 开始往上涨,结果完全颠倒。画完第一件事检查 Y 轴是不是从 100% 开始。

2. 同一时间点事件都算同一天,但生存曲线下降得不对

比如 Day 18 有 3 只小鼠死亡,GraphPad 应该一次性掉下 30%(如果 10 只),但发现只掉了 10% → 查数据里是否把三只都正确录入,而不是记了均值。

3. 没有用 Bonferroni 校正

3 组两两比较共 3 次比较,如果不校正 Family-wise error rate,假阳性会大大提高。GraphPad 做 3 组以上整体 Log-rank 时会自动校正,但手动拆成多次两两比较的话需要自己设。

4. 样本量太小(每组 <8 只)

生存分析对样本量敏感。每组 5 只的结果误差会非常大,Kaplan-Meier 阶梯跳得很猛,审稿人通常会要求每组至少 8–10 只动物。

5. 把”存活数”而不是”每只动物的时间和状态”录进去

很多同学把原始数据汇总成 Day 1 死几只、Day 2 死几只再录入。GraphPad 生存分析数据表是按个体,不是按时间点汇总。如果真的只有汇总数据,可以用 Prism 另一种”频次形式”录入(Advanced 选项中选择 number at risk)。

6. 统计显著性用错了指标

HR < 1 且 CI 不跨 1 → 显著,但有时候 HR 的显著和 Log-rank 的 P 会不一致(极端截尾模式下),论文中以 Log-rank P 为主要统计指标,HR 是解释效应量的辅助指标。

与其他实验的联动分析

动物生存实验通常和以下数据互相印证:

  • 肿瘤生长曲线(每 2–3 天测量肿瘤体积):体积翻倍时间 vs 生存时间的关系
  • 体重变化:体重下降 >20% 是否对应死亡事件?是否动物安乐死的判断标准一致?
  • 终点取材 / IHC / 血清细胞因子:不同结局的动物组织学 / 分子标记是否有差异

动物实验数据和统计学结合,可参考 GraphPad ANOVA 完整指南(多组比较)和 GraphPad t 检验指南(两组比较)处理其他定量指标。

相关工具

继续用工具完成条件判断和计算

摩尔浓度换算

在质量、体积、分子量和摩尔浓度之间进行实验室常用换算。

立即使用
系列稀释计算

根据起始浓度、稀释倍数和步数,快速生成系列稀释方案。

立即使用
下一步排查

看完这页后,可以继续确认这些相邻问题

没有解决?

把你的实验现象发给 BioHelper

写下实验类型、异常表现、已经尝试过的操作和关键参数。后续会优先把真实问题整理成排查卡片或工具说明。

提交实验现象
本文用于科研实验排查与条件优化,不替代实验室 SOP、试剂说明书或医学判断。