You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何运行Kaplan-Meier分析比较两组生存差异并提取卡方p值

报错原因

你调用plot()的输入对象f是survdiff()返回的对数秩检验结果对象,不包含绘图所需的生存曲线坐标数据,因此触发坐标解析错误。KM曲线需要基于survfit()函数的拟合结果绘制。


正确实现流程

1. 依赖加载与数据预处理

合并group变量与ann文件后,整理生存分析所需的标准字段:

library(survival)
library(tidyverse)
library(survminer)

# x为group和ann文件合并后的初始数据集
df <- x %>%  
  rename(status = vital_status,
         time = months_to_event) %>% 
  mutate(status = case_when(
    status == "LIVING" ~ 0, # 0代表删失
    status == "DECEASED" ~ 1 # 1代表终点事件(死亡)发生
  ))

2. 拟合KM曲线+组间差异检验

分别完成生存曲线拟合、组间差异检验及p值提取:

# 拟合KM生存曲线
km_fit <- survfit(Surv(time, status) ~ group, data = df)

# 执行log-rank检验计算组间生存差异
log_rank_res <- survdiff(Surv(time, status) ~ group, data = df)
# 提取卡方检验p值
p_val <- pchisq(log_rank_res$chisq, df = length(log_rank_res$n)-1, lower.tail = FALSE)

结合你提供的survdiff输出结果,计算得到p值约为0.073。

3. 绘制KM曲线

两种常用绘图方案可选:

  • 基础R绘图版
plot(km_fit, 
     lwd = 2,
     col = c("#2E86AB", "#A23B72"),
     xlab = "Time (Months)",
     ylab = "Survival Probability",
     main = "KM Survival Curves by Group")
# 添加图例
legend("topright",
       legend = c("Group 0", "Group 1"),
       col = c("#2E86AB", "#A23B72"),
       lwd = 2)
# 标注p值
text(x = max(df$time, na.rm = T)*0.7, y = 0.1, labels = paste0("Log-rank p = ", round(p_val, 3)))
  • survminer美化版(科研场景更常用)
ggsurvplot(km_fit,
           data = df,
           pval = TRUE, # 自动添加log-rank检验p值
           pval.method = TRUE,
           lwd = 2,
           palette = c("#2E86AB", "#A23B72"),
           xlab = "Time (Months)",
           ylab = "Survival Probability",
           legend.title = "Group",
           legend.labs = c("Group 0", "Group 1"),
           risk.table = TRUE) # 可选添加每组各时间点的剩余样本量风险表

内容的提问来源于stack exchange,提问作者melil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 05:42:04