R语言与医学统计图形(txt+pdf+epub+mobi电子书下载)


发布时间:2020-07-06 09:14:01

点击下载

作者:张铁军,陈兴栋,刘振球

出版社:人民卫生出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

R语言与医学统计图形

R语言与医学统计图形试读:

版权页

图书在版编目(CIP)数据

R 语言与医学统计图形/ 张铁军,陈兴栋,刘振球主编. —北京:人民卫生出版社,2017

ISBN 978-7-117-25728-2

Ⅰ.①R⋯ Ⅱ.①张⋯ ②陈⋯ ③刘⋯ Ⅲ.①程序语言-应用-医学统计 Ⅳ.①R195.1-39

中国版本图书馆CIP 数据核字(2017)第314285 号人卫智网 www.ipmph.com 医学教育、学术、考试、健康,购书智慧智能综合服务平台人卫官网 www.pmph.com 人卫官方资讯发布平台

版权所有,侵权必究!第2版R语言与医学统计图形

主  编:张铁军 陈兴栋 刘振球

出版发行:人民卫生出版社有限公司       人民卫生电子音像出版社有限公司

地  址:北京市朝阳区潘家园南里19号

邮  编:100021

E - mail:ipmph@pmph.com

制作单位:人民卫生电子音像出版社有限公司

排  版:人民卫生电子音像出版社有限公司

制作时间:2019年3月

版 本 号:V1.0

格  式:mobi

标准书号:ISBN 978-7-117-25728-2

策划编辑:肖宛凝

责任编辑:肖宛凝打击盗版举报电话:010-59787491 E-mail:WQ @ pmph.com注:本电子书不包含增值服务内容,如需阅览,可购买正版纸质图书。序 言

几千年的人类文明历程中,随着科学技术的不断发展,人类认知世界的方式也在不断改变。举例来说,我们的古人认为天圆地方,这是他们用眼睛观察的结果,当然肯定也经过了大脑的思考。虽然从今天看来,这是一个错误的结论,但是我们并不能因此否定“观察”这一认知世界的最直接方式。近代以来,随着现代科学的快速发展,人类观察到了以前肉眼不可见的物质,比如细胞、遥远的天体、遗传物质等。这些发现均是通过“观察”而获得的,它们的出现大大地推动了人类文明的进程,让人类认知世界的方式由表及里,由定性到定量,由单纯现象发展到一定的规律,这就正如马克思教导我们要认识物质的本质一样。

流行病学的发展,也是一样的。1758年Lind用水手多吃水果和蔬菜来预防坏血病,后来证实维生素C能预防坏血病。1767年Bakor报告饮苹果酒者经常发生腹绞痛,后来才发现腹绞痛系铅酒壶的铅溶入酒中引起。 18世纪Pott报告扫烟囱的小孩易得阴囊癌,后来证实系煤烟灰中含多环芳烃(PAH)引起的。1854年Snow发现伦敦宽街饮用污染井水居民腹泻发病高,不饮者低,控制后很少发病。30年后Koch在水中分离到霍乱弧菌。 20世纪80年代后计算机技术迅速发展,我在多伦多大学访问期间,花了不少时间学习使用计算机分析肝癌危险因素、解决宫颈癌合适的普查方案、乳腺癌与营养关系等课题。

计算机开始应用的年代还需要自己编写复杂的程序,后来有许多商业软件如SPSS、SAS等,只要付费即可应用。随着时代的前进,出现了无需付费的R软件,它有一套完整的数据处理系统,它还有优秀的统计制图功能。简而言之,R简洁而强大。

这本书系统介绍了R的绘图功能,目的就是让科研工作者拥有良好的科研构图能力,它将支持你的学习和科研。2017年12月20日前 言

一图胜千言!这是对图形最好的概括。一张优质的统计图形,不仅能够准确、生动的展示出我们的结果,更能给人一种数据之美、图形之美的享受。同时,在科研论文中添加一张精美的统计图形,对于文章整体的质量也是一种提升。

那么,如何利用数据绘制出一张准确而精美的统计图形呢?相信有很多软件可以做到。但是,毫无疑问,从实现的简便性和实现的效果上来说,R语言是这方面的翘楚。

随着数据科学和计算机科学的不断发展,R语言近十年也在蓬勃发展,它在统计建模、机器学习、数据挖掘、生物信息等方面表现十分抢眼。同时,R语言的绘图功能也一直为人所称道。无论是基础绘图系统还是ggplot2绘图系统,均可以利用少量的代码绘制出精美的统计图形。因此,近几年,R语言的身影在科研论文中,包括Lancet、JAMA之类的顶级医学期刊论文中,屡见不鲜。这种现象提示我们,一篇优质的科研论文,除了研究设计、数据分析、论文撰写这些重要环节外,结果的呈现方式也非常重要。这也就是我们撰写这本书的初衷——让更多优质的统计图形出现在我们的科研论文中。

本书从结构上来说,主要分为六大篇,共十四章,其中,前三篇主要介绍静态图形的绘制,包括基础绘图包、ggplot2、地图等方面;第四篇介绍了R语言几种主要的动态交互绘图系统,比如plotly、recharts、leaflet等;第五篇介绍了一些另辟蹊径的图形和医学科研中独有的统计图形,比如生存曲线和meta分析森林图;第六篇介绍了R语言中统计表格的制作方法。与此同时,笔者在行文的过程中,穿插了很多实际工作中可能遇到的问题,比如图形颜色的选取、高质量图形的保存与导出、中文字体的选择等等。在代码的编排上,除了代码中不同类型文本之间(比如数字和字符串)有颜色区分外,笔者也做了大量的代码注释,以帮助读者更好的理解。此外,文中使用的所有数据,要么来自于R语言的内置数据集,要么是笔者利用函数构建的随机数据集,因此读者都可以轻松获取相应的数据进行代码练习,但是有一点需要声明,文中所有随机生成的数据集,比如肿瘤发病率数据集,均是为了图形的展示,并无任何实际意义。本着“授人以鱼不如授人以渔”的原则,书中大量的代码和图形均是从简单入手,其目的是为了使读者更好的掌握R语言的绘图技巧,而一些复杂的图或者“成品图”在书中鲜有出现。绘图是一种创意的考验,但是创意是建立在良好的基础之上的。由于篇幅有限,书中部分图形被封装到每个章节的二维码中,读者可以扫码看图。

江山代有才人出,各领风骚数百年。R语言很小巧(安装包仅有70M),但是强大,R语言很庞大(至今已有超过13 000个扩展包),但是优雅。在本书中,希望你能跟随笔者的脚步一起感受R语言的魅力,体会数据之美,图形之美。

本书的编写得到了国家重点研发计划、国家自然科学基金、教育部博士点基金、上海市自然科学基金的资助。我们特别邀请了我国著名流行病学家俞顺章教授与何纳教授对本书进行审阅,两位老师丰富的学识和严谨的科学态度为本书增色不少。感谢安徽医科大学段禹同学和复旦大学左佳鹭、袁黄波以及蔡宁同学在文字编排上的协助;感谢山东大学张文超同学在本书封面设计上的帮助;同时感谢“医学方”微信公众平台的支持。本书编撰的同时也收到了大量的网友反馈,他们所提出的意见和建议帮助我们进一步完善了本书的内容,在此一并致谢!

我们求学于复旦、成长于复旦,衷心感谢复旦大学对于本书的大力支持;感谢每一位编委的辛劳付出;感谢R语言道路上的先驱与前辈,是你们的智慧成就了R语言的今天,才让我们能够站在巨人的肩膀上继续前行。

由于笔者水平有限,对于R语言理解有限,书中难免有疏漏错误之处,恳请各位专家、老师、前辈、同学批评指正(邮件可发送至zhenqiuliu@outlook.com),谢谢!张铁军 陈兴栋 刘振球2017年6月20日于西苑8号楼写在前面

R语言是近十年来快速崛起的一门以数据分析为特色的计算机编程语言,对于还未接触过它的读者来说,一切都是陌生而新鲜的。开篇的这段文字,仅仅针对R语言的新手,而对于有一定R语言基础的读者,比如知道如何下载安装R语言,就完全可以跳过这一段。R语言是完全免费的开源软件,大家可以在其官方网站上(https://cran.r-project.org/),根据自己的计算机操作系统,选择相应的版本进行下载。截至2017年6月30日,R语言的最新版本为3.4.1。R语言的安装全部是点击式操作,因此不涉及复杂的编译或配置过程,故在此不详述。安装完毕后,Windows系统用户可以在桌面上发现两个R语言的快捷方式图标,其中一个是基于64位系统,另外一个是基于32位系统,两者并不冲突,因此可以不予理会。双击其中一个图标,即可进入R语言的图形用户界面(R GUI)。该界面相对简陋,对于非计算机专业的用户来说极不适应,因此在这里给大家推荐另外一款与R语言配套的集成开发环境(IDE)——Rstudio。Rstudio是目前最流行的R语言IDE,其界面友好,操作方便,针对普通用户的版本同样是免费的。大家可以在其官网下载最新版本(https://www.rstudio.com/)。Rstudio的安装同样简单方便,大家无需将R语言与Rstudio安装在同一目录下,只需要注意一点,即先安装R语言,再安装Rstudio即可。

安装工作完毕之后,大家可以直接打开Rstudio进行操作,此时R语言是无需同时打开的。Rstudio的基本界面如下图所示。

其中,文本编辑框的功能类似于一个普通的文本编辑器,主要用于代码的编写,此处编写的代码不会自动运行,需要选中相应的代码,然后点击文本编辑框右上角的绿色“Run”按钮,或者使用“Control + R”(Windows),“Commond + R”(Mac OS)的键盘组合运行代码。控制台是R语言代码输入和结果输出的地方,在此处键入代码,摁下“enter”键即可即时得到相应的结果。从文本编辑框中运行的代码,其代码和结果也会在控制台显示出来。右上角的环境变量框展示的是在不同操作环境中的变量和数据(默认是全局环境,即global environment)。右下角是Rstudio特有的应用框,从左至右依次是“Files”(文件展示窗口),“Plots”(图形展示窗口),“Packages”(包展示窗口),“Help”(帮助文档窗口),“Viewer”(视图窗口)。Rstudio基本操作界面

R语言是函数式编程的计算机语言,在实际应用中,我们会使用大量的已经封装好的函数。比如求解一组数据的算数平均数,不需要逐个相加求和再除以数据的个数,而只需要调用mean()函数(注意,在接下来的行文中,凡是R语言函数,均会带上小括号,以便同普通文本区分)。函数就像一台机器,如果想要得到输出,就必须要有输入才行。在函数内部,存在若干参数,比如mean()函数中的x,这些参数就像是机器的控制按钮,选择的参数不同,得到的结果也会不同,当然,这其中部分参数是“必需参数”,即该参数不能忽略,一旦忽略则会报错。另外一些参数称为“非必需参数”,只有在执行特定需求时才会使用它们,比如mean()函数中的na.rm参数,该参数针对的是原始数据中存在缺失值的情形,如果原数据没有缺失值,则该参数可以忽略。还有一类参数称为“缺省参数”,也称作“默认参数”,通俗来讲,即该参数具有一个“天生”的值,如果不对其进行修改,那么每次默认都使用该值。“非必需参数”和“缺省参数”界限并非十分明显,但是“必需参数”是每一次都必须要接受相应值的。

R语言中还有一个显著的特点,就是包(package)的存在。包就像R语言的“弹药库”,不同的包其功能不全相同或者完全不同(因为研究领域不同)。在R语言安装好之后,大家会发现已经有大约20几个包存在,比如MASS,utils等,我们可以把这些包称为“系统包”(system library),它们无需再次下载,就像战士随身配备的手枪和匕首,只需使用library()函数进行加载就可调用(部分包,比如utils,甚至无需加载就可以直接使用)。而对于其他包,当我们需要使用时,第一步是下载它。如果该包已经在CRAN上发布,那么我们可以使用install.packages()函数下载,比如下载ggplot2,可以使用如下代码:

下载好之后,如果需要使用它,则必须使用library()函数对其进行加载。第一篇 R语言基础绘图系统第一章 基础绘图包之高级绘图函数

R语言有强大的绘图系统,数据可视化一直是R语言独步江湖的强大杀招。与R语言美轮美奂,妙不可言的绘图相比,其他常用的统计软件,比如SPSS和SAS,在统计绘图方面则显得相形见绌。Python作为当下非常流行的一种通用计算机编程语言,在统计绘图方面也在向R语言学习。

R语言至今已拥有超过13 000个扩展包(packages),大部分能在CRAN(comprehensive R archive network,https://cran.r-project.org/)上找到,小部分还未正式发布,托管在Github上或者RForge(https://r-forge.r-project.org/)上。在这些扩展包中,专门用作数据可视化的包不下100个,而各种形形色色的包,多少都会自带一些绘图函数,以满足自身“特异性”的数据可视化的需要,比如用于量化金融的quantmod包,就有专门用于绘制股票走向的蜡烛图函数。

在众多绘图包中,ggplot2是当之无愧的“武林盟主”!曾有人断言,ggplot2的出现,将统计绘图提升了一个档次,到了一个全新的境界。而依托ggplot2开发的绘图包也超过20个,且个个都能独当一面,成为各领域数据可视化的翘楚!比如香港大学余光创博士开发的ggtree包,专门用来绘制各式各样的进化树。

随着R语言的不断发展与普及,各种优秀的绘图包如雨后春笋般不断涌现,但是,任凭风起云涌,沧海桑田,R语言基础绘图包的“江湖地位”一直不可动摇。基础绘图包并不是单独指某一个包,而是由几个R包联合起来的一个“联盟”,比如graphics、grDevices等。这些包在我们第一次装载R语言时就会被自动下载,因此无需手动下载,而且在初次使用的时候,也无需使用library()函数对其进行加载。曾几何时,这个联盟也是独领风骚,好不风光!时至今日,面对众多俊俏后生,基础绘图包更像是一个看惯了世事纷争,看淡了潮起潮落的老者,老成持重的守着自己的一方土地。第一节 par()函数详解一、par()函数简介

为什么一开始就介绍par()函数,而不是基础绘图包中的绘图函数?笔者认为基础绘图包之所以能够很好的完成绝大多数的数据可视化任务,最主要的原因就是其强大而深厚的“内功”——par()函数!

par是英文单词parameters的简写,即参数,简而言之,这是一个专门用来设置绘图参数的函数!何为参数?参数是一个函数的肉体,没有参数,函数体则没有相应的输入值,函数也就无从运算;参数同样是一个函数的灵魂,没有参数,函数会一成不变,无法做到灵活运用。我们在实际应用中,通过改变参数的传入值,得到不同的结果。更多关于参数的内容,在接下来的章节中,大家会大量的接触到,所以,其真正的含义,大家会逐渐明晰。

我们的第一步任务就是要了解和熟悉par()函数的参数,请首先打开R Gui或者Rstudio,在控制台键入:

Rstudio会弹出一个帮助窗口(如果是R Gui,则会弹出一个网页窗口),一般在电脑屏幕的右下角。par()函数参数众多,功能不一,但是笔者认为其中能经常使用到的,或者说对我们的统计图形能够起到本质改变作用的也就20个左右。若能把这20个参数熟练掌握也就可以了,其余的呢,在遇到不同的数据可视化需求时,再来现学也不迟。另外,par()函数以及接下来介绍的其他函数,只要属于基础绘图包,在开启R之后,是无需加载扩展包的,直接可以使用。二、par()函数参数介绍

par()函数目前大概有60多个参数,但是此处只选取其中大约20个较为常用的参数进行详解。其余的参数,请读者朋友自行翻阅帮助文档。

1.adj

英文单词adjustment的简写,用于调整图中字符的相对位置,属于微调。取值:adj = c(x,y),表示字符边界矩形框的左下角相对坐标点(x,y)的位置调整。注意,此参数目的是图形微调,所以x和y的取值一般不会超过1,取值过大的话,容易导致图形元素超过图形边界,从而无法在图片上显示。

2.ask

逻辑参数,取值TRUE或FALSE。在没有事先将画布切分成若干小区域,但是又同时画了好几张图时,R默认是一张画布只显示一张图,当ask=FALSE时,所有的图都会在Rstudio的绘图窗口一闪而过,所以为了清楚的展示每一张图,请把ask设置为TRUE,这时候,R会弹出一条信息,中文大意是“第一张图看好了么?要不要切换到下一张,要的话,请按enter键”。当按下enter键后,第二张图就会显示出来。

3.bg

颜色参数,用于设置绘图区域的背景色。

4.bty

设置图形边框样式,默认绘制图形四周边框,状似一个“口”字,此外,R 提供了其他备选项:“o,l,7,c,u,]”。这些字符看似乱七八糟,但是有规律可循。请发挥你的想象力,字母o像什么?不就像“口”字吗?所以,这是默认参数,图形四个边框都显示。以此类推,字母l,就是‘L’,表示只显示下方和左边的框。注意,bty参数并不能将x轴和y轴去除,比如将bty设置成“7”,虽然数字7表示只绘制上方和右边的边框,但是此时x轴和y轴并不会消失。如果需要自定义坐标轴,则需要使用其他参数和函数,见下文。见图1-1-1。

5.cex

该参数用来设置图上的元素,比如文字或者符号的缩放倍数,接受的值是一个正数,默认为1,当设置成1.5时,则表示图形上的元素为默认的1.5倍大小。图1-1-1 六种不同的图形边框样式

由该参数衍生出了四个参数,分别是cex.lab;cex.main;cex.sub;cex.axis。分别表示坐标轴标签、图形标题、副标题以及坐标轴刻度标签的缩放倍数。

6.col

颜色参数,设置图中元素的颜色。具体见第三章颜色详解。它也有四个衍生参数,分别是col.lab;col.main;col.sub;col.axis。意思同上文。

7.family

设置图中文本的字体参数。该参数不仅适用于英文字体的设置,同样适用于中文字体。默认取值有:‘serif’,‘sans’,‘mono’,‘symbol’,见图1-1-2。关于更多字体设置的内容,请见第四章。图1-1-2 添加图形标题并设置标题字体

8.font

设置文本的字体样式,取值为1、2、3、4,分别表示正常、粗体、斜体、粗斜体。

9.las

该参数用于设置坐标轴刻度标签的样式,取值0、1、2、3,分别表示:总是平行于坐标轴;总是水平;总是垂直于坐标轴;总是垂直。见图1-1-3。图1-1-3 四种不同的坐标轴标签样式

10.lty

设置线条样式,取值 0、1、2、3、4、5、6,分别表示:不划线;实线;虚线;点线;点划线;长划线;点长划线。见图1-1-4。

11.lwd

设置线条宽度,默认取值为1,用法类似于cex参数。注意一点,当在par()函数中使用lwd参数时,图形中的所有元素,比如线条、坐标轴以及图形边框的线条宽度均会改变。见图1-1-4。如果只需要图形中的线条宽度发生改变,则需要将lwd参数放到绘图函数中。

12.mar,mai

这两个参数均用来设置图形边界空白宽度,接受一个含有4个元素的数值向量,分别对应图形下,左,上,右的边界宽度。前者默认取值是 c(5,4,4,2)+ 0.1,取值单位是线条宽度(line width);后者取值单位是英寸。这两个参数用于控制绘图面积的大小。

13.mfrow,mfcol

画布切割参数,取值为 mfrow = c(nrow,mcol),表示将画布切分为n行m列。mfcol与mfrow类似。

14.mgp

设置坐标轴到画布边缘的宽度,取值为 mgp = c(x,y,z),默认为mgp=c(3,1,0),分别表示坐标轴标题、坐标轴刻度标签、坐标轴线与图形的距离。图1-1-4 六种不同的线条样式及线条的宽度

15.pch

设置点的形状。数字1至25分别代表25种不同的点的形状,其中实心点(15~20号点型)是可以有背景色填充的。见图1-1-5。图1-1-5 R语言中内置的25种点型

16.srt

该参数用来控制图形中字符串的旋转角度。常规取值为−360~360,也就是一个角度值,但是该参数也可以接受不在此范围内的数值,比如−720,不过这种取值没有意义。

17.tck,tcl

这两个参数都表示坐标轴刻度线的高度,前者取值是与图形宽度和高度的比例值(取值−1~1之间),后者取值是与文本行高的比例值。负值表示坐标轴刻度向外,正值表示向内。

18.usr

该参数用于限定画布的大小,取值为 usr=c(x1,x2,y1,y2),分别表示图形x轴的左、右极限,y轴的下、上极限,即一个矩形区域。如果坐标轴进行了log变换,那么usr参数的实际值就是相应参数的10次幂。具体用法详见第二章。

19.xaxt,yaxt

设置坐标轴样式,默认是“s”,即标准样式。如果不需要坐标轴,或者是需要自定义坐标轴,那么此处可以设置为“n”,即表示不绘制坐标轴的刻度和刻度标签,但是仍然会绘制一条刻度线。

20.xlog,ylog

顾名思义,坐标轴取值的log转换参数,默认是FALSE。

21.fig

该参数接受一个数值向量,取值为 fig = c(x1,x2,y1,y2),该参数往往配合new=TRUE参数使用,用于在当前图形上添加一幅新的图形。见图1-1-6。图1-1-6 在当前图形中添加一幅新的图形

22.xpd

该参数用于设置绘图区域的大小,取值为TRUE,FALSE或者NA。当取值为FALSE时,表示将绘图区域限定在默认的绘图区域内;当取值为TRUE时,表示将绘图区域限定为默认的图形区域;当取值为NA时,表示将绘图区域限定为默认的设备区域。见图1-1-7。图1-1-7 绘图时的三大区域

设备区域可以看成是Rstudio中的Plots窗口的面积,图形区域是指图形的“占地面积”,绘图区域是指图形中点、线、条柱等元素所占的面积,所以图形区域包括绘图区域。图形中的坐标轴或者图形标题等元素就是出现在图形区域中,而非绘图区域。xpd参数的作用就在于事先设定绘图区域的大小,这有助于我们在绘图区域外的部分添加额外的内容,比如:图1-1-8 定义绘图区域

利用这一特性,我们就可以轻松绘制出医学科研论文中常见的“版面图”(panel plot),即一张画布上分布多张图形,而不需要再借助其他软件进行图形拼接了。

以上22个参数,都是par()函数中较为常用的。其中大部分参数可以直接在高级绘图函数中使用,效果等同于在par()中使用,而有一些参数只能在par()中使用。下面列出的参数只能在par()中设置和实现,在高级绘图函数中无法实现其功能。

此外,有一点非常值得注意,par()函数对于图形参数的改变是永久性的,这是什么意思呢?意思是说,当你打开R,直至R关闭,par()函数中的参数对你所绘制的每张图都管用。但是现实情况是,我们有时候只需要一次调用par(),而不希望它一直工作。此时,有两个方法:其一,在作图之前,将par()函数中的所有参数保存为一个实名对象,等到图形绘制完毕,将这个实名对象释放出来即可;其二,图形绘制完毕后,直接调用dev.off()函数关闭绘图框,这样就不会影响下一幅图了。方法一如代码所示:第二节 plot()函数

在医学科研论文中,我们常见的统计图形可以概括为以下几种:散点图、直方图、条形图、线图、盒形图、饼图。这几种图形是医学统计图形的基础,更复杂的图形也是在它们的基础之上搭建的。因此,要想完成一幅精美的且包含较多信息的统计图形,必须先对最基础的几种图形有所了解。R语言的基础绘图包中,提供了针对这些基础图形的绘制函数,并且由于有par()函数的存在,我们可以自定义许多不同形式的统计图形,以满足我们的科研需要。

plot()函数本身并不是一个特型函数,而是一个泛型函数(generic method)。对于不同的数据,它可以绘制出不同的图形,比如对于连续型数据,可以绘制出散点图;对于分类数据,可以绘制出盒形图。更宽泛的,对于一些统计模型,比如生存分析模型,我们可以使用plot()绘制出相应的生存曲线。由于盒形图、直方图有专门的函数进行绘制,故在此只介绍最简单的散点图的绘制方法。

plot()函数的使用频率非常高,无论是早期的数据探索,还是最后的数据呈现,都能用到它。读者在帮助文档中查看该函数时,会发现它的参数非常少,这是因为par()的绝大部分参数在plot()中也是通用的。读者在上一节中所看到的许多图形,也是由plot()函数实现的,所以关于plot()的用法在此处不再赘述。但是,有一个参数需要介绍一下,那就是type,该参数表示所绘制散点图的类型,下面的代码展示了较为常用的6种类型,其中“p”表示绘制散点;“b”表示点连线;“l”表示绘制线图;“s”表示绘制阶梯;“o”表示绘制点连线,此处线条穿过每一个点,与“b”类型稍有不同;“n”表示不绘制任何图形元素。见图1-2-1。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载