版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、经过接近一个学期的学习,从对 R语言的完全陌生,到现在对其有了一些粗 浅的认识,其中经历了遇到困难苦思冥想的艰辛,也有解决问题以后豁然开朗 的畅快。在学习的过程中,以前掌握的数理基础给我带来了不少便利,而认真 地态度和踏实的性格也使我获益匪浅。在这个学期中,我学会了 R语言的基本操作和语法,以及针对具体的统计学 问题相应的解决方法。并按时完成老师布置的课后作业,以达到学以致用的目 的,也加强了对R语言操作的熟练度。一、初识R软件R软件是一套完整的数据处理、计算和制图软件系统。其功能包括:据存储和处理,数组运算,完整连贯的统计分析工具,优秀的统计制图功能已及简便而 强大编程语言。接触R语言以后,
2、我的第一感觉就是方便和强大。 R语言中有非常多的函数和包,我们几乎不用自己去编一些复杂的算法, 而往往只需要短短几行代码就能 解决很复杂的问题,这给我们的使用带来了极大地方便; 于此同时,它又可操纵 数据的输入输出,实习分支、循环,使用者可以自定义功能,这就意味着当找不 到合适的函数或包来解决所遇的问题时,我们又可以自己编程去实现各种具体功 能,这也正是R语言的强大之处。二、学习心得在学习该书的过程中,我不仅加深了对统计学方法的理解,同时也掌握了 R 软件的编程方法和基本技巧,了解了各种函数的意义和用法,并能把两者结合起 来,解决实际中的统计问题。1、R语言的基本语法及技巧R语言不仅可以进行基
3、础的数字、字符以及向量的运算,内置了许多与向量 运算有关的函数。而且还提供了十分灵活的访问向量元素和子集的功能。R语言中经常出现数组,它可以看作是定义了维数(dim属性)的向量。因此数组同样 可以进行各种运算,以及访问数组元素和子集。二维数组(矩阵)是比较重要和 特殊的一类数组,R可以对矩阵进行内积、外积、乘法、求解、奇异值分解及最 小二乘拟合等运算,以及进行矩阵的合并、拉直等。appIyO函数可以在对矩阵的一维或若干维进行某种计算,例如 appIy(A,1,mean)表示对A按行求和。R语言允许将不同类型的元素放在一个集合中,这个集合叫做一个列表,列 表兀素总可以用“列表名下标”的格式引用。
4、而“列表名下标”表示的是 一个子列表,这是一个很容易混淆的地方。R语言中非常重要的一种数据结构是 data.frame (数据框),它通常是矩阵形式的数据,但每列可以是不同类型,数据框每列是一个变量,每行是一个观测,要注意的是每一列必须有相同的长度。 数据框元素可以使用下标或者下标向量引用。用一个非常简单的例子来说明向量、矩阵和数据框的简单运用。为一个2行6列,按行排列的矩阵#把A输入:Av-matrix(c(1:12),2,6,byrow=T)#A转化成数据框形式的X2行和1、3、5列X1:2,seq(1,5,2)# 输出 X 的第 1、输出:V1V3V5113527911X,计算并输出V1
5、和V5的比值输入:attach(X);Rv-V1/V5;R# 调用数据框输出:10.20000000.6363636与此同时R语言中也提供了其它高级程序语言共有的分支、循环等程序控制 结构。比如if/else 语句,for循环等。因此R语言也可以很容易的根据情况编 写自己所需要的函数。n是偶数,则将n除2赋值给n;否 “运算成功”,写入代码:例:编写一个R程序,输入一个整数n,如果n小于等于0,中止运算,并输 出:“要求输入一个正整数”;否则,如果 则将3n+1赋给n。不断循环,直到n=1停止,并输出:解:新建一个程序脚本,名为 cha pter2.Rfv-fu nctio n(n)if(nv
6、=0)list("要求输入一个正整数")elsere peat为偶数if(n=1)break#n=1 时终止 elseif(n/2=eger(n/2)*-n/2#n 时除 2else nv-3* n+1list("运算成功")在R窗口中输入:Source( “chapter2.R ”);f(32)输出:1"运算成功"输入:f(-5)输出:1"要求输入一个正整数"2、R在统计描述中的应用 数据框操作(plyr包)辅助小函数1splat 函数:作用:把原函数中多个参数打包为一个list作为参数,然后输出新的
7、函数。 也就是说本来某个函数需要输入多个参数,现在套上splat后,只要输入一个参数list就可以了,不需要单独地输入参数。它的作用结果 是把一个函数变成一个新函数。m*ply(a_matrix,FUN)的作用和 a*ply(a_matrix, 1,splat(FUN)样例:(1) 参数使用>hp_p er_cy |v-function(hp ,cyl,.)h p/cyl>s plat(hp_ per_cyl)(mtcars1,)1 18.33333>s plat(hp_ per_cyl)(mtcars)118.3333318.3333323.2500018.3333321.
8、8750017.5000030. 6250015.5000023.750001020.5000020.5000022.5000022.5000022.5000025.6250026.8750028.7500016.500001913.0000016.2500024.2500018.7500018.7500030.6250021.8750016.5000022.750002828.2500033.0000029.1666741.8750027.25000等价于:>hp_p er_cyl(mtcars$h p, mtcars$cyl)splat函数的优点就是可以不用拆分字段,可以一起输入作为
9、参数。(2) 与plyr函数合用:>f<-fu nctio n(mp g,wt,.)data.frame(mw=mp g/wt)>dd ply(mtcars,.(cyl),s plat(f)2each函数作用:把多个函数汇聚成一个函数,当使用这个函数时,将分别作用多个函 数。它的作用结果是把一个函数变成一个新函数。不足:不能给作用的函数指定附加参数,只能使用默认参数。例:>funv-function( x)c( min=min( x),max=max(x),mea n=mea n( x)>fun (1:10)等价于:>f<-each( min, max
10、,mea n)>f(1:10)3colwise 函数colwise(.f un ,.cols,.)说明:.fun :要转化的函数;.cols是测试数据框的列是否应包含的判别函数或者是要包含的列的名称。catcolwise(.fun,.)与colwise 功能类似,只是对离散型变量有效numcolwise(.fun,.)与colwise 功能类似,只是对数值型变量有效作用:把作用于数据框行向量的函数(如mean, median等)转化为作用于数据框列向量的函数。于plyr函数一起使用十分方便。作用结果生 成一个新的函数。例:>nm iss in g<-f un cti on(
11、x)sum(is .n a(x)>colwise( nm iss in g)(baseball)>colwise( nm iss in g,.(sb,cs,so)(baseball)>dd ply (baseball,.(year),colwise( nm iss in g,.(sb,cs,so)>numcol等价于:colwise(nmissing,is.numenc)(baseball) >catcolwise( nm issi ng)(baseball)|等价于:colwise(nmissing,is.discrete)(baseball)4failwith
12、 函数failwith(default=NULL,f,quiet=FALSE)作用:修正一个函数,使得当该函数出现错误时返回一个设定的默认值,默认为空。作用结果生成一个新的函数。>fv-fun cti on( x)if(x=1)st op ("Error")else1>f(1)Errori nf(1):Error>safef<-failwith(,f)>safef(1)Errori nf(.):ErrorNULL>safefv-failwith(12,f,quiet=TRUE)>safef(1)1125summarise ()函数s
13、ummarise(.data,.)作用:对数据框做统计汇总,为设定的统计方法或函数 例:>summarise(baseball,durati on=max(year)-min( year) ,n team s=le ngth( uniq ue(team)durati onn teams1136132>head(dd ply(baseball,"id",summanse,durati on=max(year) -mi n(year), nteams=le ngth(u nique(team) idduratio nn teams1aaro nha012232abe
14、rnte021773adairje011244adamsba012025adamsbo031346adcocjo01165数据集变量操作1变量排序:arran ge函数)arran ge(df,.(var1),.(var2)作用:按照指定列排序。注意:使用arrange函数排完序后行名会丢失,需要用cbind补回。例:>arra nge(mtcars,cyl,dis p)>cars<-cbi nd(vehicle=row. names(mtcars),mtcars)>arra nge(cars,cyl,dis p)-先把行名作为一个新的列加到数据框再排序2更改变量名re
15、n ame(x,re place,wam_missi ng=TRUE)cly = new作用:通过名字修改变量名字,不是根据它的位置。 例:>head(re name(tmt,re place=c(" mp g"="avg pg",)3取行或列的数据take(x,alo ng,i ndices,dro p=FALSE)作用:在x中,按照某个维度取数。参数说明:x为取数的源数据,可以是 array或者dataframe;along:维度。1表示行,2表示列,3表示数组快等等;in dices:具体维度所对应的指;drop:是否整合取第一列 取第一行例
16、:>take(mtcars,2,1)->take(mtcars,1,1)-数据集操作1数据集链接1) match_dfmatch_df(x,y,o n=NULL)作用:x为原始的需要提取的数据框,y为条件数据框;on指定用来连接的 变量,默认为两个数据框中所有变量,可以为多个。通过on后面的字段,到x数据框取选取数据,相当于innerjoin,区别为:前者结果 集是x的一个子集;innerjoin包括两个数据框中所有字段。例:基础数据>a<-c("a","b","c","d")>b&l
17、t;-c("aa","bb","aa","dd")>cv-c(1,2,3,4)>t1v-data.frame(a,b,c)>t2v-data.frame(a=c("a","c","e"),b=c("aa","ab","cd") >match_df(t1,t2, on=c("a","b") abc 1aaa12) join“left ”
18、 ,match= “all ”)joi n(x,y,by=NULL,t ype=by=为要连接的字段,type为连接类型:left、right、 all (所有匹配上的其他属性值都带上)、first (只作用:连接两个数据框 参数说明:x, y为数据框;full ; match:带上匹配上的第一个属性值)>joi n(t1,t2,by="x2",ty pe="i nne广)>joi n(t1,t2,by="x2",ty pe="left")>joi n(t1,t2,by="x2",ty
19、pe="right") >tt1v-data.frame(x1=c(1,2,3,4),x2=c(5,6,7,8) >tt2v-data.frame(y仁c(1,2,3,4)*10,x2=c(6,6,6,6)>joi n(tt1,tt2,by="x2",ty pe="i nn er",match="all") x1x2y112610226203263042640>joi n(tt1,tt2,by="x2",t yp e="i nn er",match=&
20、quot;first") x2x1y1262102.162102.262102.36210注意:merge和join相似,但是效率上join更优。3) merge例:>x<-data.frame(a=c(1,2,4,5,6),x=c(9,12,14,21,8) >yv-data.frame(a=c(1,3,4,6),y=c(8,14,19,2),x=c(2,3,4,5 )>merge(x,y)-根据相同字段默认内连接根据相同字段全链接左连接右连接 根据a和x两个字段连接根据x表中a和y表中y连接>merge(x,y,all=TRUE)- >merg
21、e(x,y,all.x=TRUE)- >merge(x,y,all.y=TRUE)- >merge(x,y,by=c("a","x")- >merge(x,y,by.x="a",by.y="y")-数据统计1*ply函数作用:拆分数据,应用函数,再组合函数作用后的数据输入:array、dataframe list输出:array、dataframe list、discarededa*pl y(.data,.margi ns,.f unprogress=" non e") 参数说
22、明:.data是要进行处理的数组.margins是用哪种方式去切割数据,取值为1, 2, c(1,2).fun是对切割的数据指定一个函数进行处理 .p rogress决定是否显示及用哪种方式显示进度条>aa ply(a,1,mea n,. progress-' non e")以文本形式展示进度条窗口展示进度条>aa ply(a,1,mea n,.p rogress="text")->aa ply(a,1,mea n,. progress="wi n")-wi ndowsd*pl y(.data,.variables,.
23、f un,.,. progress-" non e")参数说明:.variables指定要按其分割的变量名称>da ply (data,.(age),.fu n=amea n)>da ply(data,.(sex),.fu n=amea n)>da ply (data,.(age,sex),.f un=amea n)>dd ply(data,.(sex),.fu n=amea n)>dlply (data,.(sex),.f un=amea n)l*pl y(.data,.fu n,.,. progress-" non e"
24、)说明:列表类型的数据是最简单的数据,因为它已经被分割成一个个了 (也 就是列表数据的一个个元素),所以这类函数没有参数用来描述是按 什么进行切分的。>ll ply(list,mea n)>la ply(list,mea n)>ld pl y(list,mea n)m* ply(.data,.fu n=NULL,.i nform-FALSE,)说明:把参数放到array或dataframe中整体输入作为参数,然后fun后面的 函数运用.data中的相应数值作为参数分别作用,得到dataframe(mdply),array (maply) 或者 list (miply )。与
25、splat相似:m*ply(a_matrix,FUN)的作用和 a*ply(a_matrix,1,splat(FUN) 一样。>data=data.frame( n=c(10,100,50),mea n=c(5,5,10),sd=c(1,2,1)>datanmeansd11051210052350101>ml ply(data,rnorm)2观测值出现个数(1) count 函数:count(df,vars=NULL,wt_var=NULL)参数:df是要处理的数据框;vars是要进行分组统计的变量;wt_var为权重。 注意:该函数的功能类似于table例:基础数据:>
26、;a=data.frame( names=c("a","b","c","d","a","a","a","b","b","c"),wt=c(1,1,1,1,2,2,2,2,2,2)>co un t(a,vars=" names")-单变量分组>cou nt(a,vars=" names",wt_var="wt")-力卩上权重&g
27、t;cou nt(a,c(” names","wt")-双变量分组使用R软件可以方便直观的对数据进行描述性分析。如顺序统计量等度量位置;用方差、标准差、变异系数等度量分散程度;以及用峰 度系数、偏度系数度量分布形状。例如在窗口中输入:xv-seq(1,589,3)len gth(x);mea n( x);var(x);sd(x);media n( x);100*sd(x)/mea n(x)1197# 长度1295# 均值129254.5# 方差1171.0395# 标准差1295#中位数157.97948#样本标准差nv-le ngth(x);mv-mea n(x
28、);sv-sd(x)n/(n-1)*( n-2)*sum(x-m)A3)/sA3;( n*( n+1)/( n-1)*( n-2)*( n-3)*s um(x-m)M)/sA4-(3*(门-1)八2)/( n-2)* (n-3)10#偏度系数1-1.2#峰度系数K-S检验方法的应用范围则更加广也能判断是否来自其它类型的分布总R软件可以检验样本是不是来自某种分布总体,以正态分布为例,我们可以 通过shapiro.testO函数提供W统计量和相应的p值,并通过p值的大小判断样本是否来自正态分布的总体。经验分布的 泛,不仅可以判断样本是否来自正态总体, 体。例如我们可以通过作直方图、茎叶除此之外,R
29、语言还有强大的画图功能, 图和总体分析来描述数据的分布。R中的高水平作图函数有:Plot() 、pairs()、 coplot() 、qqnorm()、hist()等等。当高水平作图函数并不能完全达到作图的指 标时,需要低水平的作图函数予以补充。低水平作图函数有:Points() 、lines()、 text()、polygon()、legend()、title() 和 axis()等。需要注意的是低水平作 图函数必须是在高水平作图函数所绘图形的基础之上增加新的图形。hist()函数可以做出已知数据的直方图,stem()函数可以作茎叶图, boxplot()函数可用作箱线图,qqline()和
30、qqmorm()可以做出正态QQ图和相应 的直线。R语言同时还能对两组数据进行相关性检验,cor.test()函数提供了 Pearson相关性检验,Spearman秩检验和Kendall秩检验。其原假设为两组数据不相关,通 过P值的大小来判断是否拒绝原假设。我们还能用stars()函数作出星图,来表示多元数据,以上用法都非常简单易用,这里就不再赘述。3、R语言在统计推断中的应用首先,R语言可以用来进行参数估计;统计学中我们应用矩估计和极大似然估计来进行点估计,矩估计是通过解正 规方程组得到参数估计的值;极大似然估计通过解极大似然函数的极值点得到参 数估计的值。在R中我们可以使用Newton迭代
31、法求解正规方程组,获得矩估计; 用optimizeO函数求解极大似然函数,获得最大似然估计;由此可见,R语言能 够很方便的解决参数点估计问题。点估计给出未知参数的近似值以后,并不能知道这种估计的精确性如何,可 信程度如何,为了解决这些问题,就需要用到区间估计,在学习用R语言解决区 间估计问题的过程中,我最大的体会就是R软件中内置的一些函数极大地方便了 我们处理具体问题。比如t.testO函数。对单个正态总体,向量 x包含了来自该总体的一个样本,我们可以直接用t.test(x)指令得到均值u的点估计和区间估计;对于两个正态总体,向量y包含了来自第二个总体的一个样本,我们可以用t.test(x,y
32、) 来得到均值差u1-u2的点估计和区间估计,其中当两个总体方差 相同时,只需要加上var.equal=T (缺省值为F,即默认两个总体的方差是不同 的);同时t.test()函数不仅可以进行双侧置信区间估计,也能进行单侧置信区间估计,只需要在括号内加上 al= ” I”或者al= ” g”。当数据不服从正态分 布是,可以利用中心极限定理,取较大的样本量,构造近似服从正态分布的统计 量进行估计。其次,R语言可以用来进行假设检验。假设检验也是统计推断中的一个重要的内容,在统计学中,我们用搜索到的 数据对某个事先作出的统计假设按照某种设计好的方法进行检验,来判断此假设是否正确。也就是说为了检验一个
33、假设是否成立,先假定它是成立的,看看由此 会导致什么结果。如果导致一个不合理的现象出现,就认为原假设不正确,如果没有导出不合理的现象,则不能拒绝原假设。R软件给出了参数假设检验的方法。以正态总体为例,t.test()函数也可以用来进行单个或者两个正态总体的均值的假设检验。进行单边检验时可以加入指 令alternative(备择假设),缺省时表示双边检验,less表示备择假设为uvuO,greater则相反,用conf.level指定置信水平。Xv-c(78.1,72.4,76.2,74.3,77.4,78.4,76.0,75.5,76.7,77.3)Yv-c(79.1,81.0,77.3,79
34、.1,80.0,79.1,79.1,77.3,80.2,82.1) t.test(X,Y,var.equal=T,al= ” I ”)输出:TwoSamplet-testdata:Xa ndYt=-4.2957,df=18, p-value=0.0002176alternativeh yp othesis:truediffere ncei nmean sislesstha n095p erce ntcon fide ncein terval:-In f-1.908255sampi eestimates:meano fxmea nofy76.2379.43结果中我们不仅能得到X和丫的均值的点估计
35、76.23和79.43、左侧区间估计、 同时也能通过P值的大小判断是否接受原假设,该例中 P<0.05,认为拒绝原假 设,即认为两总体方差不同。与均值假设检验相类似。R语言中还可以用var.testO函数进行正态总体的方差假设检验。而且R语言不仅能就正态总体进行均值和方差检验,也能对其他总体分布进行检验。例如 用binom.test()进行二项分布的检验和估计。习题中检验铁剂和饮食两种方法 治疗后患者病情表现有无差异:xv-c(113,120,138,120,100,118,138,123) yv-c(138,116,125,136,110,132,130,110) bi no m.te
36、st(sum(xvy),8) Exactbi no mialtestdata:sum(x<y)a nd8nu mberofsuccesses=4,nu mberoftnals=8 ,p-value=1 alternativeh yp othesis:true probabilityofsuccessis no tequalto0.5 95p erce ntcon fide ncein terval: 0.15701280.8429872 sampi eestimates: p robabilityofsuccess0.5由结果我们可以判断两种诊断方法无显着差异(其中用到的统计学原理见下 面的符号检验)。参数假设检验假定了总体分布的具体形式,但实际问题中我们往往不知道总 体的分布,很难对总体的分布做出假定,所
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五版TD基站装修工程档案管理合同3篇
- 二零二五年度高端白酒品牌独家销售合作协议3篇
- 二零二五年度水泥基复合材料研发、生产及倒装施工合同2篇
- 二零二五年度金融科技抵押反担保合同示范2篇
- 2025隧道劳务协作合同
- 二零二五年智能仓储物流管理系统供应合同范本3篇
- 二零二五年度高端酒店客房管理合作协议3篇
- 2025联合建立温郁金种植基地合同范本
- 二零二五年特色鸭种放养与美食节销售合作合同3篇
- 样板间的装修合同范本
- (完整版)英语高频词汇800词
- 严重精神障碍患者发病报告卡
- 《基础马来语》课程标准(高职)
- 2021年国标热镀锌钢管规格、尺寸理论重量表
- 乌鲁木齐基准地价修正体系
- DB32-T 3177-2017草莓-蕹菜水旱轮作设施栽培技术规程 -(高清现行)
- GB∕T 3216-2016 回转动力泵 水力性能验收试验 1级、2级和3级
- 七年级数学资料培优汇总精华
- IEC61850研讨交流之四-服务影射
- 《儿科学》新生儿窒息课件
- 材料力学压杆稳定
评论
0/150
提交评论