R语言数据可视化-KM生存曲线

一、概述

生存分析(Survival Analysis)是用来描述和分析时间因素对个体生存的影响,其中生存曲线一般是常见的图表之一。而通过Kaplan-Meier(KM)法,可以绘制生存曲线用以描述研究对象的存活情况。

KM生存曲线是用来描述随时间推移一个群体中存活的比例,通常是用来描述疾病的存活率。在 KM 生存曲线上,X 轴表示时间,而 Y 轴表示生存率(或存活概率或累计存活率),即一个人在某一时间存活下来的概率。KM 生存曲线通常呈现出一条向下的曲线,这个曲线被称为“生存函数”。

  • 生存函数始终在 1.0 以上开始;
  • 随着时间的推移,生存函数会逐渐降低,最后可能趋向于 0;
  • 每次出现事件(如死亡,治愈等)时,生存函数都会发生一次跳跃。

KM 生存曲线可以用来描述随时间变化的生存率。在医学、流行病学、生物学等领域,它被广泛应用于对疾病、药物、手术等治疗方法的效果评估和预测。

二、数据集

2.1 安装及其使用

library(survival)
library(survminer)
library(mice)
library(pROC)
str(lung)

2.2 读取数据

'data.frame':   228 obs. of  10 variables:
 $ inst     : num  3 3 3 5 1 12 7 11 1 7 ...
 $ time     : num  306 455 1010 210 883 ...
 $ status   : num  2 2 1 2 2 1 2 2 2 2 ...
 $ age      : num  74 68 56 57 60 74 68 71 53 61 ...
 $ sex      : num  1 1 1 1 1 1 2 2 1 1 ...
 $ ph.ecog  : num  1 0 0 1 0 1 2 2 1 2 ...
 $ ph.karno : num  90 90 90 90 100 50 70 60 70 70 ...
 $ pat.karno: num  100 90 90 60 90 80 60 80 80 70 ...
 $ meal.cal : num  1175 1225 NA 1150 NA ...
 $ wt.loss  : num  NA 15 15 11 0 0 10 1 16 34 ...

2.3 数据预处理

# 数据补全
input.data <- mice(lung,seed=5)
data <- complete(input.data,3)

结果展示

'data.frame':   228 obs. of  10 variables:
 $ inst     : num  3 3 3 5 1 12 7 11 1 7 ...
 $ time     : num  306 455 1010 210 883 ...
 $ status   : num  2 2 1 2 2 1 2 2 2 2 ...
 $ age      : num  74 68 56 57 60 74 68 71 53 61 ...
 $ sex      : num  1 1 1 1 1 1 2 2 1 1 ...
 $ ph.ecog  : num  1 0 0 1 0 1 2 2 1 2 ...
 $ ph.karno : num  90 90 90 90 100 50 70 60 70 70 ...
 $ pat.karno: num  100 90 90 60 90 80 60 80 80 70 ...
 $ meal.cal : num  1175 1225 825 1150 488 ...
 $ wt.loss  : num  15 15 15 11 0 0 10 1 16 34 ...

三、使用方法

3.1 基础使用方法

km_fit <- survfit(Surv(time, status) ~ sex, data = lung)
plot(km_fit, main = "KM Survival Curve for Lung Cancer Patients")

3.2 进阶使用方法

KM曲线适用于分类变量,那连续变量是如何做KM曲线的呢?

  • 通常可以将连续变量按照一定的区间进行分组,以得到离散的自变量变量,然后进行KM曲线的绘制与比较。
  • 通常ROC曲线分析计算出的截断值进行分组
roc <- roc(status ~ ph.karno,data = data)
roc_data <- coords(roc,"best",transpose = FALSE) # 敏感度 特异度 截断值

roc_data$threshold

data$phc[data$ph.karno < roc_data$threshold] <- 0
data$phc[data$ph.karno >= roc_data$threshold] <- 1


fit <- survfit(Surv(time,status) ~ phc,data = data)
ggsurvplot(fit, data = data,risk.table = TRUE,
        ggtheme = theme_bw(),
        xlab = "days",break.x.by=200,
        tables.y.text=FALSE,legend.title="",
        fontsize=5,break.y.by=0.2,
        font.x = 15,
        font.y = 15,
        font.tickslab = 15,
        font.legend = 15,
        ylab='Event-free survival probability',
        legend = c(0.90,0.85),pval.coord = c(5,0.25),pval.size=5,
        pval.family="Times New Roman",palette = c("red","green"))

3.3 ggsurvplot参数介绍


fit    
允许的值包括:

一个 survfit 对象

生存对象列表。传递给ggsurvplot_list()

包含生存曲线摘要的数据框。传递给 。ggsurvplot_df()

data    
用于拟合生存曲线的数据集。如果未提供,则数据 将从“适合”对象中提取。

fun    
定义生存变换的任意函数 曲线。可以使用字符指定常用转换 参数:“事件”绘制累积事件 (f(y) = 1-y),“cumhaz”绘制 累积风险函数 (f(y) = -log(y)) 和生存的“PCT” 概率百分比。

color    
用于生存曲线的颜色。

如果 地层数/组数(n.strata)=1,期望值为颜色名称。 例如,颜色=“蓝色”。

如果 n.strata > 1,则期望值为 分组变量名称。默认情况下,生存曲线按地层着色 使用参数颜色=“地层”,但您也可以为生存曲线着色 通过用于拟合生存曲线的任何其他分组变量。在此 在这种情况下,可以使用参数指定自定义调色板 调色板。

palette    
要使用的调色板。允许的值包括 “色调” 默认色相色标;“灰色”表示灰色调色板;布鲁尔调色板 例如“RdBu”、“Blues”等;或自定义调色板,例如 c(“蓝色”、“红色”);以及来自ggsci R软件包的科学期刊调色板,例如:“npg”, “AAAS”、“柳叶刀”、“JCO”、“UCSCGB”、“芝加哥”、“辛普森一家”和 “里坎德莫蒂”。 有关详细信息,请参阅详细信息部分。也可以是 长度(组);在这种情况下,使用 函数面板。

linetype    
线类型。允许的值包括 i) 用于更改的“分层” 按地层划分的线型(即组);ii) 数字向量(例如,C(1, 2))或 字符向量 c(“实心”、“虚线”)。

conf.int    
逻辑值。如果为 TRUE,则绘制置信区间。

pval    
逻辑值、数字或字符串。如果合乎逻辑且为 TRUE,则 p 值将添加到图上。如果是数字,则计算 p 值为 替换为使用此参数传递的那个。如果字符,则 自定义字符串将显示在绘图上。请参阅示例 - 示例 3。

pval.method    
是否添加具有用于 的测试名称的文本 计算 p值,对应于生存曲线的比较 - 仅在以下情况下使用pval=TRUE

test.for.trend    
逻辑值。默认值为 FALSE。如果为 TRUE,则返回 检验趋势 p 值。趋势测试旨在检测有序 生存曲线的差异。也就是说,对于至少一个组。测试内容 对于趋势,仅当组数> 2 时才能执行。

surv.median.line    
用于绘制水平/垂直的字符矢量 中位生存期线。允许的值包括 c(“none”, “hv”, “h”, “v”)。V:垂直,H:水平。

risk.table    
允许的值包括:

对或错 指定是否显示风险表。默认值为 FALSE。

“绝对”或“百分比”。分别按时间显示绝对数量和处于危险中的受试者百分比。

“abs_pct” 以显示绝对数字和百分比。

“nrisk_cumcensor”和 “nrisk_cumevents”。显示有风险的数量,以及 分别审查和事件。

cumevents    
指定是否显示 的表的逻辑值 事件的累积数。默认值为 FALSE。

cumcensor    
指定是否显示 的表的逻辑值 审查的累计次数。默认值为 FALSE。

tables.height    
指定一般高度的数值(在 [0 - 1] 中) 主生存图下的所有表。

group.by    
包含分组变量名称的字符向量。长度应为 <= 2。 函数的别名。ggsurvplot_group_by()

facet.by    
包含分组变量名称的字符向量 将生存曲线刻面为多个面板。长度应为 <= 2。 函数的别名。ggsurvplot_facet()

add.all    
逻辑值。如果为 TRUE,则将合并患者的生存曲线(零模型)添加到主图上。 函数的别名。ggsurvplot_add_all()

combine    
逻辑值。如果为 TRUE,则在同一图上组合一个列表 survfit 对象。 函数的别名。ggsurvplot_combine()

ggtheme    
函数,ggplot2 主题名称。默认值为 theme_survminer。允许的值包括 ggplot2 官方主题:请参见。theme

tables.theme    
函数,ggplot2 主题名称。默认值为 theme_survminer。允许的值包括 ggplot2 官方主题:请参见。请注意,是增量的。themetables.themeggtheme

...    
下文所述的进一步论点和 要传递给 i) 的其他参数 i) 到 ggplot2 geom_*() 函数,例如 作为线型, 大小, ii) 或函数 ggpar() 的 自定义绘图。请参阅详细信息部分。

x    
类 ggsurvplot 的对象

surv.plot.height    
网格上生存图的高度。违约 为 0.75。当 risk.table = FALSE 时被忽略。

risk.table.height    
网格上风险表的高度。增加 拥有多个地层时的值。默认值为 0.25。在以下情况下忽略 风险表=假。

ncensor.plot.height    
审查情节的高度。在 时使用。ncensor.plot = TRUE

newpage    
打开一个新页面。看grid.arrange

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笑不语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值