R语言学习总结.docx
- 文档编号:5836541
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:14
- 大小:100.89KB
R语言学习总结.docx
《R语言学习总结.docx》由会员分享,可在线阅读,更多相关《R语言学习总结.docx(14页珍藏版)》请在冰豆网上搜索。
R语言学习总结
R语言学习总结
经过接近一个学期的学习,从对R语害的完全陌生,到现在对其有了一些粗浅的认识,其中经历了遇到困难苦思冥想的艰辛,也有解决问题以后豁然开朗的畅快。
在学习的过程中,以前掌握的数理基础给我带来了不少便利,而认真地态度和踏实的性格也使我获益匪浅。
在这个学期中,我学会了R语言的基本操作和语法,以及针对具体的统计学问题相应的解决方法。
并扶时完成老师布置的课后作业,以达到学以致用的目的,也加强了对R语言操作的熟练度。
一、初识R软件
R软件是一套完整的数据处理、计算和制图软件系统。
其功能包括:
据存储
和处理,数组运算,完整连贯的统讣分析丄具,优秀的统计制图功能已及简便而强大编程语言。
接触R语言以后,我的第一感觉就是方便和强大。
R语言中有非常多的函数和包,我们儿乎不用自己去编一些复杂的算法,而往往只需要短短儿行代码就能解决很复朵的问题,这给我们的使用带来了极大地方便;于此同时,它乂可操纵数据的输入输出,实习分支、循环,使用者可以自定义功能,这就童味着当找不到合适的函数或包来解决所遇的问题时,我们乂可以自己编程去实现各种具体功能,这也正是R语言的强大之处。
二.学习心得
在学习该书的过程中9我不仅加深了对统讣学方法的理解,同时也掌握了R软件的编程方法和基本技巧,了解了各种函数的意义和用法,并能把两者结合起来,解决实际中的统计问题。
R语言的基本语法及技巧
R语言不仅可以进行基础的数字.字符以及向量的运算,内置了许多与向量运算有关的函数。
而且还提供了十分灵活的访问向量元素和子集的功能。
R语言中经常出现数组,它可以看作是定义了维数(dim属性)的向量。
因此数组同样可以进行各种运算,以及访问数组元素和子集。
二维数组(矩阵)是比较巫要和特殊的一类数组,R可以对矩阵进行内积、外积、乘法、求解、奇异值分解及最小一乘拟合等运算,以及进行矩阵的合并、拉直等。
apply0函数可以在对矩阵的一维或若干维进行某种计算,例如apply(A,l,mean)表示对A按行求和。
R语言允许将不同类型的元素放在一个集合中,这个集合叫做一个列表,列表元素总可以用“列表名[[下标]r的格式引用。
而“列表名[下标r表示的是一个子列表,这是一个很容易混淆的地方。
R语言中非常重要的一种数据结构是data,frame(数据框),它通常是矩阵形式的数据,但每列可以是不同类型,数据框每列是一个变量,每行是一个观测,要注意的是每一列必须有相同的长度。
数据框元素可以使用下标或者下标向量引用。
用一个非常简单的例子来说明向量、矩阵和数据框的简单运用。
输入:
A<-matrix(c(1:
12),2,6,byrow=T)#A为一个2行6列,按行排列的矩阵
X<-as.data,frame(A)#把A转化成数据框形式的X
X[l:
2,seq(l,5,2)]#输出X的第1、2行和1、3、5列输出:
V5
5
11
VIV3
113
279
输入:
attach(X);R<-V1/V5;R#调用数据框X,计算并输出VI和V5的比值
输出:
[1]0.20000000.6363636
与此同时R语言中也提供了其它高级程序语言共有的分支、循环等程序控制结构。
比如if/else语句,for循环等。
因此R语言也可以很容易的根据情况编写自己所需要的函数。
例:
编写一个R程序,输入一个整数n,如果n小于等于0,中止运算,并输“要求输入一个正整数”;否则,如果n是偶数,则将n除2赋值给n;否则将3n+m给n。
不断循环,直到n=l停止,并输出:
“运算成功”
解:
新建一个程序脚本,名为chapter2.R",写入代码:
f<-function(n){
if(n<=0)listr要求输入一个正整数")
else{repeat{
if(n==l)break#n=l时终止elseif(n/2==as.integer(n/2))n<-n/2#n为偶数时除2elsen<-3*n+l
listr运算成功")
在R窗口中
输入:
Source("chapter?
.R”);f(32)
输出:
[1]"运算成功"
输入:
f(-5)
输出:
[1]"要求输入一个正整数"
2、R在统计描述中的应用
数据框操作(plyr包)
辅助小函数
1splat函数:
作用:
把原函数中多个参数打包为一个list作为参数,然后输出新的函数。
也就是说本来某个函数需要输入多个参数,现在套上splat后,只要输入一个参数list就可以了,不需要单独地输入参数。
它的作用结果是把一个函数变成一个新函数。
in*ply(a_matrix,FUN)的作用和a*ply(a_matnx,1,spIat(FUN))—样
例:
(1)参数使用
>hp-per_cyl<-functionChp,cyT,・・・)hp/cyl
>splatchp_per_cyT)(mtcars[l,])
1]18.33333>splatchp_per_cyl)Cmtcars)
[1]18.3333318.3333323.2500018.3333321.8750017.50000
30.6250015.5000023.75000
[10]20.5000020・5000022.5000022・5000022・5000025.62500
26.8750028.7500016.50000
[19]13.0000016.2500024.2500018.7500018.7500030.62500
21.8750016.5000022.75000
[28]28.2500033.0000029.1666741.8750027.25000
等价于:
>hp_per_cyl(mtcarsShp,mtcars$cyT)
splat函数的优点就是可以不用拆分字段,可以一起输入作为参数・
<2)与plyr函数合用:
>f<-function(mpg,wt,・・・)data.frameCmw=mpg/wt)
>ddplyCmtcars,.(cyl),splatCf))
2each函数
作用:
把多个函数汇聚成一个函数,当使用这个函数时,将分别作用多个函数。
它的作用结果是把一个函数变成一个新函数。
不足:
不能给作用的函数指定附加参数,只能使用默认参数。
例:
>fun<-function(x)
cCmin=min(x),max=max(x),mean=mean(x))
>funCl:
10)
等价于:
>f<-eachCmin,max,mean)
>f(l:
10)
3colwise函数
colwiseC.fun,.cols,...)
说明:
.fun:
要转化的函数:
.cols是测试数据框的列是否应包含的判别函数或者是-要包含的列的名称。
catcolwiseC.fun,••Ocolwise功能类似,只是对离散型变量有效
numcolwise(.fun,...)colwise功能类似,只是对数值型变量有效
例:
>
>
>
>
作用:
把作用于数据框行向量的函数(如mean,median等)转化为作用于数据框列向量的函数。
于plyr函数一起使用十分方便。
作用结果生成一个新的函数。
nmissing<-function(x)sum(is・na(x))colwiseCnmissing)(baseball)colwiseCnmissing,.(sb,cs,so))(baseball)ddpTy(baseball,.(year),colwiseCnnrissing,•Csb,cs,so)))
numcolwiseCnmissing)(basebal1)
>
等价于:
colwiseCnmissing,is.numeric)(baseball)
>catcolwiseCnmissing)(baseball)
等价于:
colwiseCnmissingjs.discrete)(baseball)
4failwith函数
fai1with(default=NULL,f,quiet=FALSE)
作用:
修正一个函数,使得当该函数出现错误时返回一个设定的默认值,默认为空。
作用结果生成一个新的函数。
>f<-functionCx)ifCx==l)stopC'Error")else1
>f⑴
Errorinf(l):
Error
>safef<-fai1with(,f)
>safefCl)
Errorinf(…•):
Error
NULL
>safef<-failwith(12,f,quiet=TRUE)
>safefCl)
5summariseO函数
summariseC.data,…)
作用:
对数据框做统计•汇总为设定的统计方法或函数
例:
>summariseCbaseball,duration=max(year)-minCyear),nteams=length(unique(team)))
durationnteams
1136132
数据集变量操作
1变4排序:
arrange函数
.(var2)…)
arrange(df,.(varl),作用:
按照指定列排序。
注意:
使用arrange函数排完序后行名会丢失,需要用cbind补回。
cars<-cbind(vehicle=row.namesCmtcars),mtcars)arrange(cars,cyl,disp)
……先把行名作为一个新的列加到数据框再排序
2更改变量名
rename(x,replace,warn_missing=TRUE)
作用:
通过名字修改变量名字,不是根据它的位置。
例:
>headCrenameCtmt,replace=cC'*mpgJ"avgpgJ''Cyfnew”)))
3取行或列的数据
takeCx,along,indices,drop=FALSE)
作用:
在X中,按照某个维度取数。
参数说明:
X为取数的源数据,可以是array或者dataframe;along:
维度。
1表示行,2表示列,3表示数组快等等;indices:
具体维度所对应的指;drop:
是否整合
例:
>takeCmtcars,2,1)■■取第一列
>take(mtcars,1,1)■■取第一行数据集操作
1数据集链接
1)match_df
match_df(x,y,on=NULL)
作用:
X为原始的需要提取的数据框,y为条件数据框;on指定用来连接的变量,默认为两个数据框中所有变量,可以为多个。
通过on后面的字段,到X数据框取选取数据,相当于innerjoin,区别为:
前•者结果集是X的一个子集;innerjoin包括两个数据框中所有字段。
例:
a<-cC"a\"b\"c'\"d")b<-cC*aa","bb","aa'\"dd")c<-cCl,2,3,4)tl<-data.frame(a,b,c)t2<-data.frame(a=cC"a"/'c\"e"),b=cC"aa"/'ab\"cd"))
基础数据
>
>
>
>
>
match_df(tl,t2,on=cC'a\"b"))abc
aaa1
2)join
joinCx,y,by=NULL,type=**left*\match=**airD
作用:
连接两个数据框
参数说明:
X,y为数据框;by二为要连接的字段,type为连接类型:
left、right、full;match:
all(所有匹配上的其他属性值都带上)、first(只带上匹配上的第一个属性值)
joinCtl,t2,by='*x2*\type="inner")joinCtl,t2,by="x2",type="1eft")joinCtl,t2,by="x2",type="righfD
ttl<-data.frame(xl=cCl,2,3,4),x2=cC5,6,7,8))
x2
xl
yi
2
6
2
10
2.1
6
2
10
2.2
6
2
10
2.3
6
2
10
注意:
merge和join相似,但是效率上join更优。
3)merge
例:
>x<-data.framGCa=cCl,2,4i5,6),x=cC9,12,14,21,8))
>
>
>
>
>
>
>
接
数据统计
y<-data.frameCa=c(l,3,4,6),y=cC8,14,19,2),x=c(2,3,4,5)mergeCx,y)-—根据相同字段默认内连接merge(x,y,all=TRUE)-一根据相同字段全链接mergeCx,y,all.x=TRUE)—左连接mergeCx,y,all.y=TRUE)一右连接mergeCx,y,by=cC*a","x*'))一根ffia和x两个字段连接mergeCx,y,by.x="a",by.y="y")■■根据x表中a和y表中y连
.margins是用哪种方式去切割数据,取值为1,2,c(L2).fun是对切割的数据指定一个函数进行处理
.progress决定是否显示及用哪种方式显示进度条
>aaplyCa,l,mean,.progress='*none”)
>aaply(a,l,mean,.progress="text")——以文本形式展示进度条
>aaply(a,l,mean,.progress="win'')—windows窗口展示进度条
d*plyC.data,.variables,.fun,.….progress="none")参数说明:
.variables指定要按其分割的变量名称
>daply(data,•(age),.fun=amean)
>dapTy(data,•(sex),.fun=amean)
>dapTy(data9•(age,sex),.fun=amean)
>ddpTy(data,•(sex),.fun=amean)
>cnpTy(data,.(sex),.fun=amean)
l*plyC.data,.fun,…,.progress=’’none")
说明:
列表类型的数据是最简单的数据,因为它已经被分割成一个个了(也就是列表数据的一个个元素),所以这类函数没有参数用来描述是按什么进行切分的。
>npTyCTist,mean)>lapTyCTistmean)>ldpTy(Tist,mean)
m*p1yC.data,.fun=NULL,.inform=FALSE,.,.)
说明:
把参数放到agy或datafraine中整体输入作为参数,然后fun后面的函数运用.(bta中的相应数值作为参数分别作用,得到dataframe(mdply),array(maply)或者list(mlply)o
与splat相似:
m*ply(a_matrix,FUN)的作用和a*ply(a_matrixrhspIat(FUN))一样。
>data=data.frame(n=cC10,100,50),mean=cC5,5,10),sd=c(l,2,1))
>
sd
1
2
1mTplyCdata,rnorm)
观测值出现个数
(1)count函数:
count(df,vars=NULL,wt_var=NULL)
参数:
df是要处理的数据框:
vars是要进行分组统讣的变量;wt_var为权重。
注总:
该函数的功能类似于table
例:
基础数据:
>a=data.frameCnames=cC"a%"b'\"c\"d\"a\"a\"a'\"b'\'•b","c"),wt=cCl.l,l,1.2,2,2,2,2,2))
countCa,vars="names")—单变量分组
countCa,vars='*names'\wt_var=''wf—力口上权重
countCa,cC'names"/'wf'))-—双变量分组
使用R软件可以方便直观的对数据进行描述性分析。
如使用均值、中位数、顺序统计量等度量位置:
用方差、标准差、变异系数等度量分散程度;以及用峰度系数、偏度系数度量分布形状。
例如在窗口中输入:
x<-seq(b589,3)
length(X);mean(x);var(x);sd(x);median(x);100*sd(x)/mean(x)
[1]
[1]
[1]
[1]
[1]
[1]
197#长度
295#均值
29254.5#方差
171.0395#标准差
295#中位数
57.97948#样本标准差
n<-length(x);ni<-mean(x);s<-sd(x)
n/((n-1)*(n-2))*sum((x-m)"3)/s"3;((n*(n+l))/((n-1)*(n-2)*(n-3))*suin((x-m)"4)/s"4-(3*(n-1)"2)/((n-2)*(n-3)))
[1]0#偏度系数
[1]-1.2#峰度系数
R软件可以检验样本是不是来自某种分布总体,以正态分布为例,我们可以通过shapiro.test()函数提供ff统讣量和相应的p值,并通过p值的大小判断样本是否来自正态分布的总体。
经验分布的K-S检验方法的应用范圉则更加广泛,不仅可以判断样本是否来自正态总体,也能判断是否来自其它类型的分布总体。
除此之外,R语言还有强大的画图功能,例如我们可以通过作直方图、茎叶图和总体分析来描述数据的分布。
R中的筒水平作图函数有:
plotO.pairs0.coplot0.qqnormO.hist()等等。
当高水平作图函数并不能完全达到作图的指标时,需要低水平的作图函数予以补充。
低水平作图函数有:
pointsOslinesO.text0>polygon0legend()title()和axisO等。
需要注意的是低水平作图函数必须是在高水平作图函数所绘图形的基础之上增加新的图形。
cor.
histo函数可以做出已知数据的直方图,stemO函数可以作茎叶图,boxplot0函数可用作箱线图,qqline()和qqmormO可以做出正态QQ图和相应的直线。
R语言同时还能对两组数进行相关性检验,cor.test()函数提供了Pearson相关性
检验,Spearman秩检验和Kendall秩检验。
其原假设为两组数据•不相关,通过P值的大小来判断是否拒绝原假设。
我们还能用stars0函数作出星图,来表示多元数据,以上用法都非常简单易用,这里就不再赘述。
3、R语言在统计推断中的应用
首先,R语言可以用来进行参数估计;
统讣学中我们应用矩估计和极大似然估计来进行点估计,矩估计是通过解正规方程组得到参数佔il•的值:
极大似然估计通过解极大似然函数的极值点得到参数佔汁的值。
在R中我们可以使用Newton迭代法求解正规方程组,获得矩估计;用optimize()函数求解极大似然函数,获得最大似然估汁;山此可见,R语言能够很方便的解决参数点估计问题。
var.
点估讣给出未知参数的近似值以后,并不能知道这种估计的精确性如何,可信程度如何,为了解决这些问题,就需要用到区间估计,在学习用R语言解决区间估计问题的过程中,我最大的体会就是R软件中内置的一些函数极大地方便了我们处理具体问题。
比如t.testO函数。
对单个正态总体,向量X包含了来自该总体的一个样本,我们可以直接用t.test(x)指令得到均值U的点估计和区间佔ih对于两个正态总体,向量y包含了来自第二个总体的一个样本,我们可以用t・test(x,y)来得到均值差U1-U2的点估计和区间估汁,其中当两个总体方差相同时,只需要加上vareqgl=T(缺省值为F,即默认两个总体的方差是不同的);同时t.test0函数不仅可以进行双侧置信区间估汁,也能进行单侧置信区间估计,只需要在括号内加上1”或者al="g”。
当数据不服从正态分布是,可以利用中心极限定理,取较大的样本量,构造近似服从正态分布的统计量进行估计。
其次,R语言可以用来进行假设检验。
假设检验也是统汁推断中的一个重要的内容,在统汁学中,我们用搜索到的数据对某个事先作出的统计假设按照某种设计好的方法进行检验,来判断此假设是否正确。
也就是说为了检验一个假设是否成立,先假定它是成立的,看看山此会导致什么结果。
如果导致一个不合理的现象出现,就认为原假设不正确,如果没有导出不合理的现象,则不能拒绝原假设。
R软件给出了参数假设检验的方法。
以正态总体为例,t.test0函数也可以用来进行单个或者两个正态总体的均值的假设检验。
进行单边检验时可以加入指令alternative(备择假设),缺省时表示双边检验,less表示备择假设为u X<-c(7&b72.4.76.2,74.3,77.4.78.4.76.0,75.5,76.7,77.3) Y<-c(79.b81.0,77.3,79.1,80.0,79.1,79.b77.3,80.2,82.1) t.test(X,Y,var*equal二T,al二”1”) 输出: TwoSamplet-test data: XandY t=-4.2957,df=1&p-value=0,0002176 alternativehypothesis: truedifferenceinmeansislessthan0 95percentconfidenceinterval: -Inf-1.908255sampleestimates: meanofxmeanofy76.2379.43 结果中我们不仅能得到X和Y的均值的点估计76.23和79.43、左侧区间估计、同时也能通过P值的大小判断是否接受原假设,该例中p 与均值假设检验相类似。 R语言中还可以用var.test()函数进行正态总体的方差假设检验。 而且R语言不仅能就正态总体进行均值和方差检验,也能对其他总体分布进行检验。 例如mbinom.testO进行二项分布的检验和估计。 习题中检验铁剂和饮食两种方法治疗后患者病悄表现有无差异: x<-c(113>120,13&120,100,订&13&123)y<-c(13&116,125,136,110,132,130,110)binom.test(sum(x sum(x numberofsuccesses=4,n
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 学习 总结