精华内容
下载资源
问答
  • 使用对数秩检验比较两组的生存曲线。 可以使用称为对数秩检验的统计假设检验来比较两条生存曲线。 它用于检验群体生存曲线之间没有差异的零假设(即,每个群体在任何时间点发生事件的概率都相同)。 该函数使用 ...
  • 此函数执行 Mantel-Haenszel 检验,比较两条生存曲线并返回 p 值。 它接收患者总数、所有事件时间(包括删失和丢失)的列表以及一个大小相同的二进制数组,指定哪些事件是由于丢失/删失而发生的。 如果您有统计和...
  • R生存曲线——KM分析

    2020-03-13 17:47:40
    R语言生存曲线
  • 生存曲线怎么看

    千次阅读 2020-08-06 10:35:08
    在临床研究中,生存曲线(又称Kaplan-Meier曲线)是最常用图片之一,旨在描述各组患者的生存状况。一张漂亮的、专业的生存曲线图不仅可以令编辑、读者和审稿专家眼前一亮,同时也能为论文增色不少。然而,对于一些...

    在临床研究中,生存曲线(又称Kaplan-Meier曲线)是最常用图片之一,旨在描述各组患者的生存状况。一张漂亮的、专业的生存曲线图不仅可以令编辑、读者和审稿专家眼前一亮,同时也能为论文增色不少。然而,对于一些新手而言,生存曲线却显得十分陌生,不知道为何要绘制生存曲线,也不知道该如何解读生存曲线的结果。在此,笔者结合自己长期做统计分析和绘制生存曲线的经验,浅谈如何解读生存曲线。

    1,为什么要绘制生存曲线

    可能有读者要问,为什么要绘制生存曲线?如果想要比较两组患者的预后,我直接比较两组的生存时间不就可以了。比如,我要比较早期肺癌和晚期肺癌的总体生存率,我可以将所有的病人随访到死,这个每个病人就有一个生存时间,我直接用t检验或者Mann-Whirney U检验等直接比较生存时间就行了,还绘制什么生存曲线。

    然而,事情并不是那么简单!预后分析往往要考虑很多因素,比如病人失访了(失去联系),最终无法明确病人是否死亡。也有可能病人并不是死于预定的观察终点,比如研究肺癌预后,设定的观察终点是肺癌相关死亡事件,但问题在于有的病人中途可能死于车祸或心血管疾病,这类病人自然就没有观察终点了。在随访中,这些没有观察终点的案例叫失访案例,或者删失案例。当然,还有一个最重要的问题,就是有的疾病生存时间较长,比如睾丸癌,随访二三十年也未必能等到病人全部死亡。在这些情况中,如果仅仅比较生存时间,显然是不可能,也不合理的。打个极端的比方:某人对10例晚期和10例早期肺癌进行了1年的随访,旨在确定早期病人的预后是否好于晚期病人。作者对病人进行随访后发现,晚期病人在1年的时间截点上(刚好在1年的时候)全死了,而早期病人在1年的时间截点上还全部存活。如果单纯比较生存时间,早期和晚期病人的存活时间都是1年,显然没有差异。但是在这里例子中,早期病人的预后显然是优于晚期病人的。

    也有人说,我不比较生存时间,而是比较1年生存率,5年生存率,这又何尝不可。这确实是一种预后分析的方法,但是其在方法学上有瑕疵,并不是最佳的预后分析方案。再打一个极端的比方,某研究者对甲乙两组肺癌病人进行随访,比较两组患者的1年生存率。随访1年后,两组病人均死亡,死亡率是100%,如果单独比较1年生存率,两组患者的死亡率显然是一样的。但是问题在于:甲组病人全部是在随访后3天就死了,而乙组病人全部是在第364天死亡的。其实乙组病人比甲组病人多活了近一年,其预后显然更好。这个案例其实就是告诉我们,生存分析要考虑每个时间点上病人的生存概率,而不是某一个特定的时间点。

    其实说了这么多废话,举了这么多例子,就是想说明一个问题:随访资料是有删失值的,比较病人的预后不能直接拿随访时间说事,生存曲线才是最佳分析方案。

    2,如何解读生存曲线
    在这里插入图片描述

    图1

    上图(图1)是笔者随手从某杂志上截取的一张生存曲线图。这项研究的目的之一评价sST2(一个实验室指标)与呼吸困难人群预后,作者选择观察终点为全因死亡率。研究将251例呼吸困难人群划分为两个组,sST2增高组(n=126)和降低组(n=125)。用生存曲线描述了两组病人的生存状况。生存曲线的横坐标是观察时间,纵坐标一般是生存率。曲线上的每一个点代表了在该时间点上病人的生存率。在A点中,由于才开始随访(X轴为0),还没有患者死亡,所以两组患者的生存率都是100%。但是我们发现,在随后的随访过程中,sST2增高组(sST2>median)的死亡率在任何一个时间均高于sST2降低组(sST2=<median)。以第200天为例,sST2降低组的生存率约为93%(B点),而增高组的生存率则为70%左右(C点)。从这个数据中,我们大致可以判断sST2降低组的全因死亡风险要低于增高组。但是这仅仅是推测,无法排除两组患者全因死亡风险的差异是由于随机抽样造成的。要证明这个推测,需要在统计学上进行假设检验。目前对生存曲线的假设检验一般采用logrank检验,该检验在常用的统计软件中均可实现,具体的操作过程我会另辟新文进行演示,敬请关注。Logrank检验的统计学原理比较复杂,对临床研究工作者来说,不必完全掌握,只需要了解该检验的统计学结论和临床解释即可。经logrank检验后发现P<0.05,表明两组患者的生存状况(准确地说是观察终点的发生状况)的差异不能用抽样误差来解释。换而言之,分组因素才是导致两条曲线生存率出现差异的原因所在。以上图为例,经过logrank检验后发现P<0.05,作者可以理直气壮地告诉读者:sST2降低组和增高组的总体生存率是完全不同的,sST2降低组的总体生存率要好于sST2增高组。

    当然,生存曲线也可以是3组,4组甚至多组,在图形绘制和统计分析的操作上与两组分析如出一辙,在此不再赘述。下面是笔者对生存曲线一些特性的认识,便于大家认识和理解生存曲线。内容虽然简短,但是均为“干货”。

    2.1 样本量越大,生存曲线越平滑,误差越小。下图(图2)是我从另一篇文章中截取的总体样本量为99的研究,其曲线的平滑程度显然比不上前述样本量为251的研究。
    图2
    2.2 一般而言,两条曲线之间的距离越大(分叉越大),说明两组患者预后(终点事件发生率)的差别越大,也越容易做出统计学差异。其实这个和t检验差不多:两组数据的均数差异越大,越容易有统计学差异。

    2.3 随访时间越长,越容易做出统计学差异。这个问题其实也很好理解,一个极端的比方就是,在上述sST2例子中,假定随访时间为1天,而非400天,两组患者生存率的差异显然是没有统计学意义的。国际上,随访时间越长的研究越容易发表在高水平的杂志上,原因与此有关。

    2.4 样本量越大,越容易做出统计学差异。样本量越大,误差(标准误)越小,当然越有统计学意义。其实这相当于在t检验中,两组数据的标准差越小,当然越容易得到阳性统计学结果。

    2.5 生存曲线与X轴有交叉,并不意味着研究对象全部死亡(发生终点事件)。实际上,在生存曲线中,每一个时间点上只要有病人死亡(或者发生终点事件),曲线就会下降一定的幅度。下降的幅度具体有多大,取决于该时间点上病人的死亡例数和后续随访时间(该时间截点以后的时间)病人的样本量。这句话可能有些晦涩和难于理解,举一个通俗的例子:某研究者随访了10例病人,随访第一天就有两个病人去世了,第一天的生存率就是80%,即曲线下降了20%的幅度。到随访第二天,4个病人失访了。由于只是失访,而不是死亡,所以生存曲线不会下降,而是继续水平延生。到第三天的时候,还有随访资料的病人仅有4个。而恰好就在这一天,两个病人去世了,曲线下降的幅度就应该是剩余幅度的50%(四个病人中的两个)。由于第二天仅仅只有4人失访,而不是死亡,所以生存曲线在第二天的生存率仍然是80%。到第三天时候,曲线的下降幅度就应该是80%的50%,即下降40%。假定第四天的时候,剩下的两个病人都死了,所有研究对象在第四天的生存率自然是0%。实际上,这些病人的生存曲线图就是如下图(图3)所示:
    在这里插入图片描述

    图3

    从图中(图3)我们可以看出:1)这个生存曲线图太不平滑了,主要是样本量太小;2)生存曲线虽然与X轴相交,但是并不是所有的研究对象都死亡了,因为其中有4人属于失访病例,即删失结果。我们经常看到很多生存曲线与X轴并无交点,实际上就是经过长时间的随访后,仍有大量病人存活,无法明确这些病人具体的死亡时间(删失结果)。在上图中,我们假定第四天的时候,剩下的两个病人还是存活的,但是研究也结束了(不再对病人进行随访),则其对应的生存曲线图应该为下图(图4):
    在这里插入图片描述

    图4

    因此,生存曲线是否与X轴有交叉,主要取决于随访时间最长的那位患者是生存还是死亡,若为死亡,则自然与X轴相交。

    2.6 理想的生存曲线应该标明删失值。在上述例子中,我们注意到,生存曲线第二天和第四天上面有一个突出的小点,表示表示该点有删失病例。实际上,这才是最正规、最具有信息量的生存曲线。遗憾的是,目前刊登在很多杂志,包括部分国际杂志上的生存曲线都不按照这个规则绘制,作者总是有意无意地抹去删失病例的“凸点”。

    2.7 在生存曲线的下方,最好能标识下每组的样本量,分组的依据(比如sST2的平均值)等,因为这些细节可以方便循证医学家对论文的数据进行提取和合并,这些细节有助于增强自己论文的学术穿透力。

    笔者| 胡志德,Journal of Thoracic Disease学术沙龙委员、Section Editor (Systematic Review and Meta-analysis),工作于济南军区总医院实验诊断科,现为第二军医大学临床检验诊断学博士研究生,以第一作者或通讯作者身份发表SCI论文十余篇,并主持国家青年科学基金一项。

    展开全文
  • 根据生存曲线的估计,可以推断出相比组之间存活时间的差异,因此生存曲线非常有用,几乎可以在每个生存分析中看到。 例 在我们将对象放入ggsurvplot()函数之后,我们可以创建简单的生存曲线估计。让我们来看看患...

    原文链接:http://tecdat.cn/?p=6087

    原文出处:拓端数据部落公众号

    根据生存曲线的估计,可以推断出相比组之间存活时间的差异,因此生存曲线非常有用,几乎可以在每个生存分析中看到。

     

     我们可以创建简单的生存曲线估计。让我们来看看患有卵巢癌(卵巢浆液性囊腺癌)和患有乳腺癌(乳腺浸润癌)的患者之间存活时间的差异 。

     
    fit <- survfit(Surv(times, patient.vital_status) ~ admin.disease_code,
                   data = BRCAOV.survInfo)
     

     

    这个简单的图表以优雅的方式呈现了生存概率的估计值,该估计值取决于根据癌症类型分组的癌症诊断天数和信息风险集表,其中显示了在特定时间段内观察的患者数量。生存分析是一个特定的数据分析领域,因为事件数据的审查时间,因此风险集大小是视觉推理的必要条件。

    
    ggplot(
       fit,                     # 生存数据对象.
       data = BRCAOV.survInfo,  # 生存数据. 
       risk.table = TRUE,       # 风险表.
       pval = TRUE,             #    Logrank检验p-value
       conf.int = TRUE,         # 生存曲线置信区间.
       xlim = c(0,2000),         
                                #生存预测.
       break.time.by = 500,      
       ggtheme = theme_minimal(),  
     risk.table.y.text.col = T,  
      risk.table.y.text = FALSE  
    )

     

    每个参数都在相应的注释中描述,但我想强调xlim控制X轴限制但不影响生存曲线的参数,这些参数考虑了所有可能的时间。

    比较

    基础包

    看起来很漂亮.....


    参考文献

    1.R语言绘制生存曲线估计|生存分析|如何R作生存曲线图

    2.R语言生存分析可视化分析

    3.R语言如何在生存分析与Cox回归中计算IDI,NRI指标

    4.r语言中使用Bioconductor 分析芯片数据

    5.R语言生存分析数据分析可视化案例

    6.r语言ggplot2误差棒图快速指南

    7.R 语言绘制功能富集泡泡图

    8.R语言如何找到患者数据中具有差异的指标?(PLS—DA分析)

    9.R语言中的生存分析Survival analysis晚期肺癌患者4例

    展开全文
  • 生存分析及生存曲线_2021-01-30

    千次阅读 2021-01-30 17:18:23
    这条曲线(或多条曲线)往往是呈现从高到低(由左到右)的发展趋势,往往最后以病人的死亡事件(death event)而结束,当然这里的事件也可以是肿瘤转移、复发、病人出院、重新入院等任何可以明确识别的事件。...

    生存分析(英文:Survival Analysis),是生物信息学分析中常用到的一种重要方法,主要分析场景如:不同组癌症病人在一种或者一种以上的变量作用下其生存概率随着记录时间发展而发生的变化或者走势。这条曲线(或多条曲线)往往是呈现从高到低(由左到右)的发展趋势,往往最后以病人的死亡事件(death event)而结束,当然这里的事件也可以是肿瘤转移、复发、病人出院、重新入院等任何可以明确识别的事件。

    生存分析要解决的核心问题就是各组样品数据在一个或者多个变量作用下它们生存概率随着观测时间如何发展(变化)以及它们之间的可比性。

    要解决这两个主要问题:(1)各自变化;(2)之间比较

    再此之前,说明几个概念:

    (1)生存概率(Survival probability),指的是研究对象从试验开始直到某个特定时间点仍然存活的概率,可见它是一个对时间t的函数,定义之为 S(t);

    (2)风险概率(Hazard probability ),指的是研究对象从试验开始到某个特定时间 t 之前存活,但在 t 时间点发生观测事件如死亡的概率,同样,它也是对时间 t 的函数,定义为 H(t)。

    接下来要讲的 Kaplan-Meier 生存概率估计主要关注 S(t),而后面讲到的 Cox 风险比例模型则关注 H(t)。

    (3)数据删失(Censored Data),是指生存分析记录过程中发生数据记录丢失或者无法记录的情况

    主要由以下原因造成的:

    失访:指失去联系;

    退出:死于非研究因素或非处理因素而退出研究;

    终止:设计时规定的时间已到而终止观察,但研究对象仍然存活。

    数据删失类型有:

    右删失(Right Censoring):只知道实际寿命大于某数;

    左删失(Left Censoring):只知道实际寿命小于某数;

    区间删失(Interval Censoring):只知道实际寿命在一个时间区间内。

    需要引入统计学方法:包括:

    1.寿命表(Life Table)

    表格统计:

    A 列是从生存试验开始起,持续的观测时间,星号代表在该时间有删失数据发生;

    B 列是指在 A 列对应的时间开始之前所有存活的研究对象个数,也可以叫做 at risk 的人数,表示当前具有死亡风险的有效人群,是排除了已经死亡和删失的数据之后剩余的人数;

    C 列为恰好在 A 列对应的时间死亡的人数;

    D 列即表明在该时间点删失的个数。

    第一行则可以解读为,在 1年这个时间点之前,本来有 100个患者,在 1 这个时间点(或其之后的一小段时间区间)死亡了10个人,没有删失数据,意味着还剩 90 人;

    随后,只要有新增死亡或删失数据,则在表中新建一行,记录时间和人数。

    所以紧接着第二行可以解读为,在2年这个时间点之前,at risk at start of study人数为90人,在2这个时间的死亡了11人,没有删失数据,还存活79人;再随着时间发展继续记录:第三行3*,说明这一个时间点是有数据删失情况发生的,在3年这个时间点之前,at risk人数为79人,然后在3年这个时间点死亡了8人,数据删失有两人,这个两个人可能为:失访、退出或者终止。

    这个生存分析寿命表一直记录下去,直到试验结束。于是我们就有了试验数据。

    2.Kaplan-Meier 生存概率估计(Kaplan-Meier survival estimate)

    下面是Kaplan-Meier公式:

    Kaplan-Meier生存曲线的生存率公式如下,生存概率 S(ti) 等于上一个时间点 i-1 的生存概率乘以1与di/ni差值的乘积,ni是ti点前存活总人数,di是事件在ti发生数目,ti 表示第 i 个时间点。S(ti-1) 表示在上一个时间点 i-1 的生存概率。

    我们利用公式计算一下实例数据的ti时间点不死亡概率(E列)以及累积的生存概率(F列)如下表:

     

    该表中  E 列即不死亡概率,F 列则表示累积的生存概率,可以看到随着时间增加,死亡人数增多,越到后期,生存概率越低,这是符合常理的。另外需要注意,在删失发生时,生存概率时没有变化的。

     

    通常生存曲线是多条线的,生存曲线(Survival curve)如下图所示:

    上图测试数据绘制的生存曲线,红色线为性别代码1分组,蓝宝石色为性别代码为2分组,不同组别对应的中位生存时间不同,可以一定程度上反应出不同组别死亡风险的不同。这是解决了各组如何变化的问题。那么如何比较二者之间差异是否显著呢?一般我们可以采用 Logrank 统计方法来对生存数据进行统计分析。

    3.Logrank检验 和 Breslow 检验(Wilcoxon 检验)

    Logrank 方法是由 Nathan Mantel 最初提出的,它是一种非参数检验,中文翻译为对数秩检验,主要用来比较两组样本的生存时间分布的差异。

    Logrank 检验的零假设是指两组的生存时间分布完全一致,当我们通过计算拒绝零假设时,就可以认为两组的生存时间分布存在统计学差异。我们可以通过以下公式计算某组病人在某个时间点的期望死亡人数:

     

    其中 E1t是指第一组中,在时刻 t,期望死亡人数;

    N1t 指第一组中 t 时刻 at risk的人数,即 t 之前的存活人数;

    Ot则指两组(第一组和第二组)总的观测到的实际死亡人数;

    Nt 指两组总的 at risk 的人数,或 t 时间之前两组的总人数。

    有了每个时间点的死亡期望值之后,我们构造如下的卡方值:

     

    这里分子上的 ΣOjt 是指在 j 组所有时间点的观测死亡人数相加之和,是对不同时间点 t 对应的观测值的一个累加,比如 t 分别对应 1 天、2 天、3 天等等;ΣEjt 是指在 j 组所有时间点期望死亡人数相加之和。观测人数和期望人数的差值,就代表了实际情况与我们假设情况是否一致,如果假设是对的,即不同组的生存时间分布是完全一致的,那么观测人数和期望人数的差值会是非常小的。因为差值有正有负,所以对它取平方,这样就不会出现抵消的情况。

    再加一个分母即 ΣEjt,相当于转换成百分比;最后把不同组别得到的值加起来,就得到 X2 值。通过查表可根据 X2 值来判断是否需要拒绝零假设。

    介绍完 Logrank 检验之后,我们再介绍另一种方法:Breslow 检验,其实也就是 Wilcoxon 检验,与 Logrank 不同的是,在每个时间点统计观测人数和期望人数时,他会给它们乘以一个权重因子,即当前时间点的 at risk 的总人数,然后再把所有时间点加起来去统计卡方值。

    可以想象随着时间点越靠后,at risk 的总人数会越小,因此权重越少,对 X2 值的贡献就越小。因此 Breslow 检验对试验前期的差异要更加敏感,而相对来说 Logrank 对后期相对更敏感一些,因为它的所有时间点的权重参数都是1。

    在实际使用中,我们可以使用不同的方法从多个角度对数据去进行探究。

    4.Cox 比例风险回归模型

    Cox比例风险回归模型(Proportional l Hazards Regression analysis 或 Cox Proportional-Hazards Model),Cox 模型是一种半参数模型,因为它的公式中既包括参数模型又包括非参数模型。简单说下参数模型和非参数模型的相同与区别。相同点是它们都是用来描述某种数据分布情况的;不同点在于,参数模型的参数是有限维度的,即有限个参数就可以表示模型分布,比如正态分布里的均值和标准差;而非参数模型的参数则属于某个无限维的空间,无法用有限参数来表示,Cox模型公式如下:

     

    其中 t 是生存时间,x1, x2 到 xp 指的是具有预测效应的多个变量,b1, b2到 bp则是每个变量对应的 effect size 即效应量,可以理解为结果的影响程度,后面会解释。h(t) 就是不同时间 t 的 hazard,即风险值。而 h0(t) 是基准风险函数,也就是说在其他协变量 x1, x2, …, xp 都为 0 时,即不起作用时,衡量风险值的函数。

    根据公式我们可以看到指数部分是参数模型,因为其参数个数有限,即b1, b2到 bp,而基准风险函数 h0(t) 由于其未确定性,可根据不同数据来使用不同的分布模型,因此是非参数模型。所以说, Cox 模型是一种半参数模型。

    h(t) 首先是基于时间变化的,t 是自变量;对于某个病人,不同时间的死亡风险是不一样的,这非常好理解,肿瘤病人肯定是随着病程的进展,复发率、死亡率都会不断提高。我们可以回忆以下之前做 Kaplan-Meier 的那个表格,在最后的时间点生存率也越来越低,意味着风险越来越高。其次除了时间,不同年龄、性别、血压等指征不同的病人,死亡风险也不一样。

    比如这次的新冠病毒 Covid-19,年纪越大致死率越高,这也就是为什么 Cox 模型要把诸多可能影响生存率的因素都当作协变量引入到公式中去,在该公式中即 x1, x2, …, xp。我们的主要目标是通过一定方法来找到合适的 h0(t),以及所有协变量的系数 b1, b2, …, bp。实际上cox 模型是需要用到极大似然估计等计算方法,首先构建特定的似然函数,通过梯度下降等方法来求解模型的参数,使得函数求解值最大。

    5.complementary log-log plot

    既然不同人之间的风险比例固定,那么一个最简单的例子就是任意分组情况下,两组的 Kaplan–Meier 曲线不应该相交叉,如果曲线相交叉,说明两组的生存概率关系随事件发生了变化,亦即风险比随时间发生变化,与假设相悖。如下图所示:

     

    然而,在实际应用中,由于样本量较小时,生存曲线会引入较大的误差,因此该判断方法有可能失效。一个更加复杂的方法为 complementary log-log plot,感兴趣的同学可以搜索学习;对于生存分析 ,除了 Cox 模型外,还有一些其他可用的参数模型。与 Cox 模型不同,这些参数模型往往给定了可能的风险函数分布,比如指数分布、Weibull 和 Gompertz 分布,然后进一步去估计对应的模型参数。而 Cox 模型只能得到有限信息,如风险比及其显著性。使用这些全参数模型的缺点也是明显的,即固定的分布不一定能满足实际的数据情况,可能带来更多的误差。再实际使用情况中,可根据不同情况进行选择。

    下面谈一下使用医药效果被试试验记录数据进行生存分析R代码方法,已经有大牛实现了分析和绘图方法,理解原理,然后会用就可以了。

    library(survival)

    library(survminer)

    help(package="survival")

    print(head(pbc))

    # id time status trt      age sex ascites hepato spiders edema bili chol

    # 1  1  400      2  1 58.76523  f      1      1      1  1.0 14.5  261

    # 2  2 4500      0  1 56.44627  f      0      1      1  0.0  1.1  302

    # 3  3 1012      2  1 70.07255  m      0      0      0  0.5  1.4  176

    # 4  4 1925      2  1 54.74059  f      0      1      1  0.5  1.8  244

    # 5  5 1504      1  2 38.10541  f      0      1      1  0.0  3.4  279

    # 6  6 2503      2  2 66.25873  f      0      1      0  0.0  0.8  248

    # albumin copper alk.phos    ast trig platelet protime stage

    # 1    2.60    156  1718.0 137.95  172      190    12.2    4

    # 2    4.14    54  7394.8 113.52  88      221    10.6    3

    # 3    3.48    210    516.0  96.10  55      151    12.0    4

    # 4    2.54    64  6121.8  60.63  92      183    10.3    4

    # 5    3.53    143    671.0 113.15  72      136    10.9    3

    # 6    3.98    50    944.0  93.00  63      NA    11.0    3

    # Create the survival object.

    survfit(Surv(pbc$time,pbc$status == 2)~1)

    # Call: survfit(formula = Surv(pbc$time, pbc$status == 2) ~ 1)

    #

    # n  events  median 0.95LCL 0.95UCL

    # 418    161    3395    3090    3853

    # Plot the graph.

    plot(survfit(Surv(pbc$time,pbc$status == 2)~1))

    fit <- survfit(Surv(time, status)~sex, data=pbc)

    print(fit)

    # Call: survfit(formula = Surv(time, status) ~ sex, data = pbc)

    #

    # 232 observations deleted due to missingness

    # n events median 0.95LCL 0.95UCL

    # sex=m  27    24  1297    1012    2386

    # sex=f 159    137  1197    1000    1576

    ggsurvplot(fit, data = pbc) # 绘图

     

    ### Customized survival curves

    ggsurvplot(fit, data = pbc,

              surv.median.line = "hv", # Add medians survival

              # Change legends: title & labels

              legend.title = "Sex",

              legend.labs = c("Male", "Female"),

              # Add p-value and tervals

              pval = TRUE,

              conf.int = TRUE,

              # Add risk table

              risk.table = TRUE,

              tables.height = 0.2,

              tables.theme = theme_cleantable(),

              # Color palettes. Use custom color: c("#E7B800", "#2E9FDF"),

              # or brewer color (e.g.: "Dark2"), or ggsci color (e.g.: "jco")

              palette = c("lightblue", "lightgreen"),

              ggtheme = theme_bw() # Change ggplot2 theme

    )

     

    # Change font size, style and color at the same time

    ggsurvplot(fit, data = pbc,  main = "Survival curve",

              font.main = c(16, "bold", "darkblue"),

              font.x = c(14, "bold.italic", "red"),

              font.y = c(14, "bold.italic", "darkred"),

              font.tickslab = c(12, "plain", "darkgreen"))

     

    个人水平有限,仍在不断学习中,如有新认识、收获会及时更新博客,欢迎纠错、指正,最后感谢网上牛人的博客分享!

    展开全文
  • R语言绘制生存曲线

    2021-09-27 11:20:14
    R语言绘制生存曲线图 KMunicate是支持按照Morris等人的KMunicate研究推荐的方式生成Kaplan-Meier图. 1958年,Edward L. Kaplan 和Paul Meier也首次在临床研究中提出了生存曲线的概念,又被称作Kaplan-Meier曲线,...

    R语言绘制生存曲线图

    KMunicate是支持按照Morris等人的KMunicate研究推荐的方式生成Kaplan-Meier图. 1958年,Edward L. Kaplan 和Paul Meier也首次在临床研究中提出了生存曲线的概念,又被称作Kaplan-Meier曲线,主要用来对各组患者的生存状况进行描述生存曲线,是最常用图片之一,旨在描述各组患者的生存状况。

    代码如下:

    1.下载KMunicate包并导入

    BiocManager::install("KMunicate")
    library(KMunicate)
    

    2.使用KMunicate包里自带的数据集 brcancer

    data("brcancer", package = "KMunicate")
    str(brcancer)
    

    3.使用survival包中的 survfit 函数拟合 Kaplan-Meier 曲线

    fit <- survfit(Surv(rectime,censrec) ~ 1,data =brcancer)
    fit
    

    4.定义绘图的水平轴,例如在时间零和最大观察时间之间定义 4个等距间隔。

    pt <- seq(0,max(brcancer$rectime),length.out = 4)
    pt
    

    5.最后使用KMunicate函数,通过fit和pt两个参数绘制曲线

    KMunicate(fit = fit,time_scale = pt)
    

    如果 survfit 对象中有协变量,将自动生成Multiple-Arms plot。

    fit1 <- survfit(Surv(rectime, censrec) ~ hormon, data = brcancer)
    fit1
    KMunicate(fit = fit1,time_scale = pt)
    

    6.KMunicate() 函数包含一些用于自定义生成的绘图选项,我们根据代码可以看到需要设置的参数非常少,并且通过‘.xxx’的参数形式还可以和ggplot2包进行交互,让绘图更加的个性化!将 ggplot2 theme传递给 .theme 参数:

    KMunicate(fit = fit1, time_scale = pt, .theme = ggplot2::theme_minimal())
    

    7.通过’.color_scale’和’.fill_scale’定义颜色以及填充,参数type表示颜色样式 有seq 、 div 、qual三个中选一个,palette 表示颜色数量 数字直接表示颜色个数也可以用相对应的名称

    KMunicate(fit = fit1,time_scale = pt,
              .color_scale = ggplot2::scale_color_brewer(type = "seq",palette = "Set1"),
              .fill_scale = ggplot2::scale_fill_brewer(type = "seq",palette = "Set1"))
    

    8.我们可以通过 .alpha 参数自定义置信区间的透明度:

    KMunicate(fit = fit1,time_scale = pt,
              .theme = ggplot2::theme_minimal(),
              .color_scale = ggplot2::scale_color_brewer(type = "seq",palette = "Set1"),
              .fill_scale = ggplot2::scale_fill_brewer(type = "seq",palette = "Set1"),
              .alpha = 0.7)
    

    9.可以通过 .linetype_scale 参数自定义线型比例:

    KMunicate(fit = fit1,time_scale = pt,
              .linetype_scale = ggplot2::scale_linetype_manual(values =c("longdash", "twodash"))
    )
    

    10.通过 .annotate 参数添加自定义注释,annotate 里面用"text"类型,然后x,y分别代表文本的位置。label的内容是文本的实际内容

    KMunicate(fit = fit1,time_scale = pt,
              .annotate = ggplot2::annotate(geom = "text", x = 360, y = 0.6, label = "Kaplan-Meier"))
    

    以上就是关于生存曲线图(Kaplan-Meier图)的分享啦!如果对生信绘图感兴趣的小伙伴可搜索微信公众号“作图帮”或者添加“小图”的微信,图图期待你们的加入!

    展开全文
  • R绘图笔记 | 生存曲线的绘制

    千次阅读 2020-11-15 15:53:30
    R绘图笔记 | 散点分布图与柱形分布图 R绘图笔记 | 箱形图的绘制 R绘图笔记 | 小提琴图与漂亮的云雨图绘制 R绘图笔记 | 多数据系列的箱型图与带抖动散点的多数据系列箱型图 R绘图笔记 | 热图绘制 这里介绍生存曲线的...
  • 今天的文章,我们更进一步地来学习如何看懂生存函数和生存曲线。 生存概率和死亡概率 在进入正题之前,我们需要首先明确两个概念:生存概率与死亡概率。 1. 生存概率(survival probability),用p表示,是指某...
  • R语言生存分析之组间生存曲线的对比: Log-Rank检验、绘制漂亮的生存曲线 Log-rank检验是比较两条生存曲线的常用方法。 要比较两种手术方式是否有差异,且仅有一个分析因素(手术方式),可绘制Kaplan-Meier生存...
  • #首先新建一个列表,包含你想要拼合的生存对象,记住一定要命名fit1、fit2等,如下所示 fitlist<-list(fit1 = survfit(Surv(survivaltime,outcome)~variable1, data = yourdata), fit2 = survfit(Surv
  • R语言绘制Kaplan-Meier生存曲线

    千次阅读 2021-02-26 10:15:34
    我们在临床中经常使用生存曲线来表示患者的累积生存率或发病率,如下图所示,Kaplan-Meier生存曲线能够很好的表示出患者不同时间的发病率,生存率等关键数据,让人一目了然。 今天我们来演示一下如何做出像上面...
  • 生存曲线

    千次阅读 2019-09-30 19:17:52
    # 用kmfit2 (my.surv~TUMOR_STAGE_2009)来做某一个因子的KM生存曲线。 # 用 survdiff(my.surv~type, data=dat)来看看这个因子的不同水平是否有显著差异,其中默认用是的logrank test 方法。 # 用coxph(Surv(time, ...
  • 文章目录1 数据类型1.1 删失数据1.1.1 右删失1.1.2 左删失1.1.3 区间删失1.2 完全数据(Complete data)2 生存分析几个核心概念2.1 生存概率2.2 风险概率2.3 生存/风险函数 两者之间关系2.4 其他生存时间相关概念3 ...
  • 生存分析关于如何在R中进行生存分析的问题,在前面的推文中已经详细的介绍过。详见:survminer | 生存分析及其可视化ggsurvplot()生成的结果。很多同学直接使用ggsave(...
  • 1928 年生存曲线(又称存活曲线)首次由美国生物学家雷蒙·普尔提出,它可以反映不同种群在每个年龄段生存的数目。1958 年,Edward L. Kaplan 和 Paul Meier 也首次在临床研究中提出了生存曲线的概念,又被称作 ...
  • 利用kmeans方法进行wpbc生存曲线提取
  • python-生存曲线数据转换器

    千次阅读 2018-06-11 13:06:00
    相信很多人跟我一样在做存活图的时候被前期的数据处理折磨的不行,特别是样本较多的情况下,把各个时间的死亡数转换成做存活图需要的格式,太浪费时间了。于是用python写了一个小软件,将原始数据转换成做图的数据...
  • 生存曲线的估计方法(1):先看懂这个表,比如,前面我们讲过: 好比身高的样本均数,抽取的第一拨人计算的平均身高和第二拨人的平均身高是有差异的。 因为它们都是样本统计量,所以会随着样本的变化而变化。...
  • 因此我们要按照group等于“miR-137”和“control”分组,分别观察对应的生存曲线: groups = df['group'] ix = (groups == 'miR-137') kmf.fit(df['T'][ix], df['E'][ix], label='miR-137') ax = kmf.plot() ...
  • #age 分组画生存曲线 fit <- survfit(Surv(time, status) ~ age, data = lung) summary(fit) res.cut <- surv_cutpoint(lung, time = "time", event = "status", variables = "age") summary(res.cut) res....
  • 【SAS】生存曲线 Survivorship curve

    千次阅读 2019-04-11 01:17:04
    目录请看下面[↓_↓]生存曲线基本概念生存曲线SAS操作编程代码文章来源 生存曲线基本概念 生存曲线又称存活曲线(Survivorship curve、Kaplan-Meier curve) 生存曲线SAS操作 编程代码 ODS GRAPHICS ON; PROC ...
  • 如果你要画生存曲线,默认的曲线图又不符合你的要求,你就需要使用模板进行自定义设置。
  • 因此,分别采用A和B对这些病人进行诊断,形成了两套数据,并已录入GraphPad中(生存曲线绘制教程,点击查看),如下: (曲线A ↑) (曲线B ↑) 现在要做的就是如何将曲线A和曲线B整合到一个坐标系之中,...
  • 用survminer优雅的画生存曲线

    万次阅读 2018-09-08 21:24:44
    生存曲线绘制 #Survival Curves #The ggsurvplot() function creates ggplot2 plots from survfit objects. data(lung) head(lung) inst time status age sex ph.ecog ph.karno pat.karno meal.cal wt.loss 1 3 ...
  • 利用UCSC Xena做TCGA数据库的生存曲线分析 UCSC的分析入口 打开UCSC Xena网站:UCSC Xena。(网页速度可能不太稳定) 点击界面的GET STARTED,在打开的界面右上角点Launch Xena Browser,界面如图,进入分析界面。 ...
  • 前面两篇文章初步介绍了生存分析基本入门的内容,今天我们来看看实际应用中怎么估计生存率。 具体的方法和术语我们先不讲,首先来看例子。 案例:为了解肺癌患者接受某种治疗后的生存状况,研究者收集了12名肺癌...
  • code_k-means_WPBC生存曲线_生存_源码
  • 1 引言 在比较性的纵向临床研究中,主要终点往往是发生特定临床事件的时间,如死亡、心衰住院、肿瘤进展等。...基于限制性平均生存时间(RMST)的组间总结指标是风险比例或其他基于模型的措施的..
  • Survivor_curve_privacy_prototype 用于原型化隐私保护生存曲线的代码库 surv_test 用于保护隐私的生存曲线原型的脚本 expand_nomissing_study1.csv SURVIVAL综合数据中的数据(取自DataSHIELD VM)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,093
精华内容 4,437
关键字:

生存曲线