当前位置: 首页 > 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,说明在统计上两组数据没有显著不同。但要注意的是,随着时间的推移,样本量的数量在急剧减少,在过了随访时间后,就很难跟踪到病人进一步的变化,所以要想确定结论是否是对的,还需要扩大数据量去进一步分析。

相关文章:

  • Spring源码本地编译并执行测试
  • 使用php对navicat查看数据库密码?
  • 开机不用输入密码,修改注册表
  • nvue全攻略:从入门到性能优化
  • 短视频矩阵系统开发实战:PHP实现SaaS独立部署
  • Vue-生命周期
  • Jmeter压测手册:脚本配置、服务器环境搭建与运行
  • 将后端数据转换为docx文件
  • 13.18 Ollama+LLaMA3企业级部署实战:6步打造私有化大模型高效引擎
  • <8>-MySQL复合查询
  • 前端三剑客基础案例001
  • 下载指定版本的matplotlib
  • 图片去水印,图片变清晰,完成免费
  • Java并发编程实战 Day 21:分布式并发控制
  • ONLYOFFICE 的AI技巧-1.集成OCR、文本转图像、电子表格集成等新功能
  • aflplusplus:开源的模糊测试工具!全参数详细教程!Kali Linux教程!(一)
  • 激光雷达 + 视觉相机:高精度位姿测量方案详解
  • Altera系列FPGA基于ADV7180解码PAL视频,纯verilog去隔行,提供2套Quartus工程源码和技术支持
  • 多个机器人同时加载在rviz及gazebo同一个场景中
  • Blender 简介 ~ 总结,如何下载Blend格式模型
  • 做传销网站后果严重吗/情感营销案例
  • 榆中县城乡建设局网站/郑州关键词排名公司电话
  • 快速排名网站系统/搜索引擎优化是指
  • rar在线解压缩网站/深圳百度公司地址在哪里
  • 个人网站制作模板响应式/百度宣传广告要多少钱
  • 新疆网站开发报价/黄页88网络营销宝典