【视频】R语言生存分析原理与晚期肺癌患者分析案例|数据分享-2

简介: 【视频】R语言生存分析原理与晚期肺癌患者分析案例|数据分享

【视频】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函数根据公式创建生存曲线。让我们为整个同类群组生成总体生存曲线,将其分配给object f1,然后查看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),

image.png

  • 基数R中的默认图显示了具有相关置信区间(虚线)的阶跃函数(实线)
  • 水平线代表间隔的生存时间
  • 时间间隔由事件终止
  • 垂直线的高度显示累积概率的变化
  • 带有刻度线的经过删失的观察结果会减少间隔之间的累积生存期。

Kaplan-Meier图

建立在上ggplot2,并可用于创建Kaplan-Meier图。

image.png

  • 默认图  带相关置信带(阴影区域)的阶跃函数(实线)。
  • 默认情况下,显示了被检查患者的刻度线,在此示例中,该刻度线本身有些模糊,可以使用选项将其取消 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轴的生存曲线。


image.png

Xx年生存率常常被错误估计

如果 使用“天真”的估计会怎样?

228名患者中的121名到1年时死亡,因此:

image.png

-当 忽略42名患者在1年之前受到检查的事实时, 会错误估计1个1个年生存率。

  • 正确的估计生存概率-年为41%。

忽略删失对xx年生存的影响

  • 想象两个研究,每个研究228个主题。每个研究中有165人死亡。一个没有检查(红色线),63个病人被另一个(蓝色线)检查
  • 忽略删失会导致总体生存概率被高估,因为被删失的受试者仅在部分随访时间内提供信息,然后落入风险范围之外,从而降低了生存的累积概率

image.png

估计中位生存时间

生存分析中经常需要关注的另一个数量是平均生存时间,我们使用中位数对其进行量化。预计生存时间不会呈正态分布,因此平均值不是适当的总结。

## 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

image.png


【视频】R语言生存分析原理与晚期肺癌患者分析案例|数据分享-3

https://developer.aliyun.com/article/1488340

相关文章
|
1月前
|
数据采集 机器学习/深度学习 数据可视化
R语言从数据到决策:R语言在商业分析中的实践
【9月更文挑战第1天】R语言在商业分析中的应用广泛而深入,从数据收集、预处理、分析到预测模型构建和决策支持,R语言都提供了强大的工具和功能。通过学习和掌握R语言在商业分析中的实践应用,我们可以更好地利用数据驱动企业决策,提升企业的竞争力和盈利能力。未来,随着大数据和人工智能技术的不断发展,R语言在商业分析领域的应用将更加广泛和深入,为企业带来更多的机遇和挑战。
|
2月前
|
存储 数据采集 数据处理
R语言数据变换:使用tidyr包进行高效数据整形的探索
【8月更文挑战第29天】`tidyr`包为R语言的数据整形提供了强大的工具。通过`pivot_longer()`、`pivot_wider()`、`separate()`和`unite()`等函数,我们可以轻松地将数据从一种格式转换为另一种格式,以满足不同的分析需求。掌握这些函数的使用,将大大提高我们处理和分析数据的效率。
|
25天前
R语言基于表格文件的数据绘制具有多个系列的柱状图与直方图
【9月更文挑战第9天】在R语言中,利用`ggplot2`包可绘制多系列柱状图与直方图。首先读取数据文件`data.csv`,加载`ggplot2`包后,使用`ggplot`函数指定轴与填充颜色,并通过`geom_bar`或`geom_histogram`绘图。参数如`stat`, `position`, `alpha`等可根据需要调整,实现不同系列的图表展示。
|
1月前
|
数据采集 数据可视化 数据挖掘
R语言在金融数据分析中的深度应用:探索数据背后的市场智慧
【9月更文挑战第1天】R语言在金融数据分析中展现出了强大的功能和广泛的应用前景。通过丰富的数据处理函数、强大的统计分析功能和优秀的可视化效果,R语言能够帮助金融机构深入挖掘数据价值,洞察市场动态。未来,随着金融数据的不断积累和技术的不断进步,R语言在金融数据分析中的应用将更加广泛和深入。
|
2月前
|
数据采集 机器学习/深度学习 数据挖掘
R语言数据清洗:高效处理缺失值与重复数据的策略
【8月更文挑战第29天】处理缺失值和重复数据是数据清洗中的基础而重要的步骤。在R语言中,我们拥有多种工具和方法来有效地应对这些问题。通过识别、删除或插补缺失值,以及删除重复数据,我们可以提高数据集的质量和可靠性,为后续的数据分析和建模工作打下坚实的基础。 需要注意的是,处理缺失值和重复数据时,我们应根据实际情况和数据特性选择合适的方法,并在处理过程中保持谨慎,以避免引入新的偏差或错误。
|
2月前
|
数据采集 存储 数据可视化
R语言时间序列分析:处理与建模时间序列数据的深度探索
【8月更文挑战第31天】R语言作为一款功能强大的数据分析工具,为处理时间序列数据提供了丰富的函数和包。从数据读取、预处理、建模到可视化,R语言都提供了灵活且强大的解决方案。然而,时间序列数据的处理和分析是一个复杂的过程,需要结合具体的应用场景和需求来选择合适的方法和模型。希望本文能为读者在R语言中进行时间序列分析提供一些有益的参考和启示。
|
2月前
|
数据处理
R语言数据合并:掌握`merge`与`dplyr`中`join`的巧妙技巧
【8月更文挑战第29天】如果你已经在使用`dplyr`进行数据处理,那么推荐使用`dplyr::join`进行数据合并,因为它与`dplyr`的其他函数(如`filter()`、`select()`、`mutate()`等)无缝集成,能够提供更加流畅和一致的数据处理体验。如果你的代码中尚未使用`dplyr`,但想要尝试,那么`dplyr::join`将是一个很好的起点。
|
5月前
|
数据采集 数据可视化
利用R语言进行因子分析实战(数据+代码+可视化+详细分析)
利用R语言进行因子分析实战(数据+代码+可视化+详细分析)
|
5月前
|
Web App开发 数据可视化 数据挖掘
利用R语言进行聚类分析实战(数据+代码+可视化+详细分析)
利用R语言进行聚类分析实战(数据+代码+可视化+详细分析)
|
5月前
|
移动开发 数据可视化
广义线性模型beta二项分布的淋巴结疾病风险预测可视化R语言2实例合集|附数据代码
广义线性模型beta二项分布的淋巴结疾病风险预测可视化R语言2实例合集|附数据代码

热门文章

最新文章

下一篇
无影云桌面