R数据可视化14:生存曲线图

Python017

R数据可视化14:生存曲线图,第1张

我们经常用随机森林等机器学习又或者是其他数据挖掘的方法寻找某些疾病的biomarker或者候选基因。但是来自临床的数据包括了生存事件等信息,数据的内容有所不同,所以需要一些和之前不太一样分析方法,其中常见的就是通过制作生存曲线图获取结论。

生存曲线可以帮助我们回答许多问题:参与者生存5年的概率是多少?两组之间的生存率是否存在差异(例如,在临床试验中分配给新药还是标准药的两组之间)?某些行为或临床特征如何影响参与者的生存机会?

通常,在这类分析中,我们会关注特定事件(如死亡或疾病复发)的事件,并比较两组或更多组患者发生这些特定事件的事件。

可以看到上图显示了经常玩棋类游戏的老年人和很少玩这类游戏的老年人之间的痴呆风险Kaplan-Meier曲线。纵轴为非痴呆老人的比例,横轴为跟踪的年数,从图中可以看到经常玩棋类游戏的老年人患痴呆的风险较低。

在制作生长曲线之前,我们需要首先了解几个相关的术语

参考: R语言-Survival analysis(生存分析)

Event(事件): 指在随访过程中发生的某个结果,如癌症研究中,可能为复发(Relapse)、恶化(Progression)、死亡(Death)

Survival time(生存时间): 指某个事件开始到终止的时间,在癌症研究中经常用到的几个指标:

Overall survival(OS):

指从开始到任意原因死亡的时间,一般常见的5年生存率、10年生存率都是基于OS计算的

Progression-free Survival(PFS,无进展生存期):

指从开始到肿瘤发生任意进展或者死亡的时间,可用于评估治疗方法的临床效益

Time to Progress(TTP,疾病进展时间):

从开始到肿瘤发生任意进展或者进展前死亡的时间,与PFS相比仅包括肿瘤的恶化,而不包括死亡。

Disease-free Survival(DFS,无病生存期):

指从开始到肿瘤复发或任何原因死亡的时间,常用于根治性手术治疗或放疗后的辅助治疗的评估

Event Free Survival(EFS,无事件生存期):

指从开始到发生包括肿瘤进展、死亡、治疗方案的改变等各种事件的时间

Censoring(删失): 一般指不是由于死亡造成的数据丢失,可能是由于失访、非正常原因推出、时间终止而事件未发生等,一般在展示时用“+”表示

生存分析的方法一般可以分为三类:

1、参数法:已知生存时间的分布模型,根据数据估计模型参数,最后以分布模型计算生存率

2、半参数法:不需要知道生存时间的分布,但是仍通过模型来评估影响生存率的因素,常见方法如 Cox回归模型

3、非参数法:不需要知道生存时间的分布,根据样本统计量估计生存率,常见方法如 Kaplan-Meier方法、寿命法

具体地,我们通过同样一个例子介绍常用的Kaplan-Meier方法和寿命法的异同。

例子:一项探究死亡时间的前瞻性队列研究,研究涉及20位65岁以上的参与者,招募时间为5年,整个研究进行长达24年的随访直至死亡、研究结束或退出研究(失访)。因此,如果参与者是在研究开始后加入的,他们的最长随访时间应该少于24年。具体数据如下,其中有6位参与者死亡,3位接受了完整的随访(24年),其余11位由于在研究开始后加入或失访而少于24年随访:

寿命法

寿命法经常用于保险行业中估计预期寿命并设置保费。不过,我们只关注生物领域的使用,我们称为随访生命表,该表记录了参与者在队列研究或临床试验中在预定的随访期内的经历,直到目标事件发生或研究结束为止。

要构建生命表,我们要将随访时间分割成间距相等的几组,上述例子中我们随访的最长时间为24年,所以我们考虑5年一个间隔(0-4,5-9,10-14,15-19和20-24年)。然后统计每个时间间隔开始时活着的参与者人数,和该期间死亡人数和每个时间间隔中删失的人数。

然后,我们来定义几个参数:

N t =在时间间隔t内没有发生目标事件的但处于风险中的人数(如本研究中目标事件为死亡,而参与者都处于可能死亡的风险之中)

D t =在时间间隔t内死亡的人数

C t =在时间间隔t内删失的人数

N t * =在时间间隔t内有风险的参与者的平均数(计算公式为:N t * =N t -C t /2)

q t =时间间隔t内死亡比例,q t =D t /N t *

p t =时间间隔t内生存比例,p t =1-q t

S t ,累计生存概率,S 0 =1,S t+1 =p t+1 *S t

因此,对于第一个间隔0-4年和第二个5-9年的间隔,可以计算出如下数据:

所以完整的随访寿命表为:

Kaplan-Meier

Edward Kaplan和Paul Meier于1958年在《American Statistical Association》共同发表了Kaplan-Meier非参数估计方法,让我们能够估计生存函数。

从寿命表的方法可以看出生存概率会根据不同的间隔改变,尤其是对于小样本而言这种改变可能会很剧烈。Kaplan-Meier通过每次时间发生时重新估计生存概率来解决该问题。

Kaplan-Meier是基于这样的假设进行的:删失与事件发生的可能性无关,且在研究早期和后期被招募的参与者生存率是可比的。这些前提很重要,比如在不同组比较时要保证删失的可能性一致。

Kaplan-Meier与寿命法的计算方式类似,主要区别是时间间隔,寿命法中我们选择的时间间隔相等,而在Kaplan-Meier的方法中我们使用观察到的事件时间和删失时间。

上述的内容原版,以及关于进一步的检验和Cox模型的内容可以阅读Boston大学的教材 Boston Univeristy Suvival Analysis 。在这里暂时就不再解释啦。

今天我们要用到以下几个R包:survival,survminer和dplyr

使用KM方法,通过 ggsurvplot 作图,该函数作图需要两部分数据,具体见下:

1)需要什么格式的数据

我们使用的数据集为ovarian,来自survival包。该数据集来源于文章《Different Chemotherapeutic Sensitivities and Host Factors Affecting Prognosis in Advanced Ovarian Carcinoma vs. Minimal Residual Disease》,主要研究化疗敏感性和宿主因素对晚期卵巢癌和微小残留病变的预后影响,具体含有以下几个指标:

futime: survival or censoring time 生存时间

fustat: censoring status 确定参与者生存时间是否发生缺失

age:in years

resid.ds: residual disease present (1=no,2=yes) 评估肿瘤的消退情况

rx: treatment group 接受两种治疗方案中的一种

ecog.ps:ECOG performance status (1 is better, see reference)依据ECOG评估的患者表现

为了更直观的获取信息,我们根据说明修改一下部分指标的标记方式:

然后我们来看一下年龄的分布 hist(ovarian$age)

然后我们进行生存曲线的分析,使用futime和fustat两列,首先根据是否发生删失对数据进行处理。

可以看到发生删失的都带上了加号。

然后拟合Kaplan-Meier曲线:

2)如何作图

然后使用 ggsurvplot 功能进行绘图,如果选择 pval=TRUE 会显示两组差异检验结果的pvalue。

如果想要研究与resid.ds的关系:

往期R数据可视化分享

R数据可视化13:瀑布图/突变图谱

R数据可视化12: 曼哈顿图

R数据可视化11: 相关性图

R数据可视化10: 蜜蜂图 Beeswarm

R数据可视化9: 棒棒糖图 Lollipop Chart

R数据可视化8: 金字塔图和偏差图

R数据可视化7: 气泡图 Bubble Plot

R数据可视化6: 面积图 Area Chart

R数据可视化5: 热图 Heatmap

R数据可视化4: PCA和PCoA图

R数据可视化3: 直方/条形图

R数据可视化2: 箱形图 Boxplot

R数据可视化1: 火山图

推荐24款好用的数据可视化分析软件,个个堪称神器!

环音仪说数据

2021-06-07 14:57

关注

本篇文章小编为大家专门推荐24款好用的数据可视化分析工具,全到你无法想象。

1、Excel

作为一个入门级工具,是快速分析数据的理想工具,也能创建供内部使用的数据图,但是Excel在颜色、线条和样式上课选择的范围有限,这也意味着用Excel很难制作出能符合专业出版物和网站需要的数据图。

2、国云大数据魔镜

一款免费的新型大数据可视化分析工具,操作简单,支持多种数据源,上卷下钻,数据预测,聚类分析,相关性分析,数据联想,决策树,地图,组合图等功能。

3、Smartbi

Smartbi支持使用Excel作为报表设计器,完美兼容Excel的配置项。支持Excel所有内置图形、背景图、条件格式等设计复杂的仪表盘样式。通过excel插件功能所有的Excel图形如特色图形:迷你图、帕累托图、子弹图、小又多图等特色图形;常用图形柱图、饼图、线图、雷达图等,并结合数据仓库里的动态数据进行数据展现。

Smartbi 支持完整ECharts 图形库,支持各种各样的图形,包含瀑布图、关系图、雷达图、油量图、热力图、树图等几十种动态交互的图形;支持3D动态图形效果,如3D航线图、3D散点图、3D柱图用于数据可视化展示;支持丰富的Echarts图形控件如轮播控件、跑马灯、TAB页控件、URL控件,可直接使用ECharts所有选项配置;也支持集成其他的HTML5图形控件。

4、Gephi

Gephi是进行社会图谱数据可视化分析的工具,不但能处理大规模数据集并且是一个可视化的网络探索平台,用于构建动态的、分层的数据图表

5、CartoDB

CartoDB是一个不可错过的网站,你可以用它很轻易就把表格数据和地图关联起来,这方面CartoDB是最优秀的选择。

6、Google Chart API

Google Chart提供了一种非常完美的方式来可视化数据,提供了大量现成的图标类型,从简单的线图表到复杂的分层树地图等。它还内置了动画和用户交互控制。

7、D3

Data Driven Documents是支持SVG渲染的另一种JavaScript库。但是D3能够提供大量线性图和条形图之外的复杂图表样式,例如Voronoi图、树形图、圆形集群和单词云等。

8、Crossfilter

Crossfilter既是图表,又是互动图形用户界面的小程序,当你调整一个图表中的输入范围时,其他关联图表的数据也会随之改变。

9、R语言

R语言主要用于统计分析、绘图的语言和操作环境。虽然R主要用于统计分析或者开发统计相关的软件,但也有用作矩阵计算。其分析速度可比美GNUOctave甚至商业软件MATLAB。

10、Weka

Weka是一个能根据属性分类和集群大量数据的优秀工具,不但是数据分析的强大工具,还能生成一些简单的图表。

11、Processing

Processing是数据可视化的招牌工具。你只需要编写一些简单的代码,然后编译成Java。Processing可以在几乎所有平台上运行。

12、Data Analytics

Data Analytics 是新一代的敏捷BI平台,其基于探索式分析技术,具备操作简单、部署灵活、秒级响应等特点,并提供了从数据采集、数据处理、数据分析、数据可视化于一体的完整解决方案,进而帮助企业搭建一站式的业务数据可视化分析平台。目前,Data Analytics 广泛用于政府、互联网、消费、能源等行业用户的数据分析实践之中。

13、Openlayers

Openlayers可能是所有地图库中可靠性最高的一个。虽然文档注释并不完善。且学习曲线非常陡峭,但是对于特定的任务来说,Openlayers能够提供一些其他地图库都没有的特殊工具。

14、iCharts

提供可一个用于创建并呈现引人注目图表的托管解决方案。有许多不同种类的图表可供选择,每种类型都完全可定制,以适合网站的主题。iCharts有交互元素,可以从Google Doc、Excel表单和其他来源中获取数据。

15、Kartograph

不需要任何地图提供者像Google Maps,用来建立互动式地图,由两个libraries组成,从空间数据开放格式,利用向量投影的Python library以及post GIS,并将两者结合到SVG和JavaScript library,并把这些SVG资料转变成互动性地图。

16、Echarts

经常使用开源软件的朋友应该很熟悉ECharts,大家都知道去年春节以及近期央视大规划报道的百度大数据产品,如百度迁徙、百度司南、百度大数据预测等等,这些产品的数据可视化均是通过ECharts来实现的。

17、 Paper.js

是一个开源向量图表叙述架构,能够在HTML5 Canvas 运作,对于初学者来说它是很容易学习的,其中也有很多专业面向可以提供中阶及高阶使用者。

18、Gantti

是一个开源的PHP类,帮助用户即时生成Gantti图表。使用Gantti创建图表无需使用JavaScript,纯HTML-CSS3实现。图表默认输出非常漂亮,但用户可以自定义样式进行输出(SASS样式表)。

19、Smoothie Charts

是一个十分小的动态流数据图表路。通过推送一个webSocket来显示实时数据流。Smoothie Charts只支持Chorme和Safari浏览器,并且不支持刻印文字或饼图,它很擅长显示流媒体数据。

20、Fusion Charts Suit XT

是一款跨平台、跨浏览器的JavaScript图表组件,为你提供令人愉悦的JavaScript图表体验。它是最全面的图表解决方案,包含90+图表类型和众多交互功能,包括3D、各种仪表、工具提示、向下钻取、缩放和滚动等。它拥有完整的文档以及现成的演示,可以帮助你快速创建图表。

21、Circos

最初主要用于基因组序列相关数据的可视化,目前已应用于多个领域,例如:影视作品中的人物关系分析,物流公司的订单来源和流向分析等,大多数关系型数据都可以尝试用Circos来可视化。

22、BirdEye

它属于一个群体专案,为了要提升设计和广泛的开源资料视觉化发展,并且为了Adobe Flex建视觉分析图库,这个动作以叙述性的资料库为主,让使用者能够建立多元资料视觉化界面来分析以及呈现资讯。

23、Visualize Free

是一个建立在高阶商业后台集游InetScoft开发的视觉化软体免费的视觉分析工具,可从多元变量资料筛选并看其趋势,或是利用简单地点及方法来切割资料或是小范围的资料。

24、GeoCommons

可以使用户构建富交互可视化应用来解决问题,即使他们没有任何传统地图使用经验。你可以将实社会化数据或者GeoCommons保存的超5万份开源数据在地图上可视化,创造带交互的可视化分析作品,并将作品嵌入网站、博客或分享到社交网络上。

数据可视化的一般流程

首先我们需要对我们现有的数据进行分析,得出自己的结论,明确要表达的信息和主题(即你通过图表要说明什么问题)。然后根据这个目的在现有的或你知道的图表信息库中选择能够满足你目标的图表。最后开始动手制作图表,并对图表进行美化、检查,直至最后图表完成。

这里我们容易犯的一个错误是:先设想要达到的可视化效果,然后在去寻找相应的数据。这样经常会造成:“现有的数据不能够做出事先设想的可视化效果,或者是想要制作理想的图表需要获取更多的数据。”这样的误区。

常用的可视化工具

1、Microsoft Excel

对于这个软件大家应该并不陌生,对于一般的可视化这个软件完全足矣,但是对于一些数据量较大的数据则不太适合。

2、Google Spreadsheets

Google Spreadsheets是基于Web的应用程序,它允许使用者创建、更新和修改表格并在线实时分享数据。基于Ajax的程序和微软的Excel和CSV(逗号分隔值)文件是兼容的。表格也可以以超文本链接标记语言(HTML)的格式保存。

3、Tableau Software

Tableau Software现在比较受大家的欢迎,既可以超越Excel做一些稍微复杂的数据分析,又不用像R、Python那种编程语言进行可视化那么复杂。好多人都有推荐这款软件。

4、一些需要编程性语言的工具

R语言、JavaScript、HTML、SVG、CSS、Processing、Python。这里主要是列举一下有哪些编程语言可以实现可视化,具体如何实现需要读者自行学习。