怎么学习用 R 语言进行数据挖掘

Python023

怎么学习用 R 语言进行数据挖掘,第1张

什么是R语言?应该如何开始学习/使用R语言呢?

学习R有几个月了,总算是摸着了一点门道。

写一些自己的心得和经验,方便自己进一步鼓捣R。如果有人看到我写的东西而得到了帮助,那就更好了。

什么是R?R的优点何在?

R是一个数据分析软件。简单点说,R可以看做MATLAB的“替代品”,而且具有免费开源的优势。R可以像MATLAB一样解决有关数值计算的问题,而且具有强大的数据处理,绘图功能。

R拥有大量的统计分析工具包,我的感觉是——只有我们没听说过的工具,绝对没有R没有的工具包。配合着各种各样的工具包,你可以毁灭任何关于数据和统计的问题。因为数据包的数量庞大,所以查找自己需要的数据包,可能很烦恼。

如果有以下技能,学R会很方便:

1.已经了解些高级程序语言(非常重要)

2.英语不坏

3.概率统计理论基础

4.看数据不头疼

5.看cmd or terminal 也不头疼

你需要一本适合你的R语言教材

我开始学习R的时候,找到了这个帖子

非常强大的关于R语言教材综述。我非常感谢原帖作者。你可以参考这个帖子选一本适合你的教材。

我这里在说一下我主要使用的几本教材的心得:

1. 统计建模与R软件(薛毅著):非常优秀的R语言入门教材,涵盖了所有R的基础应用&方法,示例代码也很优秀。作为一本中文的程序语言教材,绝对是最优秀的之一。但是要看懂这本书,还是需要“已经了解些高级程序语言”。PS:我亲爱的吉林大学图书馆,有两本该教材流通,我常年霸占一本。

2. R in Nutshell:从讲解内容上看,与上一本差别不大,在R语言的应用上都是比较初级的入门,但是有些R软件&语言上的特性,写得比薛毅老师的教材深刻。这本书最大的优点就是工具书,方便开始入门时候,对有些“模棱两可”的东西的查询。PS:我将这本书打印了出来,简单的从头到尾翻过,最大的用途就是像一本字典一样查询。

3. ggplot2 Elegant Graphics for Data:这是一本介绍如何使用ggplot2包,进行绘图的书。ggplot2包,非常强大的绘图工具,几乎可以操作任何图中的元素,而且是提供添加图层的方式让我们可以一步步的作图。提到ggplot2包,应该提到一个词——“潜力无穷”,每一个介绍

ggplot2的人,都会用这个形容词。这本书最大的作用也是当做一本绘图相关的工具书,书中讲解详细,细致,每个小参数的变动都会配图帮你理解。PS:这本书我也打印出来了,非常适合查询。

几个可以逐步提高R能力的网站

1.R-bloggers: 这里有关于R和数据的一切讨论,前沿的问题,基础的问题,应有尽有。可以说这些家伙们让R变得越来越强大。我RSS了这个网站,每天都看一下有什么我感兴趣的方法和话题,慢慢的积累一些知识,是一个很有意思的过程。

2.统计之都: 这是一个有大量R使用者交流的论坛,你可以上去提问题,总有好心人来帮助你的。

3.R客: 是关于R的一个博客,更新不快,偏重国内R的一些发展。

R的使用环境

如果你看见terminal or cmd就打怵的话,一定要使用Rstudio。Rstudio的优点是,集成了Rconsole、脚本编辑器、可视化的数据查询、历史命令、帮助查询等,还有的完美的脚本和console的互动。毕竟是可视化的界面,有许多按钮可以用。R 的脚本编辑器很蛋疼,就比记事本多了个颜色高亮吧,不适合编写脚本,但适合调试脚本。

最后,说一下,刚开始学习R或者其他什么语言,都有一个通病,就是一些小细节的不知道,或者是记得不清楚,往往一个蛋疼的bug就可以耗掉大量的时间,这是一个让人想砸电脑的过程。我往后,会在博客里记录一些让我蛋很疼的小细节。本文分为6个部分,分别介绍初级入门,高级入门,绘图与可视化,计量经济学,时间序列分析,金融等。

1.初级入门

《An Introduction to R》,这是官方的入门小册子。其有中文版,由丁国徽翻译,译名为《R导论》。《R4Beginners》,这本小册子有中文版应该叫《R入门》。除此之外,还可以去读刘思喆的《153分钟学会R》。这本书收集了R初学者提问频率最高的153个问题。为什么叫153分钟呢?因为最初作者写了153个问题,阅读一个问题花费1分钟时间,全局下来也就是153分钟了。有了这些基础之后,要去读一些经典书籍比较全面的入门书籍,比如《统计建模与R软件》,国外还有《R Cookbook》和《R in action》,本人没有看过,因此不便评论。

最后推荐,《R in a Nutshell》。对,“果壳里面的R”!当然,是开玩笑的,in a Nutshell是俚语,意思大致是“简单的说”。目前,我们正在翻译这本书的中文版,大概明年三月份交稿!这本书很不错,大家可以从现在开始期待,并广而告知一下!

2.高级入门

读了上述书籍之后,你就可以去高级入门阶段了。这时候要读的书有两本很经典的。《Statistics with R》和《The R book》。之所以说这两本书高级,是因为这两本书已经不再限于R基础了,而是结合了数据分析的各种常见方法来写就的,比较系统的介绍了R在线性回归、方差分析、多元统计、R绘图、时间序列分析、数据挖掘等各方面的内容,看完之后你会发现,哇,原来R能做的事情这么多,而且做起来是那么简洁。读到这里已经差不多了,剩下的估计就是你要专门攻读的某个方面内容了。下面大致说一说。

3.绘图与可视化

亚里斯多德说,“较其他感觉而言,人类更喜欢观看”。因此,绘图和可视化得到很多人的关注和重视。那么,如何学习R画图和数据可视化呢?再简单些,如何画直方图?如何往直方图上添加密度曲线呢?我想读完下面这几本书你就大致会明白了。

首先,画图入门可以读《R Graphics》,个人认为这本是比较经典的,全面介绍了R中绘图系统。该书对应的有一个网站,google之就可以了。更深入的可以读《Lattice:Multivariate Data Visualization with R》。上面这些都是比较普通的。当然,有比较文艺和优雅的——ggplot2系统,看《ggplot2:Elegant Graphics for Data Analysis》。还有数据挖掘方面的书:《Data Mining with Rattle and R》,主要是用Rattle软件,个人比较喜欢Rattle!当然,Rattle不是最好的,Rweka也很棒!再有就是交互图形的书了,著名的交互系统是ggobi,这个我已经喜欢两年多了,关于ggobi的书有《Interactive and Dynamic Graphics for Data Analysis With R and GGobi》,不过,也只是适宜入门,更多更全面的还是去ggobi的主页吧,上面有各种资料以及包的更新信息!

特别推荐一下,中文版绘图书籍有《现代统计图形》。

4.计量经济学

关于计量经济学,首先推荐一本很薄的小册子:《Econometrics In R》,做入门用。然后,是《Applied Econometrics with R》,该书对应的R包是AER,可以安装之后配合使用,效果甚佳。计量经济学中很大一部分是关于时间序列分析的,这一块内容在下面的地方说。

5.时间序列分析

时间序列书籍的书籍分两类,一种是比较普适的书籍,典型的代表是:《Time Series Analysis and Its Applications :with R examples》。该书介绍了各种时间序列分析的经典方法及实现各种经典方法的R代码,该书有中文版。如果不想买的话,建议去作者主页直接下载,英文版其实读起来很简单。时间序列分析中有一大块儿是关于金融时间序列分析的。这方面比较流行的书有两本《Analysis of financial time series》,这本书的最初是用的S-plus代码,不过新版已经以R代码为主了。这本书适合有时间序列分析基础和金融基础的人来看,因为书中关于时间序列分析的理论以及各种金融知识讲解的不是特别清楚,将极值理论计算VaR的部分就比较难看懂。另外一个比较有意思的是Rmetrics推出的《TimeSeriesFAQ》,这本书是金融时间序列入门的东西,讲的很基础,但是很难懂。对应的中文版有《金融时间序列分析常见问题集》,当然,目前还没有发出来。经济领域的时间序列有一种特殊的情况叫协整,很多人很关注这方面的理论,关心这个的可以看《Analysis of Integrated and Cointegrated Time Series with R》。最后,比较高级的一本书是关于小波分析的,看《Wavelet Methods in Statistics with R》。附加一点,关于时间序列聚类的书籍目前比较少见,是一个处女地,有志之士可以开垦之!

6.金融

金融的领域很广泛,如果是大金融的话,保险也要被纳入此间。用R做金融更多地需要掌握的是金融知识,只会数据分析技术意义寥寥。我觉得这些书对于懂金融、不同数据分析技术的人比较有用,只懂数据分析技术而不动金融知识的人看起来肯定如雾里看花,甚至有人会觉得金融分析比较低级。这方面比较经典的书籍有:《Advanced Topics in Analysis of Economic and Financial Data Using R》以及《Modelling Financial Time Series With S-plus》。金融产品定价之类的常常要用到随机微分方程,有一本叫《Simulation Inference Stochastic Differential Equations:with R examples》的书是关于这方面的内容的,有实例,内容还算详实!此外,是风险度量与管理类。比较经典的有《Simulation Techniques in Financial Risk Management》、《Modern Actuarial Risk Theory Using R》和《Quantitative Risk Management:Concepts, Techniques and Tools》。投资组合分析类和期权定价类可以分别看《Portfolio Optimization with R》和《Option Pricing and Estimation of Financial Models with R》。

7.数据挖掘

这方面的书不多,只有《Data Mining with R:learing with case studies》。不过,R中数据挖掘方面的包已经足够多了,参考包中的帮助文档就足够了。

我们经常用随机森林等机器学习又或者是其他数据挖掘的方法寻找某些疾病的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: 火山图