《统计建模与R语言.pptx》由会员分享,可在线阅读,更多相关《统计建模与R语言.pptx(23页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、求助符?help()例子:3+53-53/535x=5?plothelp(plot)第1页/共23页向量向量是R中最为基本的类型一个向量中元素的类型必须相同,包括数值型整型单精度实型双精度实型逻辑型复值型字符型第2页/共23页建立向量的方法(函数)seq()或:若向量(序列)具有较为简单的规律rep()若向量(序列)具有较为复杂的规律c()若向量(序列)没有什么规律例子:1:10seq(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)第3页/共23页向量运算中的循环法则(recycl
2、ing rule)1:2+1:41:4+1:7第4页/共23页向量的下标(index)与向量子集(元素)的提取正的下标 提取向量中对应的元素负的下标 去掉向量中对应的元素逻辑运算 提出向量中元素的值满足条件的元素注:R中向量的下标从1开始,这与通常的统计或数学软件一致而象C语言等计算机高级语言的向量下标则从0开始!例子:x=c(42,7,64,9)x1x-2xc(1,4)第5页/共23页x10#值大于10的元素逻辑值 1 TRUE FALSE TRUE FALSExx10#值大于10的元素 1 42 64xx10#产生(0,1)上100个均匀分布随机数y=runif(100,min=0,max
3、=1)sum(ysum(yyx=c(42,7,64,9)y=1:4z.df=data.frame(cbind(INDEX=y,VALUE=x)z.dfINDEX VALUE1 1422 2 73 3644 4 9注 .df 只是为了提醒自己z.df是一个数据框架 INDEX和VALUE是重新命名的向量名字第8页/共23页数据框架子集的提出取格式 foorow,column其中 foo 数据框架的名称 row 需要提出取的行号 column 需要提出取的行号例子(续上一例)z.df1,#提取第一个观测(第一行)INDEX VALUE 1 1 42 z.df,1#提取第一列(第一个变量的值)1 1
4、 2 3 4 z.df2,1#提取第二行第一列的元素1 2第9页/共23页列表(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第10页/共23页列表子集的提出取提取一个子对象如foo的x,下面三种方式等价 foo$xfoo1foo1 例子foo$yfoo2foo2foo12foo$y2foo$y4第11页/共23页条件语句 作用:避免除零或负数的对数等数学问题形式1:
5、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第12页/共23页循环(loops)for()#若知道终止条件for(变量 in 向量)表达式while()#若无法知道运行次数while(条件)表达式两者通常可以转换例1试比较两种方法for(i in 1:5)print(1:i)i=1while(i 和+,而源程序中是不需要的!第14页/共23页 n=3044 a=c(rep(1
6、,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:152
7、2)+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行第15页/共23页向量化(vectorization)循环(loops)很有用,但如果能将一组命令向量化,则应尽量避免循环,原因在于C是一种编译语言,其效率是很高的;R则是一种解释语言。在计算时,通常C要比R快100倍。在R中充分使用向量化,因为R
8、会立即调用C进行运算,因而大大提高计算的效率!例子-见Ko-Kang Wangs“R Programming Workshop”,pp9-11(Gamma函数作图)Vector_1.R 没有使用向量和循环的源程序Vector_2.R 使用for循环改进后的源程序Vector_3.R 使用向量化后源程序第16页/共23页函数函数是一系列语句的组合,在R中可以写出自己的函数形式:变量名=function(变量列表)函数体函数引用:变量名(变量的值)函数可以递归引用,但不提倡!例子 使用gamma函数求n!factorial=function(n)+if(n=0)gamma(n+1)+else pr
9、int(“Please input a positive integer!)+factorial(6)factorial(-6)第17页/共23页用于处理错误的函数 用于处理用户输入不正确的类型而可能出现的错误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,for
10、mat=e,digits=4)paste(1:12)#与as.character(1:12)等价paste(A,1:6,sep=)paste(today is,date()第18页/共23页R中的编程编程的重要性一个统计软件(包)应该包罗万象所有统计方法或技术,可以完成所有的任务?这是一种错误的观点!太贵!费时!SAS是一个世界上最为优秀的统计分析软件之一,但!当然SAS具体编程能力,而SPSS更糟!通过编程可以实现(开发)满足自己需要的函数或宏包 第19页/共23页好的编程习惯为了他人,更为你本人!你的程序应该具有可读性(readability)可理解性(understandability)
11、习惯之一:行前缩进(Indentation),在此推荐使用软件WinEdt =已开发了基于WinEdt的R使用平台(X)Emacs=已开发了基于(X)Emacs的R使用平台UltraEdit习惯之二:增加注释(Commenting),它是你的帮助 R中使用#作为注释语句的开始.习惯之三:变量的命名,使用意义明确的名字,切忌使用人或宠物的名字第20页/共23页例子 缩进 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)
12、+gene.aov-aov(Intensity A+T+A*T,+sub=G=i)+res.mati,-residuals(gene.aov)+coef.mati,-coef(gene.aov)+第21页/共23页实例演示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第22页/共23页2023/2/2323感谢您的观看!第23页/共23页