您好,欢迎访问三七文档
R语言与统计分析李启寨中科院数学与系统科学研究院中科院北京基因组研究所目录1.R简介2.R语法与数据结构3.程序控制语句4.矩阵运算5.统计函数6.输入与输出7.图形3R的无私奉献者RossIhakaRobertGentlemanBillVenables41.R简介1.1简介¾R语言是一种S语言¾一种软件,集统计分析与图形直观显示¾R是完全免费的!而S-Plus尽管是非常优秀的统计分析软件,需要支付一笔$¾R可以运行于UNIX,Windows和Macintosh的操作系统上5¾R嵌入了一个非常实用的帮助系统¾R具有很强的作图能力¾R程序易移植到S-Plus程序中,反之S的许多程序直接或稍作修改可用于R¾通过R语言的许多内嵌统计函数,很容易学习和掌握R语言的语法¾可以编制自己的函数来扩展现有的R语言(这就是为什么它在不断升级完善!!)……61.2R的网上资源¾R主页:¾CRAN(ComprehensiveRArchiveNetwork),¾UCLA提供的关于R与S-Plus的联接,具有搜索功能¾李东风主页提供了R的Windows版本¾如果使用FTP软件(如Cuteftp)则推荐使用(匿名访问)ftp.u-aizu.ac.jp71.3统计分析软件包CRAN提供了许多便于统计分析的宏–VaR–风险值分析–tseries–时间序列分析–matrix–矩阵运算–cinterface–C与R的接口–foreign–读写由S,Minitab,SAS,SPSS,Stata等软件的数据–normix–混合正态分布分析–nortest–正态分布的Anderson-Darling检验–MCMCpack–基于Gibbs抽样的MCMC抽样方法还有很多……2.R语法与数据结构2.1语法¾符号•命令或运算提示符•+续行符¾基本算术运算•+加号•-减号•*乘号•/除号•^乘方¾赋值符•=或-92.2向量向量是R中最为基本的单元(列向量)一个向量中元素的类型必须相同,包括¾数值型整型单精度实型双精度实型¾逻辑型¾复值型¾字符型10建立向量的方法•seq()向量(序列)具有较为简单的规律•rep()向量(序列)具有较为复杂的规律•c()向量(序列)没有什么规律例:1:10seq(1,10,by=0.5)或者seq(from=1,to=10,by=0.5)或者seq(1,10,length=21)rep(2:5,2)重复第一个自变量(2:5)若干次rep(2:5,rep(2,4))22334455x=c(42,7,64,9)length(x)11注意向量运算中的循环法则(recyclingrule)•1:2+1:4•1:4+1:7111212224231344246⎡⎤⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥+=+=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦⎣⎦111222241333624448351564626873710⎡⎤⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥+=+=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦⎣⎦12向量的下标(index)与向量子集(元素)的提取•正的下标提取向量中对应的元素•负的下标去掉向量中对应的元素•逻辑运算提出向量中元素的值满足条件的元素注:R中向量的下标从1开始,这与通常的统计或数学软件一致而象C语言等计算机高级语言的向量下标则从0开始!例子:x=c(42,7,64,9)x[1]x[-2]x[c(1,4)]x[which(x9)]132.3因子(factor)•统计中常处理的一类数据:分类数据(categoricaldata);涉及的变量称作:名义(nominal)变量或分类变量。•R中用factor来表示分类变量;对于factor类型的数据,常用的函数有:table();ftable();产生列联表(contingencytable)chisq.test();对列联表做卡方检验14例:sex=factor(c(男,女,男,男,女))res.tab-table(sex)res.tab男女32names(res.tab)cat(res.tab)152.4数据框(dataframe)一个数据框就是将许多向量组合起来的一个对象,它是二维的,通常其列表示变量,其行表示观测数据框的用途–数据框的主要用途是保存统计建模需要的数据。数据框的生成–例子:d-data.frame(name=c(李明,张聪,王建),age=c(30,35,28),height=c(180,162,175))16数据框的读取若数据本身保存在一个文件中,则可以使用•read.table()仅接受带有分界符的ASCII数据如果数据是电子报表的形式,则采用下面的两种变型•read.csv()先将数据另存为带逗号的数据(CommaSeperatedvalues)•read.delim()先将数据另存为用tab作为分界符的数据172.5列表(list)–有时需要生成包含不同类型的对象–R的列表(list)是一种特别的对象集合,它的元素也由下标区分,但可以是任意类型。元素本身也可以是其它数据类型。•列表元素的引用:–列表名[[下标]];–列表名[[“元素名”]]或者列表名$元素名–注意和“列表名[下标]”的区别:它取得的是子列表,而不是元素。18例子:foo=list(x=1:6,y=matrix(1:4,nrow=2))foo$x[1]123456$y[,1][,2][1,]13[2,]24列表子集的提取提取一个子对象如foo的x,foo$xfoo[1]193.程序控制语句3.1条件语句形式1:if(条件){表达式}if(条件){表达式}else{表达式}if…elseif…elseif…else…形式2(常优于形式1!)ifelse(条件,yes,no)3.2循环(loops)for(变量in向量){表达式}while(条件){表达式}203.3函数–函数是一系列语句的组合,在R中可以写出自己的函数–形式:变量名=function(变量列表){函数体}–函数引用:变量名(变量的值)–函数可以递归引用,但不提倡!–例子–使用gamma函数求n!factorial=function(n){+if(n=0)gamma(n+1)+elseprint(“Pleaseinputapositiveinteger!)+}factorial(6)factorial(-6)213.4类型的相互转换•转换函数:as.类型名–例如:as.logical;as.integer;as.double;as.character;as.vector;as.matrix;as.list;as.data.frame……•注:is.类型名:用于判断是否是该类型as.integer(F)as.integer(T)4.矩阵运算向量运算•整数除法:%/%•求余:%%•排序:sort(),order(),rank()•向量x,y的内积:crossprod(x,y);•绝对值:abs()•平方根:sqrt()•找出互不相同的元素:unique()•找到真值下表的集合:which()矩阵A,B•矩阵的生成:matrix(1:12,ncol=4,byrow=T)•转置:t(A)•矩阵乘法:A%*%B•矩阵的逆:solve(A)•解线性方程组:Ax=b语句:solve(A,b)•特征值分解:eigen()返回特征值和特征向量(列向量),结果是个列表•行列式:det()•奇异值分解:svd()•相对特征根|A-λB|=0y-svd(B)eigen(diag(1/(y$d))%*%t(y$u)%*%A%*%(y$v))245.统计函数观测数据x(向量)¾最小值:min(x)¾最大值:max(x)¾极差:max(x)-min(x)¾求和:sum(x)¾均值:mean(x)¾方差:var(x)¾标准差:sd(x)¾中位数:median(x)255.2分布函数•每一种分布有四个函数:d―density(密度函数)p―分布函数q―分位数函数r―随机数生成函数。例:正态分布的这四个函数为:dnorm,pnorm,qnorm,rnorm26•常见的分布正态:normt分布:tF分布:f卡方(包括非中心):chisq均匀:unif指数:exp威布尔:weibull伽玛:gamma:贝塔:beta对数正态:lnorm逻辑分布:logis柯西:cauchy二项分布:binom几何分布:geom超几何:hyper负二项:nbinom泊松:pois27例1.生成随机数n服从正态分布的随机变量,均值为16,方差为1.5rnorm(n,mean=16,sd=1.5)服从均匀分布的随机变量,取值(0,1)runif(n)例2.自由度为1的卡方分布的四分位差0.74*(qchisq(0.75,1)-qchisq(0.25,1))6.数据的输入输出•输入函数:–read.table(‘filename’,header=T,row.names=1)–例子:HousePrice-read.table(houses.data)•输出函数:–cat(object,‘\t’,‘\n’,file=‘filename’,append=F);–sink(“文件名”)sink()–如果不指定文件名,则输出到控制窗口。–例子:cat(x1,‘\n’);cat(HousePrice[,1],file=‘price.txt’);297.图形NameSexAgeHeightWeight1AliceF1356.584.02BeckaF1365.398.03GailF1464.390.04KarenF1256.377.05KathyF1259.884.56MaryF1566.5112.07SandyF1151.350.58SharonF1562.5112.59TammyF1462.5102.510AlfredM1469.0112.511DukeM1463.5102.512GuidoM1567.0133.013JamesM1257.383.014JefferyM1362.584.015JohnM1259.099.516PhilipM1672.0150.017RobertM1264.8128.018ThomasM1157.585.019WilliamM1566.5112.0data.txt307.1直方图用hist()函数绘制直方图d-read.table('./data.txt',header=T,row.names=1,col.names=(c(Name,Sex,Age,Height,Weight)))attach(d)hist(Height)hist(d$Height)31327.2茎叶图用stem()函数绘制茎叶图stem(Weight,scale=2)Thedecimalpointis1digit(s)totherightofthe|5|16|7|78|344559|0810|03311|223312|813|314|15|0337.3盒形图用boxplot()绘制盒形图boxplot(Weight)34357.3Q-Q图用qqnorm绘制正态概率Q-Q图qqnorm(Weight)363
本文标题:R语言与统计分析1
链接地址:https://www.777doc.com/doc-4381568 .html