语言入门课程统计基础附录_第1页
语言入门课程统计基础附录_第2页
语言入门课程统计基础附录_第3页
语言入门课程统计基础附录_第4页
语言入门课程统计基础附录_第5页
已阅读5页,还剩86页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章《R语言统计基础》附 附 R语言中的常用数学函数与概率函 R语言基础统计操作指 R中的数据类 R中的外部数据导入命 R中的导出外部数据命 R中的基本数据管理命 R中的基本表格绘制命 R中的基本描述统计命 R中的常用数据处理 R中的基本图形绘制命 常用统计数据与R语言 341章《R本书的文字写作全程基于Windows平台下的Texlive与Texstudio,器两者都是开源免费的.RLATEX区别,这是为了体现R自身的特色.本统计分析工作使用了Rstudio这一出色的RGUI(GraphicalUserInterface,直译图形用户界面,即图形方式显示的计算机操作用户界面).在商业化软件使用费用居高不下的情分布图形绘制、统计结果可视化等内容,减少手动运算或计算器运算的繁琐步骤,大大增加了教师在教学过程中的自由度和创造性.这即可节省院校在商业软件上的成本支出,也可避免使用盗版软件带来的潜在法律隐患.这里简单说明几个相关软件的安装方式,以供有的读者参加架设自己的写作平台,以熟练数理统计与软件应用类文档的写作模式.对于有志于从事实际研究写作与,或是将要从事数理与软件类文档写作的读者,提前熟悉LATEX语则是极有必要的.我在上课过程中即要求学生使LATEX软件来撰写和提交作业.LATEX容,这里不拟展开,读者可检索相关网络资料或相关书籍进行(没错,完全可以本书相关软件的建议安装顺序为Texlive,Texstudio,R和Rstudio.LATEXRstudio生成pdf文件Texlive和Texstudio.5Texlive本书写作时的版本为Texlive 以下安装均以此版本为基准Texlive2015进行,下面以windows操作系统为例介绍其安装过程.Texlive每年更新一次,版本虽有不同,但安装过程完全相同.镜像文件解压缩后,打开文件夹,点击图1.1中的安装文件开始安装出现图1.2所示界面,(图1.3和1.4),图1.3中点击Continue,然后将图1.4“是”点击切换后安装,建议初学者选择默认的安装方式,不要选择定制化安装(custominstall).安装过程耗时较长,安装过程中呈现图1.5所示界面当呈现图1.6所示界面时,表示安装完成,点击完成即可TeXstudioTeXstudio的安装比较简单.可打 点击图1.7中的“Download”安装包,运行并安装即可R的安R的安装可通过https: 装包进行.在安装过程中,会出现图1.8所示窗口,请根据自身电脑系统选择是否安装32位及64位程序,如果不确定自己电脑的类型,选择32位程序即可.窗口1.9中建议选择“接受默认选项”.RR3.1系列,每隔几个月即会更新一次;书稿接近完成时已进入R3.3系列.读者可安装版的R进行学习.与目前的多数软件更新不同,R目前的更新方式较为原始,不能覆盖更新,而需单独R再行安装安装完毕后,R,并在其命令窗口输入指令来执行相关操作.的初始界面非常朴素,(图1.10),可以进行各种命令操作一开始,可以将其当作一个计算器来使用,如输入命令:2*sin(pi/3)#表示求2n/3的值1.732051(图1.11).#R表示注释,(相比之下,%LATEX中的注释符号安装完毕后的一个重要工作就是设定当前工作(workingdirec-tory).查看当前工作令是getwd(),而设定当前工作令是setwd().通常要求工作路径的名称不包含汉字,并应以英文字母开始.R“友好的软件,以后凡是路径名、文件夹名、文件名名等,应养成以英文字母命名的习惯.另外要注意的是,R中表示路径分隔的符号为/而不是\,windows系统下的习惯不同.在使用本书时,建议在(E盘)根下建议一个名为R的,然后将其设为当前工作.输入以下命令即可完成设定:此后所有的数据与文件应放至此R顺利提取.剩余的功能请R语言相关参考书自行探索.R中的函数时习惯在函数名称后带上(),而不仅仅是函数名.R(默认安装包)有限,通常不能满足实际统计应用与数据分析的要求,往往需要自行安装一些新的包.安装程序包令如下:install.packages("""中输入包的名称.若想输入多个包,可采用如下方式:install.packages(c("package1","package2"))输入命令后回车,R会提醒选定镜像站,一般就近选择即可(如选择Beijing的镜像站),确定后开始安装,出现类似界面1.10时即安装完R,R3.1R3.2系列,RR(3.2系列内部的升级则不存在此问题,如从3.2.1版本升级为3.2.2版本,只需重新安装R软件即可,无须重新安装程序包).此时,R包的迁移.R安装路径中library下的所有R包均拷至新版本R的library下,然后输入以下命令执行更新:update.packages(checkBuilt=TRUE,ask=FALSE)Rstudio对许多普通使用者而言,R的一大劣势就在于其本身的界面过于简单,不够直观,与其他软件的兼容性差.这一问题至今仍无完全的解决方案,但GUI正在填补这方面的差距.Rstudio就是其中的佼佼者,安装谢rmarkdownhtml,wordpdf(pdfLATEX套装,Texlive2015;生成中文pdf通常需要安装rticles包),还可生成网页幻灯片.安装shiny包后,还可制作页App.Rstudio的功能是强大的,更新速度也较快,是值得推荐的一个GUI.Rstudio的安装,可在https 自己电脑系统的的安装包,并安装.安装完毕后的界面如下:R命令,R的对象,右下角的窗口显示已安装的包,并可作为绘图结果的展示窗口.首次打开Rstudio,会出现图1.13所示窗口,选择默认选项开始使用Rstudio前,可能需要进行一些调试.如在Rstudio界面的tools–globaloptions–sweave–weaveRnwfilesusing选项中要确保此选项为knitr而不是sweave.Rstudio软件时,通常Rmardown包来创Rmd(Rmarkdown的缩写)文档,Markdown这一标记语言的轻型文档,可轻松html,wordpdf形式.Rmarkdown的写作规则简单,10分钟左右即可初步掌握.Rmarkdown文档的语法要求,详细说明与具体功能,请参见其文档,如下首次使用时RstudioRmarkdown等相关程序包选择默认安装即可.安装完毕后,出现界面1.15.若是普通文档,选择即可;如要制作网页幻灯片,选择Presentation.假定选择,输入文档名称与作者名称(通常建议文档名称为英文)后,将出现图1.16的界面.RstudioR代码的文档.在此文档中,凡是R代码都嵌入```和```之间.例如:knitHTML摁键后,(图1.17),RstudioR的计算或绘图结果整合至所选文档形式中.HTML形式保存使用Rmarkdown文档及knitr、rticles等R包的好处在于可以实(reproduciblereports).在传统的写作模式中,统计软件与写作软件是分离的,spss分析数据和绘图,word写作,这就需spssword文档中.如果数据发生变化或绘图的参数需要做出修改,就需要将修改后结果重新粘贴.这无形中会增加许多不必要的冗余劳动.而在Rstudio平台下,利用相关的R包,可一定程度上实现统计分析与报告撰写的“无缝”,当分析的数据、绘制的图形、给出的例子出现变化后,只需重新点击编译摁键,即可生成新的文档,而无须担心粘贴与格式修改问题.当然,目前的相关功能还在初始阶段,,作与日常交流而言,目前的功能已基本足够.knitr的功能介绍与#个人网页#统计之都对knitr的简单介绍knitr功能的英文介绍RRstudio中,函数均有其帮助文档.plot()函数,help("plot")或?plot查看其具体用法及示例.在以后的应用中,本书撰写过程中参阅大量国内外相关、著作与.这里将部分国内的、值得推荐且方便获取的与著作列出,供各位教师和同学参考.其中,基础类提供了许多丰富的练习题(尤其是在概率论部分),可供有的同学做进一步巩固和提高;软件操作类推荐了近几年翻译过来或国内R语言操作指南,R软件使用;知识拓展类的著作可供教师和学生作为课外阅读材料或课堂讨论材料,以了解统计学的发展史,基 、、、2011年版.

2009年版2016年版2014年版版社2016年版.毅、:《R语言实用》,:2014年版2013年版.2010年版学》,:中计2011年版.中计2004年版.技术2016年版斯:《统计思想》,:翻译1987年版.大学2014年版.Abelson,R.(1995).StatisticsasPrincipledArgument.Hillsdale,NJ:LawrenceErlbaumAssociates.Bock,D.,Velleman,P.,&DeVeaux,R.(2010).Stats:ModelingtheWorld.Boston,MA:PearsonEducation.Chance,B.L.,&Rossman,A.J.(2006).InvestigatingStatisti-calConcepts,Applications,andMethods.Boston,MA:CengageCrawley,M.(2015).Statistics:AnIntroductionUsingR.TheAtriumSouthernGate,Chichester,WestSus,UK:JohnWi-ley&Sons.Howell,D.C.(2013).FundamentalStatisticsfortheBehavioralSciences.Belmont,CA:Wadsworth,CengageLearning.Xie,Y.H.(2015).DynamicswithRandknitr.BocaRaton,FL:CRCPress.Crawley,M.(2013).TheRBook.NewYork:Wiley.TheAtriumSouthernGate,ChichesterWestSus,UK:JohnWiley&Sons.Fox,J.&Weisberg,S.(2011).AnRCompaniontoAppliedRegression.ThousandOaks,CA:SagePublications.Heiberger,R.M.&Holland,B.(2015).StatisticalysisandDataDisy:AnIntermediateCoursewithExamplesinR.NewYork:Springer.Howell,D.C.(2012).StatisticalMethodsforPsychology.Bel-mont,CA:Wadsworth,CengageLearning.Huitema,B.(2011).TheysisofCovarianceandAlterna-tives:StatisticalMethodsforExperiments,Quasi-Experiments,andSingle-CaseStudies.Hoboken,NJ:JohnWiley&Sons.Lawson,J.(2014).DesignandysisofExperimentswithR.BocaRaton,FL:CRCPress.Pituch,K.&Stevens,J.P.(2015).AppliedMultivariateStatis-ticsfortheSocialSciences.NewYork:.Tabachnick,B.G.&Fidell,L.S.(2013).UsingMultivariateStatistics.Boston,NJ:Pearson.Zelterman,D.(2015).AppliedMultivariateStatisticswithR.NewYork:Springer.还有许多优秀的英文资料,考虑到国内的同学可能很少能够接触到,或者能接触到也不愿意从事英文阅读,这里不再一一列出.其他内容,可参见正文中的注释部分,或直接发信与我联系.还要说明一点,R语言的发展特别迅速,将来可能会有更优秀的指导或网络公开出现,有兴趣者可自行关注其最近进展.以下是建议R学习者时时的相关.R官网:ggplot2:R-blogger:http://w Rstudio:https熟悉R之后,读者还可前往各R包开发者的网页或其其他个人网页,追踪其进展. 语言中的常用数学函数与概率概率论的学习中涉及众多基础数学函数与概率函数,这里简要列出中的相关函数名称,以供参考.R语言的帮助文档R中的基本数学函数命名规则简单,主要就是数学函数自身的名称,加上一些特定的参数构成(表1.1).数学函数的用法是一目了然的这里不再一一举例说明R中的概率函数是其一大特色.概率函数主要有以下四类R中的概率函数均以上述字母开头,指定不同分布名称及相关参数后,即可返回相关值.下面以正态分布为例说明各概率函数的用法(表1.3).1.1X∼N(102),f(x)如下 − −f(x)= e = e ,−∞<x<2π×R实现以下功能fP(XP(XP(9≤X≤

2求使得P(Xq0.2q值10个服从该分布的随机数解具体问题的分析请参照正态分布相关内容以下仅给出相关命令及命令:dnorm(12,mean=10,sd=2或简单地,dnorm(12,2).结果为 表 R语言中的常用数学函函 功 求绝对值,abs(-4) x x x x 正 余 正 xn xe integrate(f,lower,upper)求积分,f表示被积函数,lower表示积分下限D(fun, 对fun函数关于x求导,fun通常使 (x值后)指定点处的导数值,eval表 类型功能d(densityfunction),(cumulativedistributionfunction),给P(X≤q)的概率值,此处的p即表示概率分位数函数(lefunction),给出使得P(Xqpq(分位数值(randomdigits表 dnorm(x,mean=,sd=) P(X≤q)qnorm(p,mean=,sd=) rnorm(n,meansd 命令:pnorm(12,10,2),结果为0. .这实际上就是计算如∫

f(x)f(x)为本题中定义的概率密度函数命令:1-pnorm(8,10,2)或pnorm(8,10,2,lower.tail=F),答案为0. .参数lower.tail=F表示求出指定值的右侧积分值,即∫f(x)8f(x)为本题中定义的概率密度函数命令:pnorm(11,10,2)-pnorm(9,10,2),答案为0. ,此∫9

f(x)f(x)为本题中定义的概率密度函数命令:qnorm(0.2,10,28.316758此即表示使得如下积∫f(x)dx=q=8.316758,f(x)为本题中定义的概率密度函数为保证结果统一,这里先设定随机数数.若不设定,可能会造成显示结果并不唯一.命令如下:rnorm(5,10,2) meansd,N(01)即标准正态其他分布的概率计算相关命令与正态分布类似,只是在d,p,q,r后代入各自命令的名称即可,命令中的具体参数请查阅其帮助文档.如rbinom(5,10,0.2)即可输出5个服从B(100.2)分布的随机数,其格表 R中常见概率分布名称的缩分布名 R中的名二项分布(binomial 多项分(multinomialdistribution)正态分布(normaldistribution) 几何分布(geometricdistribution)geom卡方分布(chi-squareddistribution)chisqF分布(Fdistribution) 分 Beta分 泊松分布(poisson t分布(student 均匀分布(uniformdistribution) Logistic分布(Logisticdistribution) 式为rbinom(n,size,prob),其中n表示输出的随机数个数,size表示二项试验的总次数,prob表示每次试验成功的概率.再如,dbinom(4,10,0.2)表示求出P(X=4)的概率,其中X∼B(10,0.2),答案为0. 命令的格式为dbinom(x,size,prob),其中x表示成功次数,size表示二项试验的总次数,prob表示每次试验成功的概率.其他内容,请参见 语言基础统计操作指时代的统计工作早就已经过了手动制图制表和人工计算的阶段,这些工作已经离不开各类统计软件的参与.本节将简单介绍R中的基本描述RR(object).进行统计分析时,我们的对象自(data).R中,5种:(scalar),向量(vector),矩阵(matrix),(dataframe),(factor),及列表标量的含义同普通数学上的标量,就是纯粹的数字,这里不再介绍.我们的重点在于理解其余4种数据形式.(vector),就是一维的数值型、字符型或逻辑型数据的一维数组.Rc()函数生成向量,cconcatenatecombine,a<-c(1,2,-2,4,-2,3,7)#a#显示向量b<-c("one","two","three")#字符型需要c<-c(TRUE,TRUE,TRUE,FALSE,TRUE,FALSE)#d<-c(1:5)#表示产生一个整数序列,e<-seq(1,9,by=2)#以从1开始产生公差为2的等差序列9,即1357f<-rep(1:4,times=2)#表示产生一个系列,元素顺序排列两次,即12341234g<-rep(1:4,each=2)#表示产生一个系列,每个元素重复两次再按顺序排列,即11223344其中,<-表示赋值符号,很多情况下可以写成=.但对许多专业而言,两者之间的细微区别可能是其争论的焦点.多数情况下,<-是更为稳妥的方式,虽然写成=确实更加便捷.矩阵(matrix)是一个二维数组,但要求其中的每个元素具有相同的模(同为数值型、字符型或逻辑型matrix函数定义其基本格matrix(data,nrow=,ncol=,byrow=FALSE,dimnames=1.256列矩阵,130默认按列填充:y<-matrix(1:30,nrow=5,ncol=6)y[2显示矩阵y的第二行元y[,1显示矩阵y的第一列元y[1,2]#y的第一行第二列处的元素,y[1,c(2,3)]#显示矩阵y第一行的第二列及第三列处元素,y[c(2,3),2]#显示第二列的第二、三个元素,7解y显示如下1627384951.3matrix12×2矩阵,定义行列名,按行填充解cells<-c(1,-2,3,-rnames<-c("R1",cnames<-c("C1",matrix1<-matrix(cells,nrow=2,ncol=2,byrow=TRUE,di

1-3-(Array与矩阵类似2维.array()函数定义,其基本格式为: 其中vector表示向量dimensions“长度”(元素个数),dimnames表示维度名.1.4dim1<-c("A1","A2","A3",dim2<-c("B1","B2",dim3<-c("C1",z<-array(1:24, 3,2), dimnames=list(dim1,dim2,dim3))#c(4,3,2)中的数字,表示dim1,dim2,dim3的长度z解数组z展示如下,,B1B2159263748,,B1B2(dataframe)的数据形式,excel,spss,stata中的数据表单形式,它可以用来同时多种不同模式的数据.data.frame()函数可定义数据框,其基本格式为:data.frame(col1,col2, 其中col1col2,col3(需提前定义ID<-c(101:103)<-c("Alex","Bob","Cathy")#字符grade<-c(2,3,4)#数值型向score<-c(78,89,80)#数值型向widedata<-data.frame(,grade,score,s=ID)#以上述向量,建立数据框widedata#观察数据框的呈现形式,excel较widedata[1:2]#12(12个变量widedata[2:3]#显示数据框中的第2至3列(第2至3个变量)widedata[2,3]#显示第2行第3列的数据widedata[c("grade")]#显示数据框中的指定列(变量) #"$"符号表示使用数据框中的某一变量,结果以行方式呈现.一般地,"A$x"表示"Ax"table(widedata$,widedata$score) ,score)#可自行比较该结果解widedata数据框展示如下grade 上述命令中s=ID“实例标识符”(caseidentifier).设定此选项后,s(widedata)命令,ID“观测”(observation,即每一个或实验个案)表示数据框中的每一行,“变量”(variable)指称数据框中的每一列.也就是说,数据中的每一行代表着观察或实验个案的所有信息,而每一列则代表所有个案在某一共同维度每次使用数据框时,都使用“$”的方式调用其中的变量未免太过麻烦.为此,可事先绑定某一数据attach(dataframe),此后可省略这一符号直接使用数据框中的变量detach(dataframe).attach()命令的缺陷在于,如果同时使用了不同的数据框,或者变量的命名有重复,则会出现错误.当变量名有重复时,R以第1次出现的变量为为避免这一不足,可使用with()命令进行数据框绑定.只要保证输入令在with()函数内,则不论前面是否有定义重名的变量,均可以只针with()内的数据框进行处理.例如,Rmtcars数据中的wt变量求出其基本描述统计量并绘制箱线图:)R软件中自行查看with()的功能不仅在于此.data.frameDF,x>1的数据,可通过下述命令实现.DF=data.frame(x=c(1,1,1,2,2,3,3,3),y=1:8)DF[DF$x>1,] 如果使用with(),可则用如下方式DF[with(DF,x>1),在R中,(factor).R中使用函数因子型数据1.6体会以下因子定义,并查看其输出格式colors<-c("Red","Yellow","Red","Red")#定义定类colors<-factor(colors)#将向量colors为因子型数据,location<-c("Moon","Earth","Sun",stars<-factor(location,ordered=TRUE)#按字母序将定序stars定义为因子型数据,默认按字母序进行从低至高的排序,1、23location1factor(starsorder=TRUE,levels=c("Moon","Earth","Sun使用levels()命令,指定向量的从低至高次序,并用1、2、3解colors展示如下[1]RedYellowRedRedLevels:RedYellowstars展示如下[1]MoonEarthSunMoonLevels:Earth<Moon<Sunlocation1展示如下[1]MoonEarthSunMoonLevels:Moon<Earth<Sun(List)R中最复杂的数据结构,它是一系列数据对象的组合体,可将不同类型的数据对象置于同一数据名之下,其函数为list(),基本格式如下:list(object1,object2,·).1.7mylist,并查看其输出a<-"MyFirstb<-c("one","two",c<-matrix(1:12,d<-c(17,22,46,mylist<-list(title=a,=d,b,c)mylist[[2]]#显示列表中第2mylist[["ages"]] 解mylist列表展示如下[1]"MyFirst$[1]172246[1]"one""two""three"[,1][,2]159263748RR本身很少作为一个数据输入软件使用.若是一手数据,通常可使用Excel(WPS表格)等常用软件进行数据录入和管理,R导入进行处理.这里介绍几种常见的外部数据导入方式.txt使用read.table()函数导入.以本书提供的cgss2013short.csv数据为例,命令如下:cgss2013short<-read.table("cgss2013short.csv",header=T,sep=",")其中headerT表示首行读为标题sep=","表示分隔符为逗号.若分隔符为空格sep若分隔符为制表符,sep="\t".csvcsv数据是txt数据的特殊类型.导入csvread.csv()函数.以本书提供的cgss2013short.csv数据为例,命令如下:cgss2013short<-read.csv("cgss2013short.csv")Excel标准化的方式,是将Excelcsv文件后,再利用read.csv()函数导入.Excel格式的数据,但设置较为烦琐.后面介绍的readxl包中的read_excel()函数可非常方便的导入Excel数据,示例见后.spssHmiscspss.get()函数.数据为例,命令如下library(Hmisc)#Hmiscspssdata<-spss.get("accidents.sav",use.value.labels=T)#use.value.labels=T表示读入值注意,在使用非基础安装的函数时,stataRstata格式数据时,stata12及以下版本创建的,可以调用foreign包中的read.dta函数导入.如上一节示例:library(foreign)#调用foreign包,以便使用read.dta函cgss2013a<-read.dta("cgss2013a.dta",convert.factors=F)#读入cgss2013a.dta数据其中,convert.factors=F表示不读入stata中的数值,而只保留原始数值.一般读入stata时应当将convert.factors设立为F(即FALSE状态.stata13及以上版本,readstata13包后,调用该包中的read.dta13()函数来.以本书提供的auto.dta数据为例,命令如下:auto<-read.dta13("auto.dta",convert.factors=另外,R中数据导出为其他格式.txt这种通用文本格式这里主要write.table函数与write.csv函write.table()函数的格式如下write.table(x,file="",sep="x(一般指数据框或矩阵file=""用于指定待创建的文本文件的名称与路径,sep=""表示确定分隔符的形态.csv格式write.csv函数除了无需写入seq=""这一参数外,其余格式与write.table()函数相同.RR包,可更为方便地进行数据导入导出工作.这些包通R3.0以上.其中,HadleyWickhamR包可方便灵活地导入各种形式的外部数据(表1.5).表 HadleyWickham的数据导入RR 功 csvfwf 导入Excel数据(包括.xls和.xlsx型) 导入SAS,SPSS,andStata数据 ) XML其中,readr中csv文件的函数为read_csv(),其使用较为简单,这里不再说明.readxl中的read_excel()较好了弥补了R不能直接Execl文件,Office2007Excel(之前为.xls文件,之后为.xlsx文件).说明如下:read_excel("filename.xls") 默认第一个工作表(sheetread_excel("filename.xlsx") 默认第一个工作表(sheetread_excel("filename.xls",sheet="data")#指定名称read_excel("filename.xls",sheet=2)#指定序位的工作例1.8(数据:student13.xlsx)数据student13.xlsx(这是大学2013级应用心理学专业的学生),该数据只有两列:学号与,是用Excel2016创建的.这可使用如下命令:liay(eaxl)red_ecl("sudns1.lsxSource:localdataframe学 睿

×··其中,学号和下方各自给出两个向量的数据类型,dbl表示即双精度浮点型chrcharacter即字符型.10行结果,剩余结果默认不显示.haven包共有三个函数,SAS、SPSSStata:SAS:read_sas("filename.sas")SPSS:read_sav("filename.sav")Stata:read_dta("filename.dta")其使用是方便快捷的,这里不再举例RR同样可作为数据导出工具,然而一般情况下,Rcsv这种跨软件、跨平台的文本格式可能是更符合常规的.这一命令为:write.table(x,file="",sep="")其中,x为待写出的R对象,file=""中则输入写出文件名称,=""中输入分隔符.注意file=""的引号中应输入后缀名.txt.write.csv(x,file="")注意file=""的引号中应输入后缀名.csv.当然file=也可略去不写,直接写成write.csv(x,"")也是可以的.例如auto.dtaRautomobilcsv文件,可使用如下命令:liy(s)wicv((uo),uv他格式令这不再介绍.RR进行基本数据管理,并介绍常用1.955510列的数据框,在R中可通过下面令实现:student<-c(1,2,3,4,data<-c("11/29/15","12/01/15","11/30/15","11/28/15",country<-c("","","Japan","Japan","gender<-c("M","F","M","F","M")age<-c(21,22,24,23,99)sscores<-data.frame(student,data,country,gender,age,s1,s2,s3,s4,s5,stringsAsFactors=FALSE)sscores数据框显示如下1本小节的编写很大程度上参考了RobertKabacoff的《R语言实战》 :人民邮 ,一书4章,读者可在该书中找到更详尽的关于基础数据管理的介绍 M F M 5门课程的成绩需要总合起来,形成一个总分创建只包含感变量的数据集按进行不同年级的分组将研究范围局限在某个时段上提取该固定时间段内的数据表1.6 描述 ˆ(or 乘 求x/y transform()sumx和meanx两个新变量sscores<-transform(sscores,sums=s1+s2+s3+s4+s5,=(s1+s2+s3+s4+s5)/5)sscores数据框显示如下 sums M F M 变量的生编码是指如何根据已有变量的现有值创建新的值,如:将一个连续型变量修改为二分变量(虚拟变量);将续型变量修改为一组定序(或定类)变量;将误编码的值修改为正确值;等等.这需要使用一系列的逻辑运算符,具体可见下表(表1.7).1.7运算 描 x| x或x&y x和y 检测x是否为真现将sscores数据框中按创建年级的定序变量:“年级”grade,分为grade1,grade2,grade3,grade4四个区间.可执行如下命令.sscores$age[sscores$age==99NA#99转换为缺失值,语句variable[condition]<-仅在condtion的值为真时执行赋值sscores$grade[sscores$age>=24]<-"grade4"sscores$grade[sscores$age>=23&sscores$age<24]<-"grade3"sscores$grade[sscores$age>=21&sscores$age<23]<-"grade2"sscores$grade[sscores$age<21]<-"grade1"sscoresgrade显示如下 within函数写成更简洁的形式with的作用类似,但在within()中可以修改数据框,而with()则不能.{grade<-NAgrade[age>=24]<-"grade4"grade[age>=23&age<24]<-"grade3"grade[age>=21&age<23]<-"grade2"grade[age<21]<-"grade1"sscoresgrade显示如下 上述命令执行后,grade1、grade2、grade3和grade4还只是普通的字符型变量,但从统计上它们构成了一组定序变量,R“因子”.下面sscores$grade<-leadership数据框中变量agecat显示如下 Levels:1<2<3<Rcut()(定类或定序变量grade<-cut(age,breaks=c(19,21,23,24,30),right=F,labels=c("grade1","grade2","grade3","grade4"))其中breaks=指定了分界点若指定breaks=c(a,b,c,d),则数据将被分为如下3组,(a,b],(b,c],(c,d].如果要指定最小值在本组之内,right=F;labels指定了分组之后的名称.注意,cut()函数后,R自动给出一个有序因子.有两种方式可以修改变量名.一是弹窗式直接修改,使用命令fix(leadership),可在弹出的数据窗口进行修改.第二,编程式修改,可使用reshape包中的rename()函数,其格式为:rename(dataframe,c(oldname1="newname",oldname2="newname2",···)Rnames()函数重命名变量,<-c("name1","name2",···,"name5")可地重命名多个变量(第1至5个).R中,缺失NA(NotAvailable)表示,不可能出现的值NaN(NotaNumber)显示.函数is.na()可以用来判定是否存在缺失值.结果将返回一组逻辑值,是缺失值的为TRUE,非缺失值的为FALSE.可自行尝试命令is.na(leadership)体会函数作用.使用na.rm=TRUE选项,可以在计算时剔除缺失值.使用na.omit()会地移除所有包含缺失值的观测(即包含缺失值的所有行),请谨慎应R中提供了丰富的将某一类型数据转换为其他类型数据的函数.可参见表1.8.判断函数将返回逻辑值,转换函数则将对象转换为对应的数据类型.order()函数,默认为升序排列,在变量前加一减号则表示降序.可尝试运行以下命令.sscoresnew<-sscores[order(gender,-age),]#将sscores中个案按gender排序、同的则按倒排序表 判 转 merge函数.合并两个数据框时,通常应1个公共变量,(innerjoin).基本格式total<-merge(dataframe1,dataframe2,ID合并横向合并实际上相当于往原有数据框中加入新的变量.如果只是想直接横向合并两个矩阵或数据框,且不需要建立公共变量,可以使用cbind()函数,其格式为cbind(A,B),这里的A与B需要具有相同的行数,且按相同纵向合并两个数据框使用rbind()函数,格式如下:total<-rbind(dataframeA,dataframeB)该函数要求两个数据框必须拥有相同的变量,但是它们的顺序并不一定相同,R会根据变量名自动进行匹配.如果dataframeA中包括了dataframeB中没有的变量,在合并之前需要进行预处理:删除A中的多余变量;或在B中新建A中有、B中没有的变量,并将其值设定为NA.纵向合并数据框用于往数据框中添加新的观测,这在实际中应用比较广泛.例如大型问卷的输入通常是多人完成的,每个人建立的数据框是同类型的,但是输入了不同观测(即不同对象)的信息.最后研究需要加若干人分别录入的数据进行汇总,就需要用到这里的纵向合并.选择数据框中的变量可以以dataframe[rname,cname]的方式进行.如sscores<-sscores[,c(6:10)]表示选取数据框sscores中的第6至10列变量为新数据框.这与下面语句的功能是一样的.temp1<-c("s1","s2","s3","s4","s5")#也可写为temp1<-paste("s",1:5,sep="")sscoresnew2<-如果知道s3和s4是数据框sscores89个变量,则可通sscoresnew4<-sscores[c(-8,-此外,还可以通过设定NULL值的方式删除变量sscores$q3<-sscores$q4<-通过指定行标可以选择行,每一行即观测值.sscoresnew5<-sscores[1:3,13行which语句选择满足特定要求的观测,sscoresnew5<-sscores[which(sscores$gender=="M"&>22),表示选取为男且大于22的观测sscoresnew6<-subset(sscores,gender=="M"&age>22,select=(gender:s4))sscoresnew7<-subset(sscores,age<24)sample()函数可用于随机抽取子数据集,其基本格式为:sample(x,size,rece=FALSE,prob=NULL)其中x为所抽取的对象(总体),n为样本量,rece=False表示无放回抽样(默认),rece=TRUE表示有放回抽样(元素可能被重复抽中,现sscoresnew8<-sscoresnew[sample(1:nrow(sscores),3,re=F),]#sscoresnew中无放回抽取三行观1:nrow(sscores)表示从1到sscores的行数,3个数,作为sscoresnew的行标抽取()可以用来从正整数中抽取指定个整数,其格式为:(n,size=n,rece=FALSE,prob=NULL)和survey包.R期通常以字符型向量输入,然后再通过一定的方式进行转换,使用的函数是as.Date(),其格式为:as.Date(x,其中x是字符型数据,而input_format则给出用于读入数据的适当格式,如表1.9:表 R中的日期格符号含 示4Sys.Date()可以返回当天的日期,而date()则返回当前的日期和时间.另外,可以使用format(x,format="output_format")函数来输出指定格式的日期值,并提取日期中的某些部分.R内部在数据时是用197011日以来的天数表示的,之前的日期表示为负数.两个日期之间可以做加减运算.可尝试以下命令:days<-enddate-startdate如果大家运行上述语句,即可算出本书作者自进入大学的第一天开使用difftime()函数可计算时间间隔,并以星期(weeks)、天(days)、时(hours)、分(mins)、秒(secs)为单位表示.基本格式为:difftime(enddate,startdate,units="另外,函数system.time()()中命令所需的时间.例用户系统流逝 R统计学中数据多用图表呈现,其中表格应用更为广泛,可全面、准确的数据管理函数多针对定量数据.对于定类数据,也有相关的描述方式,主要是制作频次分布表和列联表.R中提供了用于创建频数表和列联表的若干函数,具体可见表0R中的表格创建函 功table(x1,x2,···,xn) 创建一个n维列联表prop.table(table,margins) margins.table(table,margins) addmargins(table,margins) Rmtcars数据为例,介绍上述函数mytable1<-with(mtcars,table(am)) am表示车辆是自动档还是手动档车,0表示自动档,1表示手动档.从表中可以看出,此数据中共有19辆自动档车,13辆手动档车.使用prop.table()可将频数表中频数转化为比例:prop.table(mytable1)#可使用options(digits=)函数指定有效数字位结果如下 另外还可以使用prop.table()*100将频次转化为百分比对于二维定类变量,可以制作二维频次表,即列联表.基本格式为:table(A,B).其中A是行变量,B是列变量.也可使用xtabs()函数创建列联表,基本格式为:xtabs(∼A+B,data=).示例如下:mytable2<-with(mtcars,table(am,cyl))#table()函数默认忽略缺失值,mytable2<-xtabs(∼am+cyl,data=mtcars)margin.table(mytable2,1)#1table()1个变量,2表示第2个变量margin.table(mytable2,2)#求列边缘和prop.table(mytable2,1)#求行百分比prop.table(mytable2,2)#求列百分比mytable2结果如下:4680341832cyl表示车辆具有的气缸数,4、6、8分别表示汽车具有的气缸个数 46801addmargins()函数为上述表格添加边缘和.其默认为表中所有的变量创建边缘和.addmargins(mytable,1)可为表格添加列边缘和,addmargins(mytable,2)可为表格添加行边缘和.46803418327addmargins(mytable2,1)46803418327addmargins(mytable2,2)4680341832同时,也可使用gmodels包中的CrossTable()函数创建二维列联表,其功能较强大:可计算百分比;指定小数位数;计算期望和残差;将缺失值作为一种有效值;进行行和列标题的标注;SASSPSS风格的输出等.可参阅help(CrossTable)以了解详情.可尝试以下代码,查看其输出: mtcars$cyl)#

频次表使用格式同二维列联表,表,table()函数的使用格式为:mytable<-table(A,B,C,···)xtabs()函数基本格式为:mytable<-xs(++cdosdata=示例从略,请自行探索以上所选取的数据均为类型变量,有时数值型数据也需要进行分组呈现,以简化其分布.如将原始数据中的精确划分为20∼29,30∼39,40~49等组别并统计其频次.Rcut函数来完成在变量重编码中已介绍cut()函数:cut(x,breaks,labels=NULL,right=TRUE该函数可用于分组计数语法简单.以下是一个具体例子.例1.10(数据:rscore2015.csv)使用rscore2015.csv数据中的total这一数值型变量,(total)分成以下四级:60∼69,70∼79,80∼89,90∼99,D,C,BA组,并统计各组内的频次.解输入以下命令rs<-tl<-with(rs,cut(total,c(60,70,80,90,100),labels=c("60∼69","70∼79","80∼89","90∼99")),right=F)60∼ 70∼ 80∼ 90∼ range(rs$final)可观total变量的数值范围,返回值为:60,从表格中可以看出60∼7070∼8080∼9090∼100四个分组中人数610326人.若想使结果更加直观,prop.table(tl)*100命令输出各个分组中人数的百分比,这留给大家自行尝试.table()函数即可完成,但也有一些制表工作需1.11(数据:SongPoem.csv)先看一首宋词这是宋代著名词人的一首《青玉案》.宋词古典文学史上的一颗明珠《全宋词》共收录流传到今天的词作一千三百三十多家将近两万首.在如此众多的作品中,哪些词语使用得最多?这就涉及对古汉语文学例如,此例中的“东风夜放花千树”一句,如果把所有可能的两个字的组合列出来,就可划分为如下词群:东 风 夜 放 花 千,东风 风夜 夜放 放花 花千若不考虑其他字数更长的组合可能11个词语.当然这其中会有很多无意义的组合,但可以预想的是,这些无意义的组合将不太可能大规模地重复出现因此在排序的过程中它们自动地就被排在高频词语之后基于上述思路10个左右的词语单位然后对这些词语单位进行频次统计,即可得到宋词中的高频词语列表.试利用R完成此项工作,列出宋词中的前100位高频词语.解(检校)的《全宋词》电子资料,其中可能有部分不正确,结果参考.完整的程序和数据可从shud相关网(命令细节不是此处学习的重点,关键在于体会编程命令txt=read.csv("SongPoem.csv",colClasses=1此例源自R语言开发者的工作,具体参见2#sentences=strsplit(txt$Sentence,",|。|!|?|、")sentences=unlist(sentences)sentences=sentences[sentences!=""]s.len=nchar(sentences)#单句太长则说明有可能是错误的字符,sentences=sentences[s.len<=15]s.len=nchar(sentences)splitwords=function(x,x.len)substring(x,1:(x.len-1),words=mapply(splitwords,sentences,s.len,SIMPLIFY=TRUE,USE.NAMES=FALSE)words=unlist(words)words.freq=sort(words.freq,decreasing=TRUE)(词库中表缺漏或错误的字符),可得到如下前100位的宋词高频词汇列表(表1.11).结果参考.试想,如果没有软件的帮助,手动统计这些工作,需要多少时日呢?早期的天文学家曾称英格兰数学家、天文学家Napier(1550∼1617)发明的对数(logarithm)运算曾极大地“延长”了天文学家的,因为在这一运算出现之前,“天文数字”的繁琐运算与校对上,而有了对数及常用对数表后之后,这种宏大数字的计算就变得容易了很多,节省了天文学家的宝贵时间,也就相当于延长他们的.在这个意义上,现代计算机软件更是极大地延长了全人类的寿R在描述性统计量的计算方面,R中有众多可供选择的方法.表1.12列出上述命令的形式较为简单,这里不一一列举说明.其缺点在于一次只能返回一种描述统计信息.实际上,还可使用其他一些命令输出一系列的描述表 123456789Rx的平均数 x n scale(x,center= ,scale=) x首先summary函数来获取描述性统计量例1.12(数据:test.score.csv)summary()函数的用法示例.test.score<-read.csv("test.score.csv")#读入数 给出test.score 量A、B的统计量解返回结果如下 Min.:49.0 Min.:44.001st 1stMedian MedianMean:75.4 3rdQu.:84.5 3rdQu.:77.75Max.:91.0 Max.:90.00另外,apply()“应用”到矩阵、数组、数据框的任何维度上.基本格式为:apply(x,MARGIN,FUN,···其中,x为数据对象,MARGIN是维度的下标,FUN是由你指定的函数,···则包括了任何想传FUN的参数,在矩阵或数据框中,MARGIN=1表示行,MARGIN=2表示列.1.13apply()函数,求指定数据的行均值或列均值.这里采用一个虚拟的数据来做演示.可自行观察相关结果.set.seed(1234)#设定随机数mydata<-matrix(rnorm(24),nrow=8)#N(01)分布的24个随机数,并按83矩阵形式排列apply(mydata1,mean计算每行的均值结果输出8个值apply(mydata2,mean计算每列的均值结果输入3个值apply(mydata2meantrim0.4)计算每列的截尾均值(本例中,截尾均值基于中间20%的数据,40%的值均被忽略解mydata数据展示如下]---]--]--]--]-]-]--]--apply(mydata,1,mean返回结果如下[1]-----[6]--apply(mydata,2,mean返回结果如下[1]- - -命令apply(mydata2,mean,trim=0.4返回结果如下[1]- - -Rapply()lapply(),sapply(),mapply(),tapply()等.lapply()函数的基本格式为:lapply(x,function,···其中x是数据对象,被视为list类型,其他类型的对象可通过函数as.list()自动转换成list类型;FUN为一个任意的函数,该函数将被应用到x中的每一个向量上,而···则包括了任何想传递给FUN的参数.以本书提供的fat.csv数据为例,对该数据中各向量求均值可使用以fat<-lapply(fat,mean)#fat数据中各向量求均[1][1][1]sapply函数和lapply()函数类似,也是对list进行处理,不同的是在返回结果上sapply会根据结果的数据类型和结构重新构建一个合理的数据类型返回.调用格式如下:sapply(x,function,···,同样的,x是list对象,FUN是由指定函数,而···则包括了任何想传递给FUN的参数,而simpfily=TRUE则表示返回值不是一个s,simpfily=FALSE表示返回值是一个ls.mapply()sapply()函数的一个版本函数mapply能将函数一次运用到每一个参数上其调用方式如下mapply(FUN,···,其中MoreArgs表示函数的参数列表,FUN是由你指定的函数1.14mapply()函数示例.mapply(seq,from=1:3,to=10,by=1:3)#相当于命令seq(1:10,1)、seq(2:10,2)、seq(3:10,3)解[1]123456789[1]2468[1]36还有其他很多函数可以应用,可自行尝试tapply()函数可对数据进行分组统计.当数据矩阵需要按其中某一列的内容来分组,在组内读数据需要使用指定的函数运算时,则可以考虑使用该函数.调用格式为:tapply(x,INDEX,FUN=NULL,···,其中,x为向量,INDEX为长度和x一样的因子列表,sapply()函数例1.15(数据:auto.csv)tapply()函数示例解输入如下命令tapply(auto$price,auto$foreign, 根据返回结果可知,tapply()函数按照国产车和进口车的分组将二者在描述性统计中,通常需要得到不同类别或者不同组别的平均值,R中的aggregate()函数提供了这样一个功能.基本格式为:aggregate(x,by,其中x(x可以为两个或两个以上变量by是分类的标准FUN是要进行的统计操作函数例1.16(数据:chicken.csv)chicken.csv(假定已调用该数据)是一组描述不同喂养方式下小鸡重量的数据.试用R求出不同喂养方式下解实现方式可有多种.这里使aggreate()函数做出说明.输入命令:aggregate(chicken$weight,by=list(chicken$feeds),FUN=mean) A DA,B,CD喂养方式下小鸡的平均重量分别为446.6667,428.3333,380.0000416.6667,A种喂养方式下小鸡平均体重最高,A种方式可能最有利于小鸡生长.可能之所以用黑体显示,“表象”,不一定能排除其他随机因素的影响.A种方式最有利于小鸡生长,还需结合此研究的研究设计,并结合后面推论性统计的内容再来综合确定.此外psych包中提供的相关函数.describe()函数也提供丰富的描述性统计结果1.17(数据:chicken.csv)使用psych包中的describe函数解输入如下命令library(psych)#调用psychdescribe(chicken[c("weight","feeds")])#weight,在此仅列出names(describe(chicken[c("weight","feeds")]))的[1] [8] trimmed(trimmed5%和最低5%后的均值mad(medianabsolutedeviation1skew为偏度,kurtosis为峰度,se为标准误(standarderror).1MAD是一个稳健的离散趋势指标,其计算方式为:将原始数据排序后算出其中位数,再用每个数据减去该中位数并对差值取绝对值,再对这些差值绝对值进行排序求得MAD.如果要实现分组统计,则可使用此包中的describeBy()函数例1.18(数据:mtcars)使用psych包中的describeBy()函数进行分组描述统计,mpg变量分别进行描解(假定已绑定数据并已调用psych包describeBy(mpg,结果如下Group:nmad·· ··Group:nmad·· ··为节省篇幅,这里略去了描述统计结果中的min,max,range,skew,kurtosis和se统计量.Rdplyr包,reshape2tidyr包进行简单的介绍.这些包中的许多函数比起R的基础安装包中令更dplyrdplyr是一个做数据框处理和汇总的包,有着更简单的语法和更快的处理速度,功能十分强大.dplyr的目的就是设计一个数据处理的语法,通过这个语法可以设计一些简单的操作方式,data.frame或者一个数据库中的数据进行同样的数据操作.dplyr把大部分数据处理的形式写成了一些编写R代码,同时它能够快速完成计算.dplyrtbldata.framecube,sql对象.tbl对象的特征将结合例子进行说明. Rmtcars数据为例运行下面命令library(dplyr)#使用dplyr包中的函数,均需提前调入包结果如下[1] 可见mtcars_tbl既是data.frame格式的数据,同时又有tbl的特点mtcars_tbl显示如下Source:localdataframe[32x1626344658667884946Variablesnotshown:qsec(dbl),vs(dbl),am(dbl),gear(dbl),mtcars进行对比,tbl格式只显示前十行的记录,会根据你窗口和分辨率的大小选取适当数目的变量显示并在下面注明未显示的dplyr的基本函数有五个,分别为fil()select(),arrange(),mutate(),和summarise().这五个数据函数有相同的输入模式,第一个选filter()函数的作用是返回满足观测条件的观测值1.19执行以下命令,体会函数作用.df<-data.frame(color=c("blue","black","blue","blue","black"),filter(tbl,color=="blue")#选出color中为blue的元解结果显示如下 filter(tbl,value%in%c(1,4))则表示选出value值为14的素在mtcars_tbl数据中,可使用命令filter(mtcars_tbl,vs==0)命令filter(mtcars,gear%in%c(3,4))选出vs0的元素和34的元素.可自行尝试观察运行结果select()函数的功能是子集选取,tbl对象只保留选择的对象.命令select(tbl,color)是将tbl数据中的color变量保留.如果将命令中的color前加减号则是将color变量删除.select也可以进行重命名的操作,如 =mpg,weight=wt)mtcars_tbl中的mpg和wtpergallonselect(mtcars_tbl,starts_with("m"))表示选取以字符m开头的变量.select(mtcars_tbl,contain

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论