R语言初步 彭司华 上海海洋大学 2016.3
内容 一 R简介 二 函数与对象 三 R绘图 四 数据保存 五 用R做正态性检验
The R Project for Statistical Computing
简 史 R语言是从S统计绘图语言演变而来,可看作S的“方言”。 S语言上世纪70年代诞生于贝尔实验室,由Rick Becker, John Chambers, Allan Wilks开发。 基于S语言开发的商业软件Splus,可以方便的编写函数、建立模型,具有良好的扩展性,在国外学术界应用很广。 1995年由新西兰Auckland大学统计系的Robert Gentleman和Ross Ihaka,基于S语言的源代码,编写了一能执行S语言的软件,并将该软件的源代码全部公开,这就是R软件,其命令统称为R语言。
R的特点 多领域的统计资源 目前在R网站上约有2400个程序包,涵盖了基础统计学、社会学、经济学、生态学、空间分析、系统发育分析、生物信息学等诸多方面。 跨平台 R可在多种操作系统下运行,如Windows、MacOS、多种Linux和UNIX等。 命令行驱动 R即时解释,输入命令,即可获得相应的结果。
CRAN The Comprehensive R Archive Network 推荐镜像: 中国的镜像:数学所 http://ftp.ctex.org/mirrors/CRAN/ 即时更新的CRAN源 http://cran.r-project.org/
R登陆界面(Windows版)
R程序包(R Packages) 程序包是什么? R程序包是多个函数的集合,具有详细的说明和示例。 Window下的R程序包是经过编译的zip包。 每个程序包包含R函数、数据、帮助文件、描述文件等。 为什么要安装程序包? R程序包是R功能扩展,特定的分析功能,需要用相应的程序包实现。 例如:系统发育分析,常用到ape程序包,群落生态学vegan包等。
常用R程序包(I) ade4 利用欧几里得方法进行生态学数据分析 adephylo 系统进化数据挖掘与比较方法 ape 系统发育与进化分析 apTreeshape 进化树分析 boot Bootstrap检验 cluster 聚类分析 ecodist 生态学数据相异性分析 FD 功能多样性分析 geiger 物种形成速率与进化分析
常用R程序包(II) Graphics 绘图 lattice 栅格图 maptools 空间对象的读取和处理 mefa 生态学和生物地理学多元数据处理 mgcv 广义加性模型相关 mvpart 多变量分解 nlme 线性及非线性混合效应模型 ouch 系统发育比较 pgirmess 生态学数据分析 phangorn 系统发育分析
常用R程序包(III) picante 群落系统发育多样性分析 raster 栅格数据分析与处理 seqinr DNA序列分析 sp 空间数据处理 spatstat 空间点格局分析,模型拟合与检验 splancs 空间与时空点格局分析 stats R统计学包 SDMTools 物种分布模型工具 vegan 植物与植物群落的排序,生物多样性计算
程序包使用 程序包的中函数,都要先导入,再使用,因此导入程序包是第一步。 在控制台中输入如下命令: library(vegan) library(ade4) 程序包内的函数的用法与R内置的基本函数用法一样。 This is vegan 1.17-2
查看函数的帮助文件 函数的默认值是什么? 怎么使用? 使用时需要注意什么问题? 需要查询函数的帮助。 1 ?t.test 4 help("t.test") 6 查看R包pdf手册
R帮助文件的内容与格式
帮助文件的内容 lm{stats} #函数名及所在包 Fitting Linear Models #标题 Description #函数描述 Usage #默认选项 Arguments #参数 Details #详情 Author(s) #作者 References #参考文献 Examples #举例
二 R的函数 R是一种解释性语言,输入后可直接给出结果。 功能靠函数实现。 函数形式: 函数(输入数据,参数= ) 如果没有指定,则参数的以默认值为准。 例如: 平均值 mean(x, trim = 0, na.rm = FALSE, ...) 线性模型 lm(y~x, data=test)
R的函数 每一个函数执行特定的功能,后面紧跟括号,例如: 平均值 mean() 求和 sum() 绘图 plot() 排序 sort()
R有哪些函数? 查询的方法:Help>Html help>packages log() log10() exp() sin() cos() tan() asin() acos() binom.test() fisher.test() chisq.test() glm(y ~ x1+x2+x3, binomial) friedman.test() mean() sd() var() ….
R函数调用及其选项 箱线图绘制函数的调用 boxplot(day~type, data=bac, col="red", xlab="Virus", ylab="days") day~type,以type为横轴,day为纵轴绘制箱线图。 data=bac 数据来源bac col=“red” 箱线图为红色 xlab=“Virus” 横轴名称为Virus ylab=“days” 纵轴名称为days
赋值与注释 赋值符号 在控制台中键入如下命令 2 + 2 a <- 2 <-也可用=, 甚至->代替 b <- 2 c <- a+b c #注释 赋值符号
数组,数据框,列表 数组(array) 数组是k维的数据表(k in 1:n, n 为正整数)。 数据框(dataframe) 是由一个或几个向量和(或)因子构成,它们必须是等长的,但可以是不同的数据类型。 列表(list) 列表可以包含任何类型的对象。 可以包含向量、矩阵、高维数组,也可以包含列表
运算符 数学运算 运算后给出数值结果 +, -, *, /, ^ (幂) 比较运算 运算后给出判别结果(TRUE FALSE) >, <, <=, >=, ==, != 逻辑运算 与、或、非 !, &, &&, |, ||
数据框的组成 每个数据表可以看作一个数据框(dataframe)。 每一列(column)作为一个向量(vector)。 由很多不同类型的向量组成,如字符型,因子型,数值型。 每一行(row)作为一个记录(entry) 如何生成数据框? 两种办法: (1)从外部数据读取 (2)各类型因子组合成数据框
外部数据读取 最为常用的数据读取方式是用read.table() 函数或read.csv()函数读取外部txt或csv格式的文件。 一些R程序包(如foreign)也提供了直接读取Excel, SAS, dbf, Matlab, spss, systat, Minitab文件的函数。
向量的创建 四种类型的向量 字符型 character<-c("China", "Korea", "Japan", "UK", "USA", "France", "India", "Russia") 数值型 numeric<-c(1, 3, 6, 7, 3, 8, 6, 4) 逻辑型 logical<-c(T, F, T, F, T, F, F, T) 复数型 略
向量的创建 生成向量的函数 c(),rep(),seq(),”:” c(2,5,6,9) rep(2,times=4) seq(from=3, to=21, by=3 ) [1] 3 6 9 12 15 18 21 “:” 1:15 [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 通过与向量的组合,产生更为复杂的向量。 rep(1:2,c(10,15))
数据框的创建 创建数据框的函数:data.frame(), as.data.frame(), cbind(), rbind() head() #默认访问数据的前6行
类的判断 对象类型判断 is.numeric() #返回值为TRUE或FALSE is.logical() #是否为逻辑值 is.charactor() #是否为字符串 is.null() #是否为空 is.na() #是否为na
类的转换 as.numeric() #转换为数值型 as.logical() #转换为逻辑型 as.charactor() #转换为字符串 as.matrix() #转换为矩阵 as.data.frame() #转换为数据框
向量内的元素引用 intake.pre <- c(5260, 5470, 5640, 6180, 6390, 6515, 6805, 7515, 7515, 8230, 8770) intake.post <- c(3910, 4220, 3885, 5160, 5645, 4680, 5265, 5975, 6790, 6900, 7335) intake.pre[5]; #引用第5个元素 intake.pre[c(3,5,7)] #引用第3,5,7个元素 v <- c(3,5,7); intake.pre[v]; intake.pre[1:5]; #引用第1到5个元素 intake.pre[-c(3,5,7)] #去除第3,5,7元素
数据框内元素的引用 intake <- data.frame(intake.pre, intake.post) 引用数据框中的元素 (1) $ 引用列,后面为列的名称 例如 intake$intake.pre (2) [,]方括号引用,逗号前为行,逗号后为列 intake[,1]; 引用第1列 intake[5,]; 引用第5行 intake[5,1]; 引用第1列,第5行 i = 1:5; intake[i,] 引用1到5行
工作空间image R的所有对象都在计算机内存的工作空间中。 ls() 列出工作空间中的对象 rm() 删除工作空间中的对象 rm(list=ls()) 删除空间中所有对象 save.image() 保存工作镜像 getwd() 显示当前工作文件夹 setwd() 设定工作文件夹 可将结果保存在image中,形式为.Rdata文件,里面保存了R当前工作空间中的各种对象,包括函数。
例-线性回归 对一批涂料进行研究,确定搅拌速度对杂质含量的影响,数据如下,试进行回归分析 表3 搅拌速度对涂料中杂质的影响 转速rpm 20 表3 搅拌速度对涂料中杂质的影响 转速rpm 20 22 24 26 28 30 32 34 36 38 40 42 杂质率% 8.4 9.5 11.8 10.4 13.3 14.8 13.2 14.7 16.4 16.5 18.9 18.5
脚本举例 #将以下代码粘贴到编辑器中,另存为regression.r文件。 rate<-c(20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42) impurity <-c(8.4, 9.5, 11.8, 10.4, 13.3, 14.8, 13.2, 14.7, 16.4, 16.5, 18.9, 18.5) plot(impurity~rate) reg<-lm(impurity~rate) abline(reg,col=“red") summary(reg)
运行脚本 两种运行方式 1 通过source()函数运行 source("d:/regression.r") 2 直接粘贴到R控制台 ctrl+c, ctrl+v
三 R绘图
R绘制的图形
绘制地图 fields 包实例 spdep 包实例
空间分析绘图 gstat程序包实例
R绘图功能 R具备卓越的绘图功能,通过参数设置对图形进行精确控制。绘制的图形能满足出版印刷的要求,可以输出Jpg、tiff、eps、emf、pdf、png等各种格式。 通过与GhostScript软件的结合,可以生成600dpi,1200dpi的等各种分辨率和尺寸的图形。 绘图是通过绘图函数结合相应的选项完成的。 绘图函数包括高级绘图函数和低级绘图函数。
高级绘图函数 plot() 绘制散点图等多种图形,根据数据的类,调用相应的函数绘图 hist() 频率直方图 boxplot() 箱线图 stripchart() 点图 barplot() 柱状图 dotplot() piechart() 饼图 matplot() 数学图形
散点图与箱线图
在原有直方图上添加曲线
四 数据保存 write.table() write.csv() save.image() sink() unlink()
R网络资源 R主页: http://www.r-project.org R资源列表 NCEAS http://www.nceas.ucsb.edu/scicomp/software/r R Graphical Manual http://bm2.genes.nig.ac.jp/RGM2/index.php 统计之都: http://cos.name/ QuikR http://www.statmethods.net/ 丁国徽的R文档: http://www.biosino.org/R/R-doc/ R语言中文论坛 http://rbbs.biosino.org/Rbbs/forums/list.page
五 用R做正态性检验 1、ks.test() 2、shapiro.test() Shapiro-Wilk检验。 3、normtest包 lillie.test()可以实行更精确的Kolmogorov-Smirnov检验。 ad.test()进行Anderson-Darling正态性检验。 cvm.test()进行Cramer-von Mises正态性检验。 pearson.test()进行Pearson卡方正态性检验。 sf.test()进行Shapiro-Francia正态性检验。 4、fBasics包 normalTest()进行Kolmogorov-Smirnov正态性检验。 ksnormTest()进行Kolmogorov-Smirnov正态性检验。 shapiroTest()进行Shapiro-Wilk's正态检验。 jarqueberaTest()进行jarque-Bera正态性检验。 dagoTest进行D'Agostino正态性检验。 gofnorm采用13种方法进行检验,并输出结果。
五 用R做正态性检验 > k<-c(148 ,154, 158, 160, 161, 162, 166, 170, 182, 195, 236) shapiro.test(k) Shapiro-Wilk normality test data: k W = 0.7888, p-value = 0.006704 其p值小于0.05,所以我们可以拒绝原假设,即该数据不符合正态分布
五 用R做正态性检验 > shapiro.test(rnorm(100, mean = 5, sd = 3)) Shapiro-Wilk normality test data: rnorm(100, mean = 5, sd = 3) W = 0.9926, p-value = 0.863 这个例子中,第一个命令是检验一个随机生产的100个数据,该数据集符合均值为5、标准差为3的正态分布,其W统计量接近1,p值显著大于0.05,所以我们没办法拒绝其符合正态分布。