资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,R语言与统计分析,上海师范大学,(,2004年2月,),*,Verzani,Simple R Using R for Introductory Statistics,2002,www.math.csi.cuny.edu/Statistics/R/simpleR/index.html,J.H.Maindonald,Using R for Data Analysis and Graphics An Introduction,2001,Julian J.Faraway,Practical Regression and ANOVA Uing R,2002,www.stat.lsa.umich.edu/faraway/,快速入门,:,www.stat.lsa.umich.edu/faraway/stat500/introR.html,S.Chatterjee,A.S.Hadi&B.Price,Regression Analysis by Example,3rd Ed.,John Wiley&Sons,2000,www.ilr.cornell.edu/hadi/RABE/,(印影版,中国统计出版社,2003),3,R的无私奉献者,Bill Venables,Robert Gentleman,Ross Ihaka,4,为什么要学习R语言,R是,一个开放(GPL)的统计编程环境,一种语言,是语言(由AT&T Bell实验室的Rick Becker,John Chambers,Allan Wilks开发)的一种方言(dialect)之一,另一则为S-plus.,一种软件,是集统计分析与图形直观显示于一体的统计分析,R作为一个计划(project),最早(1995年)是由Auckland大学统计系的Robert Gentleman和Ross Ihaka开始编制,目前由核心开发小组(R Development Core Team 以后用,R DCT,表示)维护,他们完全自愿、工作努力负责,并将全球优秀的统计应用软件打包提供给我们。我们可以通过计划的网站(www.r-project.org)了解有关的最新信息和使用说明,得到最新版本的软件和基于的应用统计软件包.,5,是完全免费的!而S-Plus尽管是非常优秀的统计分析软件,可是你需要支付一笔$US.,R可以在运行于UNIX,Windows和Macintosh的操作系统上.,R嵌入了一个非常实用的帮助系统.,R具有很强的作图能力.,我们将程序容易地移植到S-Plus程序中,反之的许多过程直接或稍作修改用于.,通过语言的许多内嵌统计函数,很容易学习和掌握R语言的语法.,我们可以编制自己的函数来扩展现有的语言(这就是为什么它在不断等级完善!),.,6,参考资料,随软件所附pdf文档(help-manuals),随版本更新:,W.N.Venables,D.M.Smith and the,R DCT,:Introduction to R-Notes on R:A Programming Environment for Data Analysis and Graphics,2003.,bayes.math.montana.edu/Rweb/Rnotes/R.html,R DCT,The R Environment for Statistical Computing and Graphics-Reference Index,2003.,R DCT,R Data Import/Export,2003.,R DCT,R Language Definition,2003,R DCT,Writing R Extensions,2003,9,Kurt Hornik,R FAQ,Version 1.8-1,2003-10-07,B.D.Ripley,R for Windows FAQ,Version for rw1080,R Html Help,Statistical Data Analysis,其它PDF/HTML文件:,Kickstarting R,cran.r-project.org/doc/contrib/Lemon-kickstart/,R examples,Alison Gibbs,www.utstat.toronto.edu/alisong/Teaching/Winter04/Sta248/Rex.html,10,*Ko-Kang Wang,Introduction to R for Statisticians,2004,J.H.Maindonald,Using R for Data Analysis and Graphics An Introduction,2001,J.H.Maindonald,Using S-PLUS for Data Analysis and Graphics,2001,Emmanuel Paradis,R for beginners,Jonathan Baron,R reference card,Bret Larget,R for Introductory Statistics,2002,W.N.Venables and B.D.Ripley,Modern Applied,Statistics with S,4th Ed.,2002 www.stats.ox.ac.uk/pub/MASS4/,11,近期畅销书:,Peter Dalgaard,Introductory Statistics with R,Springer,2002,John Maindonald,John Braun,Data Analysis and Graphics Using R-An Example-based Approach,Cambridge University Press,2003,John Fox,An R and S-Plus Companion to Applied Regression,Sage Publications,Inc.,2002,12,R的运行平台-1,R_GUI,启动R,我们看到,R GUI,(graphic users interface)的主窗口,它由三部分组成,主菜单,工具条,R console(R的运行窗口),R console,你的主要工作是在这里通过发布命令来完成的,包括数据集的建立,数据的分析,作图等.,在这里你可以得到在线帮助,help.start(),HTML格式的关于R的帮助文件,help(),得到相应函数的帮助,例如help(plot),demo(),得到R提供的几个示例,q(),退出R,同Matlab类似,用右shift键可以重现以前的命令,13,工具条介绍,Source R code,Load image,Save image,Copy and Paste,Stop current computation,Source R code,执行,R,文件,(,*.R,或,*,.r,),Save image,保存工作空间,文件名为,*,.,RData,Load image,打开已有的工作空间,Stop current computation,中止当前计算,(,由于超时等原因,),14,主菜单介绍,15,R的运行平台-2,R_Commander(,帮助文件,),作者:,John Fox(,jfoxmcmaster.ca,),版本:Rcmdr Version 0.9-0,安装,Rcmdr是R的一个宏包,它还需要,宏包car,的支持,在加载,Rcmdr宏包,之前,需要先安装宏包car,Rcmdr仅在单文件RGui(SDI)下工作,这可通过RGui的,Edit=GUI preferences,进行设置(,注:好象均可?,),运行,安装宏包car,在RGui下通过Packages=Load packages加载Rcmdr宏包,16,17,功能,R Commander是一个交互式菜单/对话框系统(menu/dialog-box interfaces),用于进行数据的读、写、转换及常用的统计分析作者还添加了线性与广义线性模型等统计分析工具,结构与使用(具体见Rcmdr的,Getting Started,部分),R Commander窗口由一些菜单及按钮组成,菜单的下方是一个log/script窗口,通过菜单的对话框将命令发送到RGUI中,以完成某一项统计分析这些命令同时在log窗口中显示出来它们可以被重新编辑修改,并可通过Rcmdr窗口右下角的Submit按钮再一次发送给R执行,命令指向一个当前的或者活动的数据集.一旦读入一个新的数据集,它就是活动的,注:,通过Data=Import data加载数据集,其,名字及路径,不能含有中文,而中R GUI中是允许的!,18,R Commander的菜单,R Commander 菜单树(Menu Tree),(点击),R Commander的信息反馈(information field),19,R的运行平台-3,R_WinEdt 安装与使用,作者:,Uwe Ligges,(liggesstatistik.uni-dortmund.de),版本:RWinEdt Version 1.6.0,必备软件,R:cran.r-project.org/,WinEdt5.x:(或CTeX2.3.x),R-WinEdt:cran.r-project.org/contrib/extra/winedt/,R_WinEdt的安装,将R_WinEdt压缩软件释放到WinEdt的pluginsR-WinEdt目录下,双击install.exe文件进行进行安装,由此会在WinEdt目录下自动生成R.ini(此目录还有winedt.exe!),在此我们假定大家已安装了CTeX2.3.x,并进行缺省安装,也即WinEdt在,C:CTeXWinEdt,目录下,20,R_WinEdt的设置,设置桌面快击键:,为了同时可以使用LaTeX/CTeX和R_WinEdt,在桌面上复制一个WinEdt快击键,并命名为R_WinEdt;,右击R_WinEdt快击键,选择属性,然后在“目标(T)”中输入,C:CTeXWinEdtWinEdt-C=R-WinEdt-e=r.ini,(并不必须)如果每次运行R都想加载某个/些软件包或函数,则可对R主目录下etc下的.Rprofile进行修改,如每次加载simple宏包就可使用下面的设置,library(simple),options(editor=c:/program files/winedt/winedt,-c=R-WinEdt-edit-e=r.ini-V),21,R_WinEdt,界面,22,R_WinEdt,菜单,23,R_WinEdt的特点,-与RGui共同运行,-具有WinEdt的强大功能(如Delimiter检查,高级搜索,书签,宏,缩进与注释的对齐等),-语法高亮显示(Syntax-Highlighting),-同时可以编辑多个R程序,-设置简单快速的按钮与快击键,-将窗口中的代码(script)发送到R中运行,-WinEdt中选中的代码(code)发送到R中运行,-单行代码(script)发送到R中运行,-及时更新历史命令记录文件.Rhistory,以便重复使用旧的命令,-提供衫的模块,如:,for(_ in _)_,24,R_WinEdt 菜单与热键,#Command Hot Key Menu Icon 说明,#-,#Brackets Check Ctrl+F12 括号配对检查,#R History ALT+H R HIST.保存历史记录,#R-line-and go ALT+L 单行发送,#R-line Ctrl+ALT+L 单行发送并返回,#R-R-paste-and go ALT+P R-PASTE 选中后发送,#R-R-paste Ctrl+ALT+P 选中后发送并返回,#R-R-source-and go ALT+S R-SOURCE R文件发送,(先打开),#R-R-script Ctrl+ALT+S R SCRIPT R文件发送并返回,#function Ctrl+Alt+F 生成函数框架,#for Ctrl+Alt+O 生成for循环框架,#if Ctrl+Alt+I 生成if框架,#ifelse Ctrl+Alt+E 生成ifesle框架,#系统=高级=环境变量 中新建/添加).,另一方法:用纯文本修改文件Rini.el中的关于R的搜索,即(setq-default inferior-R-program-name“c:/Program Files/rwxxxx/bin/rterm.exe”)-也即只要去掉之前的分号(;).,修改桌面图标XEmacs的属性:在快捷方式的”目标”下添加,-q-l“c:.xemacsRinit.el“,在”起始位置”添加存放文件的目录.,31,ESS+XEmacs下R的使用-了解XEmacs视窗,不是问题的问题:,每次打开R_XEmacs可能会弹出信息“,Initialization complete,”,只要点击OK键就行了.,安装后初次使用会在屏幕的底部(“minibuffer”中)出现当前窗口,无法打开.Rhistory 的信息,.此记录历史命令的文件会在正常退出R与ESS时建立(但只在下面窗口,提示符后直接输入一个或多个命令后!),32,33,视窗介绍,John Fox将Xemacs主窗口(实际上称为frame)分为二个子窗口,上下分开(见上图所示).,在Xemacs主窗口的上方还有一个菜单条,(menu bar,)和一个工具条,(toolbar,),其内容会随缓冲区(,buffer,)主模式(,major mode,)而变化.你可以通过光标在上下子窗口中转换观察菜单与工具条的变化.,J.Fox为R提供了专门的工具条与菜单,非常便于使用(后面介绍).,上面的子窗口显示,*scratch*,缓冲区,其中你可以输入R命令.顾名思义,*scratch*,缓冲并非永久性的,当然你可以将其内容保存在文件中.,下面的子窗口显示R经Emacs运行的结果,在此缓冲区中你也,可以直接输入R命令.,34,每一子窗口下均有一个模式行(,mode line,),显示的缓冲的状态,其中包括:1)缓冲的名字 2)缓冲的主模式(或次模式)3)窗口在缓冲中的位置.,上面的子窗口包含,*scratch*,buffer,处于,ESSS,主模式(主模式由文件的扩展名所决定.S指S语言,当打开扩展名 为,.r,.R,.s,.S,.q的S语言源代码时,均处于ESSS主模式中),显示所有(,ALL,)缓冲内容现在是空的.,下面的子窗口包含,*R*,buffer,处在,iESS,(inferior ESS 之所以你它是inferior,因为它是受Emacs控制的!),目前处在缓冲的底部(,Bot,).你可以滑动游标观察其位置的变化.,指针(,point,):Emacs的光标,它与通常的光标还是有所差异,不过John Fox在ESS模式下按Windows的习惯进行了修改.,在窗口的下方是一个单行的小窗口,称为,minibuffer,(小缓冲),主要用于信息显示,其次若你要输入Emacs命令,它们会显示在minibuffer中,最后一命令(如搜索和替换)的响应在此完成.,35,ESS+XEmacs下R的使用,-R_XEmacs视窗,Paste to R(粘贴至R)按钮-将上面子窗口中的命令送到下面子窗口中执行,Paste line,执行光标所在行,Paste paragraph,执行光标所在段落(其中不含空行),Paste function,执行已定义的光标所在的函数,Paste region,执行用鼠标标记的区域,Source to R,执行上面子窗口(缓冲区)中的所有命令,对于R源文件在执行之前会重新保存更新的代码,对于*scratch*buffer中的代码保存后才能执行,(不同于前的几种方式)R文件中的源代码的执行过程不在下面的子窗口中显示出来!,注意:,首次使用会在minibuffer中出现Process to load into:R,按回车键继续,Stop,中止当前计算(如由于超时),36,R子菜单,如果光标/指针须在R的源文件中,则会出现ESS菜单,进行ESS会出现John Fox特地为R设计的R子菜单.,R子菜单本身包括三个子菜单,File,文件,Packages,宏包,Misc,其它,它们的功能与,R GUI,的类似,37,ESS=R=File菜单,Source R code,打开对话框以选择源文件,Save workspace,将,R,的工作空间存入文件,Load workspace,加载保存的工作空间,Change R directory,改变工作空间,(,指,R,运行过程空间,并非指上面子窗口的源文件目录,),38,ESS=R=packages菜单,Load package,加载,R,宏包,纳入搜索目录,Install package from CRAN,从,CRAN,处选择下载安装宏包,(,需要,internet,连接!,),Install package from local zip file,从本地计算机或网络宏包,(zip,压缩文件,),Update packages from CRAN,从,CRAN,处更新宏包,搜索所有安装宏包的新版本,下载并安装,39,ESS=R=Misc菜单,Remove all objects,删除,R,工件空间中所有的对象,List objects,列出,R,工作空间中的对象,Display path,列出,R,的搜索路径,File=Exit R/,Xemacs,菜单,Quit saving R workspace,在当前的,R,目录中保存工作空间,Just quit,不保存,R,工作空间直接退出,R,系统会 提醒你是否真的不保存修改的缓冲,40,R的语法与数据结构,语法,符号,命令或运算提示符,+续行符,基本算术运算,+加号,-减号,*乘号,/除号,乘方,赋值符,=或 3+5,3-5,3/5,35,x=5,?plot,help(plot),42,向量,向量是R中最为基本的类型,一个向量中元素的类型必须相同,包括,数值型,整型,单精度实型,双精度实型,逻辑型,复值型,字符型,43,建立向量的方法(函数),seq(),或,:,若向量(序列)具有较为简单的规律,rep(),若向量(序列)具有较为复杂的规律,c(),若向量(序列)没有什么规律,例子:,1:10,seq(1,10,by=0.5),seq(1,10,length=21),rep(2:5,2),rep(2:5,rep(2,4),x=c(42,7,64,9),length(x),44,向量运算中的循环法则(recycling rule),1:2+1:4,1:4+1:7,45,向量的下标(index)与向量子集(元素)的提取,正的下标,提取向量中对应的元素,负的下标,去掉向量中对应的元素,逻辑运算,提出向量中元素的值满足条件的元素,注:R中向量的下标从1开始,这与通常的统计或数学软件,一致而象C语言等计算机高级语言的向量下标则从0开始!,例子:,x=c(42,7,64,9),x1,x-2,xc(1,4),46,x10#值大于10的元素逻辑值,1 TRUE FALSE TRUE FALSE,xx10#值大于10的元素,1 42 64,xx10,#产生(0,1)上100个均匀分布随机数,y=runif(100,min=0,max=1),sum(ysum(yyx=c(42,7,64,9),y=1:4,z.df=data.frame(cbind(INDEX=y,VALUE=x),z.df,INDEX VALUE,1 142,2 2 7,3 364,4 4 9,注,.df 只是为了提醒自己z.df是一个数据框架,INDEX和VALUE是重新命名的向量名字,49,数据框架子集的提出取,格式 foorow,column其中 foo 数据框架的名称 row 需要提出取的行号 column 需要提出取的行号,例子(续上一例),z.df1,#提取第一个观测(第一行),INDEX VALUE,1 1 42,z.df,1#提取第一列(第一个变量的值),1 1 2 3 4,z.df2,1#提取第二行第一列的元素,1 2,50,列表(list),复杂的数据分析时,仅有向量与数据框架还不够,有时需要生成包含不同类型的对象,R的列表(list)就是包含任何类型的对象,例子:,foo=list(x=1:6,y=matrix(1:4,nrow=2),foo,$x,1 1 2 3 4 5 6,$y,1,2,1,1 3,2,2 4,51,列表子集的提出取,提取一个子对象如foo的x,下面三种方式等价 foo$xfoo1foo1 例子,foo$y,foo2,foo2,foo12,foo$y2,foo$y4,52,条件语句,作用:避免除零或负数的对数等数学问题,形式1:,if (条件)表达式1 else 表达式2,形式2 常优于形式1!,ifelse(条件,yes,no),试比较下面的三个结果:x=c(6:-4),sqrt(ifelse(x=0,x,NA),ifelse(x=0,sqrt(x),NA),if(x=0)sqrt(x)else NA,53,循环(loops),for()#若知道终止条件for(变量 in 向量)表达式,while()#若无法知道运行次数while(条件)表达式,两者通常可以转换例1试比较两种方法for(i in 1:5)print(1:i)i=1while(i 和+,而源程序中是不需要的!,55,n=3044,a=c(rep(1,2*n),rep(2,2*n),t=c(rep(1,n),rep(2,n),rep(2,n),rep(1,n),g=rep(rep(1:1522,rep(2,1522),4),y=rnorm(4*n,mean=4.13,sd=0.75),ybar=data.frame(A=factor(a),G=factor(g),+T=factor(t),Intensity=y),attach(ybar),ybar1:10,#查看ybar的前10行,res.mat=matrix(0,1522,8,byrow=TRUE),coef.mat=matrix(0,1522,4,byrow=TRUE),for(i in 1:1522),+gene.aov=aov(Intensity A+T+A*T,+sub=G=i),+res.mati,=residuals(gene.aov)#保存ANOVA分析的残差,+coef.mati,=coef(gene.aov)#保存ANOVA分析的方差系数,+,res.mat1:10,#查看残差的前10行,coef.mat1:10,#查看方差系数的前10行,56,向量化(vectorization),循环(loops)很有用,但如果能将一组命令向量化,则应尽量避免循环,原因在于,C是一种编译语言,其效率是很高的;R则是一种解释语言。在计算时,通常C要比R快100倍。,在R中充分使用向量化,因为R会立即调用C进行运算,因而大大提高计算的效率!,例子-见Ko-Kang Wangs“R Programming Workshop”,pp9-11(Gamma函数作图),Vector_1.R 没有使用向量和循环的源程序,Vector_2.R 使用for循环改进后的源程序,Vector_3.R 使用向量化后源程序,57,函数,函数是一系列语句的组合,在R中可以写出自己的函数,形式:,变量名=function(变量列表)函数体,函数引用:变量名(变量的值),函数可以递归引用,但不提倡!,例子 使用gamma函数求n!,factorial=function(n),+if(n=0)gamma(n+1),+else print(“Please input a positive integer!),+,factorial(6),factorial(-6),58,用于处理错误的函数 用于处理用户输入不正确的类型而可能出现的错误,warning()若错误不严重以至影响整个计算,stop()若错误可能导致计算中止,print()显示必要的信息,formatC()数值作为字符串输出,cat()字符串联,可以插入n(换行)及t(tab键),paste()字符粘贴(非字符型自动转换)例子:,cat(R,is,a good,software.n),formatC(1/3,format=f,digits=4)formatC(1/3,format=e,digits=4)paste(1:12)#与as.character(1:12)等价paste(A,1:6,sep=)paste(today is,date(),59,R中的编程,编程的重要性,一个统计软件(包)应该包罗万象所有统计方法或技术,可以完成所有的任务?,这是一种错误的观点!,太贵!,费时!,SAS是一个世界上最为优秀的统计分析软件之一,但!当然SAS具体编程能力,而SPSS更糟!,通过编程可以实现(开发)满足自己需要的函数或宏包,60,好的编程习惯,为了他人,更为你本人!你的程序应该具有,可读性(readability),可理解性(understandability),习惯之一:行前缩进(Indentation),在此推荐使用软件,WinEdt =已开发了基于WinEdt的R使用平台,(X)Emacs=已开发了基于(X)Emacs的R使用平台,UltraEdit,习惯之二:增加注释(Commenting),它是你的帮助,R中使用#作为注释语句的开始.,习惯之三:变量的命名,使用意义明确的名字,切忌使用人或宠物的名字,61,例子 缩进,for(i in 1:1522),+gene.aov-aov(Intensity A+T+A*T,+sub=G=i),+res.mati,-residuals(gene.aov),+coef.mati,for(i in 1:1522),+gene.aov-aov(Intensity A+T+A*T,+sub=G=i),+res.mati,-residuals(gene.aov),+coef.mati,-coef(gene.aov),+,62,实例演示,1Julian Faraway提供的一个简短的入门,Introduction to R,使用 R GUI,使用 R Commander,使用 R_XEmacs,Further reference,:Moores,The Basic Practice of Statistics,Second Edition,(Freeman,2000),2.John Verzani 提供的统计学入门SimpleR-Using R for Introductory Statistics,使用R_WinEdt,63,
展开阅读全文