R语言学习总结_第1页
R语言学习总结_第2页
R语言学习总结_第3页
R语言学习总结_第4页
已阅读5页,还剩5页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1、.R语言学习汇总报告经过接近一个学期的学习,从对 R 语言的完全陌生,到现在对其有了一些粗浅的认识,其中经历了遇到困难苦思冥想的艰辛,也有解决问题以后豁然开朗的畅快。在学习的过程中,以前掌握的数理基础给我带来了不少便利,而认真地态度和踏实的性格也使我获益匪浅。在这个学期中,我学会了R 语言的基本操作和语法,以及针对具体的统计学问题相应的解决方法。并按时完成老师布置的课后作业,以达到学以致用的目的,也加强了对 R 语言操作的熟练度。一、初识 R软件R 软件是一套完整的数据处理、计算和制图软件系统。其功能包括:据存储和处理,数组运算,完整连贯的统计分析工具,优秀的统计制图功能已及简便而强大编程语言

2、。接触 R 语言以后,我的第一感觉就是方便和强大。 R 语言中有非常多的函数和包,我们几乎不用自己去编一些复杂的算法,而往往只需要短短几行代码就能解决很复杂的问题,这给我们的使用带来了极大地方便。于此同时,它又可操纵数据的输入输出,实习分支、循环,使用者可以自定义功能,这就意味着当找不到合适的函数或包来解决所遇的问题时,我们又可以自己编程去实现各种具体功能,这也正是R 语言的强大之处。二、学习心得在学习该书的过程中,我不仅加深了对统计学方法的理解,同时也掌握了 R 软件的编程方法和基本技巧,了解了各种函数的意义和用法,并能把两者结合起来,解决实际中的统计问题。1 、R 语言的基本语法及技巧R

3、语言不仅可以进行基础的数字、字符以及向量的运算,内置了许多与向量运算有关的函数。而且还提供了十分灵活的访问向量元素和子集的功能。R 语言中经常出现数组,它可以看作是定义了维数( dim 属性)的向量。因此数组同样可以进行各种运算,以及访问数组元素和子集。二维数组(矩阵)是比较重要和特殊的一类数组,R 可以对矩阵进行内积、外积、乘法、求解、奇异值分解及最小二乘拟合等运算,以及进行矩阵的合并、拉直等。apply() 函数可以在对矩阵的一维或若干维进行某种计算,例如apply(A,1,mean) 表示对 A 按行求和。R 语言允许将不同类型的元素放在一个集合中,这个集合叫做一个列表,列表元素总可以用

4、“列表名 下标 ”的格式引用。而“列表名 下标 ”表示的是一个子列表,这是一个很容易混淆的地方。 R 语言中非常重要的一种数据结构是 data.frame (数据框),它通常是矩阵形式的数据,但每列可以是不同类型,数据框每列是一个变量,每行是一个观测,要注意的是每一列必须有相同的长度。数据框元素可以使用下标或者下标向量引用。用一个非常简单的例子来说明向量、矩阵和数据框的简单运用。输入:A<-matrix(c(1:12),2,6,byrow=T) #A 为 一 个 2 行 6 列 , 按 行 排 列 的 矩 阵把 A转化成数据框形式的 X'.X1:2,seq(1,5,2) # 输出

5、 X 的第 1、2行和 1、3、5列输出:V1 V3 V5113527911输入:attach(X);R<-V1/V5;R # 调用数据框 X, 计算并输出 V1和 V5的比值输出:1 0.2000000 0.6363636与此同时 R 语言中也提供了其它高级程序语言共有的分支、循环等程序控制结构。比如 if/else 语句, for 循环等。因此 R语言也可以很容易的根据情况编写自己所需要的函数。例:编写一个 R 程序,输入一个整数 n,如果 n 小于等于 0,中止运算,并输出:“要求输入一个正整数”。否则,如果 n 是偶数,则将 n 除2赋值给 n。否则将 3n+1赋给 n。不断循环

6、,直到 n=1停止,并输出:“运算成功”解:新建一个程序脚本,名为chapter2.R ”,写入代码:f<-function(n)if(n<=0) list("要求输入一个正整数 ")elserepeatif(n=1) break #n=1时终止 else if(n/2=eger(n/2) n<-n/2 #n为偶数时除2else n<-3*n+1list("运算成功 ")在 R窗口中输入:Source( “chapter2.R ”);f(32)输出:1 "运算成功 "输入:f(-5)输出:1 &qu

7、ot;要求输入一个正整数 "2、R在统计描述中的应用数据框操作( plyr 包)辅助小函数1 splat 函数:作用: 把原函数中多个参数打包为一个 list 作为参数,然后输出新的函数。也就是说本来某个函数需要输入多个参数,现在套上 splat 后,只要输入一个参数 list 就可以了,不需要单独地输入参数。它的作用结果是把一个函数变成一个新函数。m*ply(a_matrix, FUN) 的作用和 a*ply(a_matrix , 1, splat(FUN)一样例:(1)参数使用> hp_per_cyl<-function(hp,cyl,.) hp/cyl> sp

8、lat(hp_per_cyl)(mtcars1,)'.1 18.33333> splat(hp_per_cyl)(mtcars)1 18.33333 18.33333 23.25000 18.33333 21.87500 17.5000030.62500 15.50000 23.7500010 20.50000 20.50000 22.50000 22.50000 22.50000 25.6250026.87500 28.75000 16.5000019 13.00000 16.25000 24.25000 18.75000 18.75000 30.6250021.87500 1

9、6.50000 22.7500028 28.25000 33.00000 29.16667 41.87500 27.25000等价于:> hp_per_cyl(mtcars$hp,mtcars$cyl)splat 函数的优点就是可以不用拆分字段,可以一起输入作为参数。(2)与 plyr 函数合用:> f<-function(mpg,wt,.) data.frame(mw=mpg/wt)> ddply(mtcars,.(cyl),splat(f)2 each 函数作用: 把多个函数汇聚成一个函数,当使用这个函数时,将分别作用多个函数。它的作用结果是把一个函数变成一个新函数

10、。不足:不能给作用的函数指定附加参数,只能使用默认参数。例:> fun<-function(x) c(min=min(x),max=max(x),mean=mean(x)> fun(1:10)等价于 :> f<-each(min,max,mean)> f(1:10)3 colwise 函数colwise(.fun,.cols,.)说明: .fun:要转化的函数。 .cols是测试数据框的列是否应包含的判别函数或者是·要包含的列的名称。catcolwise(.fun,.)与 colwise功能类似,只是对离散型变量有效numcolwise(.fun,

11、.)与 colwise功能类似,只是对数值型变量有效作用: 把作用于数据框行向量的函数(如mean,median 等)转化为作用于数据框列向量的函数。于 plyr 函数一起使用十分方便。作用结果生成一个新的函数。例:> nmissing<-function(x) sum(is.na(x)> colwise(nmissing)(baseball)> colwise(nmissing,.(sb,cs,so)(baseball)> ddply(baseball,.(year),colwise(nmissing,.(sb,cs,so)> numcolwise(nmi

12、ssing)(baseball)等价于: colwise(nmissing,is.numeric)(baseball)> catcolwise(nmissing)(baseball)等价于:colwise(nmissing,is.discrete)(baseball)4 failwith 函数failwith(default=NULL, f, quiet=FALSE)'.作用:修正一个函数,使得当该函数出现错误时返回一个设定的默认值,默认为空。作用结果生成一个新的函数。> f<-function(x) if (x=1) stop("Error")

13、else 1> f(1)Error in f(1) : Error> safef<-failwith(,f)> safef(1)Error in f(.) : ErrorNULL> safef<-failwith(12,f,quiet=TRUE)> safef(1) 1 125 summarise()函数summarise(.data, .)作用:对数据框做统计汇总, 为设定的统计方法或函数例:>summarise(baseball,duration=max(year)-min(year),nteams=length(unique(team)du

14、ration nteams1 136 132 >head(ddply(baseball,"id",summarise,duration=max(year)-min(year),nteams=length(unique(team)id duration nteams1 aaronha012232 abernte021773 adairje011244 adamsba012025 adamsbo031346 adcocjo01165数据集变量操作1 变量排序: arrange 函数arrange(df, .(var1), .(var2)作用:按照指定列排序。注意:使用 a

15、rrange函数排完序后行名会丢失,需要用cbind 补回。例:> arrange(mtcars,cyl,disp)> cars<-cbind(vehicle=s(mtcars),mtcars)> arrange(cars,cyl,disp)- 先把行名作为一个新的列加到数据框再排序2 更改变量名rename(x, replace, warn_missing=TRUE)作用:通过名字修改变量名字,不是根据它的位置。例:'.>head(rename(tmt,replace=c("mpg"="avgpg"

16、,”cly3 取行或列的数据take(x, along, indices, drop = FALSE)作用:在 x 中,按照某个维度取数。参数说明: x 为取数的源数据,可以是array 或者 dataframe。along:维度。 1 表示行, 2 表示列, 3 表示数组快等等。indices:具体维度所对应的指。drop:是否整合例:> take(mtcars,2,1) -取第一列> take(mtcars,1,1) -取第一行数据集操作1 数据集链接.”=”new” )1)match_dfmatch_df(x, y, on=NULL)作用: x 为原始的需要提取的数据框, y

17、 为条件数据框。 on 指定用来连接的变量,默认为两个数据框中所有变量,可以为多个。通过 on 后面的字段,到 x 数据框取选取数据,相当于 inner join ,区别为:前者结果集是 x 的一个子集。 inner join 包括两个数据框中所有字段。例:基础数据> a<-c("a","b","c","d")> b<-c("aa","bb","aa","dd")> c<-c(1,2,3,4)>

18、 t1<-data.frame(a,b,c)> t2<-data.frame(a=c("a","c","e"),b=c("aa","ab","cd")> match_df(t1,t2,on=c("a","b")a b c1 a aa 12) joinjoin(x, y, by=NULL, type=“ left” , match= “ all ”)作用:连接两个数据框参数说明: x , y 为数据框。 by=为要

19、连接的字段, type 为连接类型: left 、 right 、full 。match: all (所有匹配上的其他属性值都带上)、 first (只带上匹配上的第一个属性值)> join(t1,t2,by="x2",type="inner")> join(t1,t2,by="x2",type="left")> join(t1,t2,by="x2",type="right")> tt1<-data.frame(x1=c(1,2,3,4),x2=

20、c(5,6,7,8)> tt2<-data.frame(y1=c(1,2,3,4)*10,x2=c(6,6,6,6)> join(tt1,tt2,by="x2",type="inner",match="all")x1 x2 y11 2 6102 2 620'.3 2 6304 2 640> join(tt1,tt2,by="x2",type="inner",match="first")x2 x1 y12 6 2102.1 6 2102.2 6

21、2102.3 6 210注意: merge和 join 相似,但是效率上 join 更优。3) merge例:> x<-data.frame(a=c(1,2,4,5,6),x=c(9,12,14,21,8)> y<-data.frame(a=c(1,3,4,6),y=c(8,14,19,2),x=c(2,3,4,5)> merge(x,y) -根据相同字段默认内连接> merge(x,y,all=TRUE)-根据相同字段全链接> merge(x,y,all.x=TRUE) -左连接> merge(x,y,all.y=TRUE) -右连接>

22、merge(x,y,by=c("a","x") -根据 a 和 x 两个字段连接> merge(x,y,by.x="a",by.y="y") -根据 x 表中 a 和 y 表中 y 连接数据统计1 *ply 函数作用:拆分数据,应用函数,再组合函数作用后的数据输入: array、 dataframe、list输出: array、 dataframe、list 、discarededa*ply(.data, .margins, .fun, ., .progress = "none")参数说明

23、: .data是要进行处理的数组.margins 是用哪种方式去切割数据,取值为1,2,c(1,2).fun 是对切割的数据指定一个函数进行处理.progress决定是否显示及用哪种方式显示进度条> aaply(a,1,mean,.progress="none")> aaply(a,1,mean,.progress="text") -以文本形式展示进度条> aaply(a,1,mean,.progress="win") -windows窗口展示进度条d*ply(.data, .variables, .fun, .,

24、.progress = "none")参数说明: .variables 指定要按其分割的变量名称>daply(data,.(age),.fun=amean)>daply(data,.(sex),.fun=amean)>daply(data,.(age,sex),.fun=amean)>ddply(data,.(sex),.fun=amean)>dlply(data,.(sex),.fun=amean)'.l*ply(.data, .fun, ., .progress = "none")说明: 列表类型的数据是最简单的

25、数据,因为它已经被分割成一个个了(也就是列表数据的一个个元素),所以这类函数没有参数用来描述是按什么进行切分的。>llply(list,mean)>laply(list,mean)>ldply(list,mean)m*ply(.data,.fun=NULL,.inform=FALSE,)说明:把参数放到array 或 dataframe中整体输入作为参数,然后fun 后面的函数运用 .data中的相应数值作为参数分别作用,得到dataframe( mdply), array(maply)或者list(mlply )。与 splat 相似: m*ply(a_matrix, FU

26、N) 的作用和 a*ply(a_matrix ,1,splat(FUN)一样。 >data=data.frame(n=c(10,100,50),mean=c(5,5,10),sd=c(1,2,1)> datan mean sd110 512 10052350101> mlply(data,rnorm)2 观测值出现个数(1)count 函数:count(df,vars=NULL, wt_var=NULL)参数: df 是要处理的数据框。 vars 是要进行分组统计的变量。wt_var 为权重。注意:该函数的功能类似于table例:基础数据:>a=data.frame(n

27、ames=c("a","b","c","d","a","a","a","b","b","c"),wt=c(1,1,1,1,2,2,2,2,2,2)> count(a,vars="names") -单变量分组> count(a,vars="names",wt_var="wt")-加上权重> count(a,c("

28、names","wt")-双变量分组使用 R 软件可以方便直观的对数据进行描述性分析。如使用均值、中位数、顺序统计量等度量位置。用方差、标准差、变异系数等度量分散程度。以及用峰度系数、偏度系数度量分布形状。例如在窗口中输入:x<-seq(1,589,3)length(x);mean(x);var(x);sd(x);median(x);100*sd(x)/mean(x)1 197 # 长度1 295 # 均值1 29254.5 #方差1 171.0395 # 标准差1 295 # 中位数1 57.97948 #样本标准差n<-length(x);m<

29、;-mean(x);s<-sd(x)n/(n-1)*(n-2)*sum(x-m)3)/s3;(n*(n+1)/(n-1)*(n-2)*(n-3)*sum(x-m)4)/s4- (3*(n-1)2)/(n-2)*(n-3)1 0 # 偏度系数'.1 -1.2 #峰度系数R 软件可以检验样本是不是来自某种分布总体,以正态分布为例,我们可以通过 shapiro.test() 函数提供 W统计量和相应的 p 值,并通过 p 值的大小判断样本是否来自正态分布的总体。经验分布的 K-S 检验方法的应用范围则更加广泛,不仅可以判断样本是否来自正态总体,也能判断是否来自其它类型的分布总体。除此之

30、外, R 语言还有强大的画图功能,例如我们可以通过作直方图、茎叶图和总体分析来描述数据的分布。R 中的高水平作图函数有:plot()、 pairs()、 coplot()、 qqnorm() 、hist()等等。当高水平作图函数并不能完全达到作图的指标时,需要低水平的作图函数予以补充。低水平作图函数有:points()、 lines()、 text()、 polygon()、 legend()、 title()和axis() 等。需要注意的是低水平作图函数必须是在高水平作图函数所绘图形的基础之上增加新的图形。hist() 函数可以做出已知数据的直方图, stem() 函数可以作茎叶图, box

31、plot() 函数可用作箱线图, qqline() 和 qqmorm()可以做出正态 QQ图和相应的直线。 R 语言同时还能对两组数据进行相关性检验, cor.test() 函数提供了 Pearson 相关性检验, Spearman秩检验和 Kendall秩检验。其原假设为两组数据不相关,通过p 值的大小来判断是否拒绝原假设。我们还能用stars()函数作出星图,来表示多元数据,以上用法都非常简单易用,这里就不再赘述。3、R语言在统计推断中的应用首先, R 语言可以用来进行参数估计。统计学中我们应用矩估计和极大似然估计来进行点估计,矩估计是通过解正规方程组得到参数估计的值。极大似然估计通过解极

32、大似然函数的极值点得到参数估计的值。在R 中我们可以使用 Newton 迭代法求解正规方程组,获得矩估计。用optimize()函数求解极大似然函数,获得最大似然估计。由此可见,R 语言能够很方便的解决参数点估计问题。点估计给出未知参数的近似值以后,并不能知道这种估计的精确性如何,可信程度如何,为了解决这些问题,就需要用到区间估计,在学习用R 语言解决区间估计问题的过程中,我最大的思想到就是R 软件中内置的一些函数极大地方便了我们处理具体问题。比如t.test()函数。对单个正态总体,向量x 包含了来自该总体的一个样本,我们可以直接用t.test(x)指令得到均值 u 的点估计和区间估计。对于

33、两个正态总体,向量 y 包含了来自第二个总体的一个样本,我们可以用 t.test(x,y) 来得到均值差 u1-u2 的点估计和区间估计,其中当两个总体方差相同时,只需要加上var.equal=T (缺省值为F,即默认两个总体的方差是不同的)。同时t.test()函数不仅可以进行双侧置信区间估计,也能进行单侧置信区间估计,只需要在括号内加上 al= ”l ”或者al= ”g”。当数据不服从正态分布是,可以利用中心极限定理,取较大的样本量,构造近似服从正态分布的统计量进行估计。其次, R 语言可以用来进行假设检验。假设检验也是统计推断中的一个重要的内容,在统计学中,我们用搜索到的数据对某个事先作

34、出的统计假设按照某种设计好的方法进行检验,来判断此假设是否正确。也就是说为了检验一个假设是否成立,先假定它是成立的,看看由此会导致什么结果。如果导致一个不合理的现象出现,就认为原假设不正确,如果没有导出不合理的现象,则不能拒绝原假设。R 软件给出了参数假设检验的方法。以正态总体为例,t.test()函数也可以用来进行单个或者两个正态总体的均值的假设检验。进行单边检验时可以加入指令alternative(备择假设),缺省时表示双边检验, less 表示备择假设为 u<u0, greater 则相反,用 conf.level 指定置信水平。X<-c(78.1,72.4,76.2,74.

35、3,77.4,78.4,76.0,75.5,76.7,77.3)Y<-c(79.1,81.0,77.3,79.1,80.0,79.1,79.1,77.3,80.2,82.1)t.test(X,Y,var.equal=T,al=”l ”)输出: Two Sample t-test'.data: X and Yt = -4.2957, df = 18, p-value = 0.0002176alternative hypothesis: true difference in means is less than 095 percent confidence interval:-Inf

36、 -1.908255sample estimates:mean of x mean of y76.23 79.43结果中我们不仅能得到X 和 Y 的均值的点估计 76.23 和79.43 、左侧区间估计、同时也能通过 p 值的大小判断是否接受原假设,该例中 p<0.05 ,认为拒绝原假设,即认为两总体方差不同。与均值假设检验相类似。R 语言中还可以用var.test()函数进行正态总体的方差假设检验。而且R 语言不仅能就正态总体进行均值和方差检验,也能对其他总体分布进行检验。例如用binom.test()进行二项分布的检验和估计。习题中检验铁剂和饮食两种方法治疗后患者病情表现有无差异:x

37、<-c(113,120,138,120,100,118,138,123)y<-c(138,116,125,136,110,132,130,110)binom.test(sum(x<y),8)Exact binomial testdata: sum(x < y) and 8number of successes = 4, number of trials = 8, p-value = 1 alternative hypothesis: true probability of success is not equal to 0.5 95 percent confidence interval:0.1570128 0.8429872sample estimates:probability of success 0.5由结果我们可以判断两种诊断方法无显著差异(其中用到的统计学原理见下面的符号检验)。参数假设检验假定了总体分布的具体形式,但实际问题中我们往往不知道总体的分布,很难对总体的分布做出假定,

温馨提示

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

评论

0/150

提交评论