资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,R,语言与统计分析,上海师范大学,(,2004,年,2,月,),*,http:/, Simple R Using R for Introductory Statistics, 2002,http:/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,http:/,www.stat.lsa.umich.edu,/faraway/,快速入门,:,http:/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,http:/,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,表示,),维护,他们完全自愿、工作努力负责,并将全球优秀的统计应用软件打包提供给我们。我们可以通过计划的网站,(,http:/www.r-project.org,),了解有关的最新信息和使用说明,得到最新版本的软件和基于的应用统计软件包,.,5,是完全免费的! 而,S-Plus,尽管是非常优秀的统计分析软件,可是你需要支付一笔,$US .,R,可以在运行于,UNIX, Windows,和,Macintosh,的操作系统上,.,R,嵌入了一个非常实用的帮助系统,.,R,具有很强的作图能力,.,我们将程序容易地移植到,S-Plus,程序中,反之的许多过程直接或稍作修改用于,.,通过语言的许多内嵌统计函数,很容易学习和掌握,R,语言的语法,.,我们可以编制自己的函数来扩展现有的语言,(,这就是为什么它在不断等级完善,!),.,6,网站,的资源,R,主页,:,http:/www.r-project.org,CRAN (Comprehensive R Archive Network),http:/cran.r-project.org,CRAN,的镜像站点,http:/cran.r-project.org/mirrors.html,UCLA,提供的关于,R,与,S-Plus,的联接,,具有搜索功能,http:/,statcomp.ats.ucla.edu/splus/default.htm,李东风主页,提供了的,Windows,版本,http:/, -,稳妥,(,分布,),广义回归分析,tseries,时间序列分析,VaR,风险值分析,matrix ,矩阵运算,cinterface, C,与,R,的接口,foreign ,读写由,S, Minitab, SAS, SPSS,Stata,等软件的数据,normix,混合正态分布分析,nortest,正态分布的,Anderson-Darling,检验,MCMCpack,基于,Gibbs,抽样的,MCMC,抽样方法,fracdiff,分数差分模型的极大似然估计,还有很多,8,参考资料,随软件所附,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.,http:/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,http:/cran.r-project.org/doc/contrib,/,Lemon-,kickstart,/,R examples, Alison Gibbs,http:/,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 http:/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:,http:/cran.r-project.org,/,WinEdt5.x: http:/,/ (,或,CTeX2.3.x),R-,WinEdt,:,http:/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,xx,10 #,值大于,10,的元素,1 42 64,xx,10, #,产生,(0,1),上,100,个均匀分布随机数,y = runif(100, min = 0, max = 1),sum(y,sum(yy,x=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$x,foo1foo1,例子,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=1,while(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,实例演示,1,Julian 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,
展开阅读全文