当前位置: 首页 > news >正文

从0开始学习R语言--Day22--km曲线

KM曲线

在分析疾病的死亡率时,我们往往会纠结于怎样在逻辑架构中去考虑未死亡的人群,以及想研究两种药物的表现效果,但病人的指标表现都不明显,作用于其他指标且很难量化。

而KM曲线可以很好地反映人群在时间序列上的生存率,且能考虑到中途生存出院的数据,因为死亡率并不会等到病人都死亡了再去计算,而KM曲线对于这类数据的处理是出院人群不影响生存概率,即不会提高它,只是当做数据集的长度变短了,这样可以有效避免对于生存率和药物效果的误判。

这里举一个例子来说明:

library(survival)
library(survminer)# 1. 生成模拟数据集
set.seed(123)  # 确保结果可重复
n <- 100       # 样本量# 创建数据集:时间、事件状态(1=发生事件,0=删失)、组别
time <- round(rexp(n, rate=1/50), 1)  # 生存时间(指数分布)
status <- rbinom(n, size=1, prob=0.7) # 70%的概率发生事件
group <- sample(c("A", "B"), n, replace=TRUE) # 随机分组# 创建数据框
surv_data <- data.frame(time, status, group)# 查看前几行数据
head(surv_data)# 2. 拟合KM模型
km_fit <- survfit(Surv(time, status) ~ group, data=surv_data)# 3. 绘制KM曲线
ggsurvplot(km_fit, data = surv_data,pval = TRUE,          # 显示p值conf.int = TRUE,      # 显示置信区间risk.table = TRUE,    # 显示风险表palette = c("#E7B800", "#2E9FDF"), # 颜色xlab = "Time (days)", # x轴标签ylab = "Survival Probability", # y轴标签title = "Kaplan-Meier Survival Curve", # 标题legend.labs = c("Group A", "Group B")) # 图例标签# 4. 查看汇总统计
summary(km_fit)# 5. 计算中位生存时间
km_fit

输出:

Call: survfit(formula = Surv(time, status) ~ group, data = surv_data)group=A time n.risk n.event survival std.err lower 95% CI upper 95% CI0.2     61       1   0.9836  0.0163      0.95225        1.0002.1     60       1   0.9672  0.0228      0.92354        1.0002.8     58       1   0.9505  0.0278      0.89750        1.0003.4     57       1   0.9339  0.0320      0.87327        0.9997.3     54       1   0.9166  0.0357      0.84912        0.98910.8     53       1   0.8993  0.0390      0.82594        0.97913.0     51       1   0.8816  0.0421      0.80294        0.96814.0     49       1   0.8636  0.0449      0.78001        0.95614.1     48       1   0.8457  0.0474      0.75764        0.94414.2     47       1   0.8277  0.0497      0.73575        0.93115.3     45       1   0.8093  0.0519      0.71369        0.91815.7     44       1   0.7909  0.0539      0.69203        0.90415.8     42       1   0.7720  0.0558      0.67010        0.89016.0     41       1   0.7532  0.0575      0.64852        0.87519.0     40       1   0.7344  0.0591      0.62726        0.86024.0     39       1   0.7156  0.0605      0.60630        0.84528.2     38       1   0.6967  0.0618      0.58561        0.82929.5     36       1   0.6774  0.0630      0.56449        0.81331.5     35       1   0.6580  0.0641      0.54364        0.79632.2     34       1   0.6387  0.0651      0.52304        0.78034.3     33       1   0.6193  0.0659      0.50270        0.76339.5     32       1   0.6000  0.0666      0.48258        0.74648.3     29       1   0.5793  0.0675      0.46103        0.72848.6     28       1   0.5586  0.0682      0.43975        0.71048.7     27       1   0.5379  0.0687      0.41876        0.69151.4     25       1   0.5164  0.0692      0.39703        0.67256.5     23       1   0.4939  0.0698      0.37446        0.65259.6     22       1   0.4715  0.0701      0.35225        0.63162.7     21       1   0.4490  0.0703      0.33039        0.61066.5     20       1   0.4266  0.0703      0.30887        0.58972.0     18       1   0.4029  0.0702      0.28625        0.56774.8     16       1   0.3777  0.0702      0.26235        0.54478.2     13       1   0.3486  0.0706      0.23446        0.51878.5     11       2   0.2853  0.0706      0.17566        0.46381.0      9       1   0.2536  0.0695      0.14820        0.43486.6      8       1   0.2219  0.0676      0.12207        0.40392.8      7       1   0.1902  0.0650      0.09734        0.372108.4      6       1   0.1585  0.0614      0.07417        0.339136.3      4       1   0.1189  0.0574      0.04611        0.306202.1      3       1   0.0792  0.0501      0.02294        0.274224.9      2       1   0.0396  0.0376      0.00617        0.254360.6      1       1   0.0000     NaN           NA           NACall: survfit(formula = Surv(time, status) ~ group, data = surv_data)n events median 0.95LCL 0.95UCL
group=A 61     43   56.5    39.5    78.5
group=B 39     28   53.4    42.5    82.1

从输出中,我们可以观察到两组的中位生存时间很接近,说明两组数据的病人存活率差不多,而图片中两条曲线的趋势相近,且置信区间(图中的阴影部分)大部分重叠,更进一步说明了两组数据的差异性不大。最后观察p值远大于0.05,说明在统计上两组数据没有显著不同。但要注意的是,随着时间的推移,样本量的数量在急剧减少,在过了随访时间后,就很难跟踪到病人进一步的变化,所以要想确定结论是否是对的,还需要扩大数据量去进一步分析。

http://www.xdnf.cn/news/1019935.html

相关文章:

  • 可视化图解算法51:寻找第K大(数组中的第K个最大的元素)
  • 第32节 Node.js 全局对象
  • Nginx 负载均衡、高可用及动静分离
  • CRM管理软件如何实现客户成功管理?
  • Unity3D仿星露谷物语开发62之添加NPC角色
  • 第六章 进阶21 奶茶周会没了奶茶
  • 如何用4 种可靠的方法更换 iPhone(2025 年指南)
  • Vuex相关知识点
  • Flutter项目编译到鸿蒙模拟器报错
  • Vue3 Element Plus 表格默认显示一行
  • Linux爬虫系统从开始到部署成功全流程
  • 国产智能体“双子星”:实在Agent vs Manus(核心架构与技术实现路径对比)
  • EFK架构日志采集系统
  • (nice!!!)(LeetCode 每日一题) 2616. 最小化数对的最大差值 (二分查找)
  • 基于C#+SQLServer2016实现(控制台)小型机票订票系统
  • 力扣面试150题--实现Trie(前缀树)
  • Git:现代开发的版本控制基石
  • Linux系统中自签名HTTPS证书
  • windows使用命令行查看进程信息
  • 高级定时器TIM1、TIM8
  • 什么是NIST CSF合规?ManageEngine卓豪合规指南!
  • 设备管理 -- Udev(二)U盘挂载
  • linux thermal framework(3)_thermal cooling device
  • WEBSOCKET研究
  • 传智健康---十天项目总结
  • 邮科OEM摄像头重塑楼宇安防价值链条
  • 010502管道符_防火墙出入站_不回显带外-渗透命令-基础入门-网络安全
  • 多模态大语言模型arxiv论文略读(120)
  • ArcPy 与 ArcGIS .NET SDK 读取 GDB 要素类坐标系失败?GDAL 外挂方案详解
  • 会计-收入-3-关于特定交易的会计处理