【视频】R语言生存分析原理与晚期肺癌患者分析案例|数据分享-1
https://developer.aliyun.com/article/1488338
格式化日期-lubridate程序包
我们还可以使用该lubridate
包来格式化日期。在这种情况下,请使用ymd
功能
date_ex %>% mutate( sx\_date = ymd(sx\_date), last\_fup\_date = ymd(last\_fup\_date) )
## # A tibble: 3 x 2 ## sx\_date last\_fup_date ## <date> <date> ## 1 2007-06-22 2017-04-15 ## 2 2004-02-13 2018-07-04 ## 3 2010-10-27 2016-10-31
- 请注意,与基本
R
选项不同,不需要指定分隔符
计算生存时间
现在日期已格式化,我们需要以某些单位(通常是几个月或几年)计算开始时间和结束时间之间的差。在base中R
,用于difftime
计算两个日期之间的天数,然后使用将其转换为数字值as.numeric
。然后将除以365.25
年的平均天数转换为年。
date_ex %>% mutate( os_yrs = as.numeric( difftime(last\_fup\_date, sx_date, units = "days")) / 365.25 )
## # A tibble: 3 x 3 ## sx\_date last\_fup\_date os\_yrs ## <date> <date> <dbl> ## 1 2007-06-22 2017-04-15 9.82 ## 2 2004-02-13 2018-07-04 14.4 ## 3 2010-10-27 2016-10-31 6.01
计算生存时间
操作员可以%--%
指定一个时间间隔,然后使用将该时间间隔转换为经过的秒数as.duration
,最后除以dyears(1)
,将其转换为年数,从而得出一年中的秒数。
## # A tibble: 3 x 3 ## sx\_date last\_fup\_date os\_yrs ## <date> <date> <dbl> ## 1 2007-06-22 2017-04-15 9.82 ## 2 2004-02-13 2018-07-04 14.4 ## 3 2010-10-27 2016-10-31 6.02
事件标标
对于生存数据的组成部分,我提到了事件指示器:
事件指标δiδi:
- 1,如果观察到的事件(即 Ti≤CiTi≤Ci)
- 如果检查,则为0(即 Ti>CiTi>Ci)
在lung
数据中,我们有:
- 状态:删失状态1 =删失,2 =失效
生存函数
受试者可以存活超过指定时间的概率
S(t)=Pr(T>t)=1−F(t)S(t)=Pr(T>t)=1−F(t)
S(t)S(t):生存函数F(t)=Pr(T≤t)F(t)=Pr(T≤t):累积分布函数
理论上,生存函数是平滑的;在实践中,我们以离散的时间尺度观察事件。
生存概率
- 生存概率在某个时间,S(t)S(t),是存活超过该时间,考虑到个体已存活刚刚在此之前,时间的条件概率。
- 可以估计为当时活着但没有损失的随访患者人数除以当时的活着患者人数
- 生存概率的Kaplan-Meier估计是这些条件概率的乘积
- 在时间0,生存概率为1,即 S(t0)=1S(t0)=1
创建生存对象
Kaplan-Meier方法是估计生存时间和概率的最常用方法。这是一种非参数方法,可产生阶跃函数,每次事件发生时,阶跃下降。
- 创建一个生存对象。对于每个主题,将有一个条目作为生存时间,
+
如果主题是经过删失的,则后面跟一个。让我们看一下前10个观察值:
## \[1\] 306 455 1010+ 210 883 1022+ 310 361 218 166
用Kaplan-Meier方法估算生存曲线
- 该
survfit
函数根据公式创建生存曲线。让我们为整个同类群组生成总体生存曲线,将其分配给objectf1
,然后查看names
该对象的:
names(f1)
## \[1\] "n" "time" "n.risk" "n.event" "n.censor" ## \[6\] "surv" "std.err" "cumhaz" "std.chaz" "start.time" ## \[11\] "type" "logse" "conf.int" "conf.type" "lower" ## \[16\] "upper" "call"
该survfit
对象将用于创建生存曲线的一些关键组件包括:
time
,其中包含每个时间间隔的起点和终点surv
,其中包含每个对应的生存概率time
Kaplan-Meier图
现在, 绘制对象 获得Kaplan-Meier图。
plot(survfit(Surv(time, status) ~ 1, data = lung),
- 基数
R
中的默认图显示了具有相关置信区间(虚线)的阶跃函数(实线) - 水平线代表间隔的生存时间
- 时间间隔由事件终止
- 垂直线的高度显示累积概率的变化
- 带有刻度线的经过删失的观察结果会减少间隔之间的累积生存期。
Kaplan-Meier图
建立在上ggplot2
,并可用于创建Kaplan-Meier图。
- 默认图 带相关置信带(阴影区域)的阶跃函数(实线)。
- 默认情况下,显示了被检查患者的刻度线,在此示例中,该刻度线本身有些模糊,可以使用选项将其取消
censor = FALSE
估计xx年生存
生存分析中经常需要关注的一个数量是生存超过一定数量(xx)年的概率。
例如,要估算生存到11年的可能性
## Call: survfit(formula = Surv(time, status) ~ 1, data = lung) ## ## time n.risk n.event survival std.err lower 95% CI upper 95% CI ## 365 65 121 0.409 0.0358 0.345 0.486
我们发现本研究中11年生存的机率是41%。
同时显示95%置信区间的相关上下限。
xx年生存率和生存曲线
11年存活率概率为在y轴上的点对应于11一年x轴的生存曲线。
Xx年生存率常常被错误估计
如果 使用“天真”的估计会怎样?
228名患者中的121名到1年时死亡,因此:
-当 忽略42名患者在1年之前受到检查的事实时, 会错误估计1个1个年生存率。
- 正确的估计生存概率-年为41%。
忽略删失对xx年生存的影响
- 想象两个研究,每个研究228个主题。每个研究中有165人死亡。一个没有检查(红色线),63个病人被另一个(蓝色线)检查
- 忽略删失会导致总体生存概率被高估,因为被删失的受试者仅在部分随访时间内提供信息,然后落入风险范围之外,从而降低了生存的累积概率
估计中位生存时间
生存分析中经常需要关注的另一个数量是平均生存时间,我们使用中位数对其进行量化。预计生存时间不会呈正态分布,因此平均值不是适当的总结。
## Call: survfit(formula = Surv(time, status) ~ 1, data = lung) ## ## n events median 0.95LCL 0.95UCL ## 228 165 310 285 363
我们看到中位生存时间为310天。还会显示95%置信区间的上限和下限。
中位生存时间和生存曲线
中位生存时间是生存概率为0.50
【视频】R语言生存分析原理与晚期肺癌患者分析案例|数据分享-3