R语言学习总结Word格式.docx
《R语言学习总结Word格式.docx》由会员分享,可在线阅读,更多相关《R语言学习总结Word格式.docx(13页珍藏版)》请在冰豆网上搜索。
与此同时R语言中也提供了其它高级程序语言共有的分支、循环等程序控制构造。
比方if/else语句,for循环等。
因此R语言也可以很容易的根据情况编写自己所需要的函数。
例:
编写一个R程序,输入一个整数n,如果n小于等于0,中止运算,并输出:
“要求输入一个正整数〞;
否则,如果n是偶数,则将n除2赋值给n;
否则将3n+1赋给n。
不断循环,直到n=1停顿,并输出:
“运算成功〞
解:
新建一个程序脚本,名为chapter2.R〞,写入代码:
f<
-function(n){
if(n<
=0)list("
要求输入一个正整数"
)
else{repeat{
if(n==1)break*n=1时终止elseif(n/2==as.integer(n/2))n<
-n/2*n为偶数时除2elsen<
-3*n+1
}
list("
运算成功"
在R窗口中
Source(“chapter2.R〞);
f(32)
[1]"
f(-5)
2、R在统计描述中的应用
数据框操作〔plyr包〕
辅助小函数
1splat函数:
作用:
把原函数中多个参数打包为一个list作为参数,然后输出新的函数。
也就是说本来*个函数需要输入多个参数,现在套上splat后,只要输入一个参数list就可以了,不需要单独地输入参数。
它的作用结果是把一个函数变成一个新函数。
m*ply(a_matri*,FUN)的作用和a*ply(a_matri*,1,splat(FUN))一样
例:
〔1〕参数使用
>
hp_per_cyl<
-function(hp,cyl,...)hp/cyl
splat(hp_per_cyl)(mtcars[1,])
1]18.33333
splat(hp_per_cyl)(mtcars)
[1]18.3333318.3333323.2500018.3333321.8750017.5000030.6250015.5000023.75000
[10]20.5000020.5000022.5000022.5000022.5000025.6250026.8750028.7500016.50000
[19]13.0000016.2500024.2500018.7500018.7500030.6250021.8750016.5000022.75000
[28]28.2500033.0000029.1666741.8750027.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))
2each函数
把多个函数会聚成一个函数,当使用这个函数时,将分别作用多个函数。
缺乏:
不能给作用的函数指定附加参数,只能使用默认参数。
fun<
-function(*)c(min=min(*),ma*=ma*(*),mean=mean(*))
fun(1:
10)
等价于:
-each(min,ma*,mean)
f(1:
3colwise函数
colwise(.fun,.cols,...)
说明:
.fun:
要转化的函数;
.cols是测试数据框的列是否应包含的判别函数或者是·
要包含的列的名称。
catcolwise(.fun,...)与colwise功能类似,只是对离散型变量有效
numcolwise(.fun,...)与colwise功能类似,只是对数值型变量有效
把作用于数据框行向量的函数〔如mean,median等〕转化为作用于数据框列向量的函数。
于plyr函数一起使用十分方便。
作用结果生成一个新的函数。
nmissing<
-function(*)sum(is.na(*))
colwise(nmissing)(baseball)
colwise(nmissing,.(sb,cs,so))(baseball)
ddply(baseball,.(year),colwise(nmissing,.(sb,cs,so)))
numcolwise(nmissing)(baseball)
colwise(nmissing,is.numeric)(baseball)
catcolwise(nmissing)(baseball)
colwise(nmissing,is.discrete)(baseball)
4failwith函数
failwith(default=NULL,f,quiet=FALSE)
作用:
修正一个函数,使得当该函数出现错误时返回一个设定的默认值,默认为空。
-function(*)if(*==1)stop("
Error"
)else1
f
(1)
Errorinf
(1):
Error
safef<
-failwith(,f)
safef
(1)
Errorinf(...):
NULL
-failwith(12,f,quiet=TRUE)
[1]12
5summarise()函数
summarise(.data,...)
对数据框做统计汇总,…为设定的统计方法或函数
例:
summarise(baseball,duration=ma*(year)-min(year),nteams=length(unique(team)))
durationnteams
1136132
head(ddply(baseball,"
id"
summarise,duration=ma*(year)-min(year),nteams=length(unique(team))))
iddurationnteams
1aaronha01223
2abernte02177
3adairje01124
4adamsba01202
5adamsbo03134
6adcocjo01165
数据集变量操作
1变量排序:
arrange函数
arrange(df,.(var1),.(var2)…)
按照指定列排序。
注意:
使用arrange函数排完序后行名会丧失,需要用cbind补回。
arrange(mtcars,cyl,disp)
cars<
-cbind(vehicle=row.names(mtcars),mtcars)
arrange(cars,cyl,disp)
------先把行名作为一个新的列加到数据框再排序
2更改变量名
rename(*,replace,warn_missing=TRUE)
通过名字修改变量名字,不是根据它的位置。
head(rename(tmt,replace=c("
mpg"
="
avgpg"
〞cly〞=〞new〞)))
3取行或列的数据
take(*,along,indices,drop=FALSE)
在*中,按照*个维度取数。
参数说明:
*为取数的源数据,可以是array或者dataframe;
along:
维度。
1表示行,2表示列,3表示数组快等等;
indices:
具体维度所对应的指;
drop:
是否整合
例:
take(mtcars,2,1)--取第一列
take(mtcars,1,1)--取第一行
数据集操作
1数据集
1)match_df
match_df(*,y,on=NULL)
*为原始的需要提取的数据框,y为条件数据框;
on指定用来连接的变量,默认为两个数据框中所有变量,可以为多个。
通过on后面的字段,到*数据框取选取数据,相当于innerjoin,区别为:
前者结果集是*的一个子集;
innerjoin包括两个数据框中所有字段。
根底数据
a<
-c("
a"
"
b"
c"
d"
b<
aa"
bb"
dd"
c<
-c(1,2,3,4)
t1<
-data.frame(a,b,c)
t2<
-data.frame(a=c("
e"
),b=c("
ab"
cd"
))
match_df(t1,t2,on=c("
abc
1aaa1
2〕join
join(*,y,by=NULL,type=“left〞,match=“all〞)
连接两个数据框
*,y为数据框;
by=为要连接的字段,type为连接类型:
left、right、full;
match:
all〔所有匹配上的其他属性值都带上〕、first〔只带上匹配上的第一个属性值〕
join(t1,t2,by="
*2"
type="
inner"
left"
right"
tt1<
-data.frame(*1=c(1,2,3,4),*2=c(5,6,7,8))
tt2<
-data.frame(y1=c(1,2,3,4)*10,*2=c(6,6,6,6))
join(tt1,tt2,by="
match="
all"
*1*2y1
12610
22620
32630
42640
first"
*2*1y1
26210
2.16210
2.26210
2.36210
merge和join相似,但是效率上join更优。
3〕merge
*<
-data.frame(a=c(1,2,4,5,6),*=c(9,12,14,21,8))
y<
-data.frame(a=c(1,3,4,6),y=c(8,14,19,2),*=c(2,3,4,5))
merge(*,y)----根据一样字段默认内连接
merge(*,y,all=TRUE)---根据一样字段全
merge(*,y,all.*=TRUE)--左连接
merge(*,y,all.y=TRUE)--右连接
merge(*,y,by=c("
*"
))--根据a和*两个字段连接
merge(*,y,by.*="
by.y="
y"
)--根据*表中a和y表中y连接
数据统计
1**ply函数
拆分数据,应用函数,再组合函数作用后的数据
array、dataframe、list
array、dataframe、list、discareded
a*ply(.data,.margins,.fun,...,.progress="
none"
参数说明:
.data是要进展处理的数组
.margins是用哪种方式去切割数据,取值为1,2,c(1,2)
.fun是对切割的数据指定一个函数进展处理
.progress决定是否显示及用哪种方式显示进度条
aaply(a,1,mean,.progress="
te*t"
)---以文本形式展示进度条
win"
)---windows窗口展示进度条
d*ply(.data,.variables,.fun,...,.progress="
.variables指定要按其分割的变量名称
daply(data,.(age),.fun=amean)
daply(data,.(se*),.fun=amean)
daply(data,.(age,se*),.fun=amean)
ddply(data,.(se*),.fun=amean)
dlply(data,.(se*),.fun=amean)
l*ply(.data,.fun,...,.progress="
列表类型的数据是最简单的数据,因为它已经被分割成一个个了〔也就是列表数据的一个个元素〕,所以这类函数没有参数用来描述是按什么进展切分的。
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_matri*,FUN)的作用和a*ply(a_matri*,1,splat(FUN))一样。
data=data.frame(n=c(10,100,50),mean=c(5,5,10),sd=c(1,2,1))
data
nmeansd
11051
210052
350101
mlply(data,rnorm)
2观测值出现个数
〔1〕count函数:
count(df,vars=NULL,wt_var=NULL)
参数:
df是要处理的数据框;
vars是要进展分组统计的变量;
wt_var为权重。
注意:
该函数的功能类似于table
根底数据:
a=data.frame(names=c("
),wt=c(1,1,1,1,2,2,2,2,2,2))
count(a,vars="
names"
)---单变量分组
wt_var="
wt"
)---加上权重
count(a,c("
))----双变量分组
使用R软件可以方便直观的对数据进展描述性分析。
如使用均值、中位数、顺序统计量等度量位置;
用方差、标准差、变异系数等度量分散程度;
以及用峰度系数、偏度系数度量分布形状。
例如在窗口中输入:
*<
-seq(1,589,3)
length(*);
mean(*);
var(*);
sd(*);
median(*);
100*sd(*)/mean(*)
[1]197*长度
[1]295*均值
[1]29254.5*方差
[1]171.0395*标准差
[1]295*中位数
[1]57.97948*样本标准差
n<
-length(*);
m<
-mean(*);
s<
-sd(*)
n/((n-1)*(n-2))*sum((*-m)^3)/s^3;
((n*(n+1))/((n-1)*(n-2)*(n-3))*sum((*-m)^4)/s^4-(3*(n-1)^2)/((n-2)*(n-3)))
[1]0*偏度系数
[1]-1.2*峰度系数
R软件可以检验样本是不是来自*种分布总体,以正态分布为例,我们可以通过shapiro.test()函数提供W统计量和相应的p值,并通过p值的大小判断样本是否来自正态分布的总体。
经历分布的K-S检验方法的应用范围则更加广泛,不仅可以判断样本是否来自正态总体,也能判断是否来自其它类型的分布总体。
除此之外,R语言还有强大的画图功能,例如我们可以通过作直方图、茎叶图和总体分析来描述数据的分布。
R中的高水平作图函数有:
plot()、pairs()、coplot()、qqnorm()、hist()等等。
当高水平作图函数并不能完全到达作图的指标时,需要低水平的作图函数予以补充。
低水平作图函数有:
points()、lines()、te*t()、polygon()、legend()、title()和a*is()等。
需要注意的是低水平作图函数必须是在高水平作图函数所绘图形的根底之上增加新的图形。
hist()函数可以做出数据的直方图,stem()函数可以作茎叶图,bo*plot()函数可用作箱线图,qqline()和qqmorm()可以做出正态QQ图和相应的直线。
R语言同时还能对两组数据进展相关性检验,cor.test()函数提供了Pearson相关性
检验,Spearman秩检验和Kendall秩检验。
其原假设为两组数据不相关,通过p值的大小来判断是否拒绝原假设。
我们还能用stars()函数作出星图,来表示多元数据,以上用法都非常简单易用,这里就不再赘述。
3、R语言在统计推断中的应用
首先,R语言可以用来进展参数估计;
统计学中我们应用矩估计和极大似然估计来进展点估计,矩估计是通过解正规方程组得到参数估计的值;
极大似然估计通过解极大似然函数的极值点得到参数估计的值。
在R中我们可以使用Newton迭代法求解正规方程组,获得矩估计;
用optimize()函数求解极大似然函数,获得最大似然估计;
由此可见,R语言能够很方便的解决参数点估计问题。
点估计给出未知参数的近似值以后,并不能知道这种估计的准确性如何,可信程度如何,为了解决这些问题,就需要用到区间估计,在学习用R语言解决区间估计问题的过程中,我最大的体会就是R软件中内置的一些函数极大地方便了我们处理具体问题。
比方t.test()函数。
对单个正态总体,向量*包含了来自该总体的一个样本,我们可以直接用t.test(*)指令得到均值u的点估计和区间估计;
对于两个正态总体,向量y包含了来自第二个总体的一个样本,我们可以用t.test(*,y)来得到均值差u1-u2的点估计和区间估计,其中当两个总体方差一样时,只需要加上var.equal=T〔缺省值为F,即默认两个总体的方差是不同的〕;
同时t.test()函数不仅可以进展双侧置信区间估计,也能进展单侧置信区间估计,只需要在括号内加上al=〞l〞或者al=〞g〞。
当数据不服从正态分布是,可以利用中心极限定理,取较大的样本量,构造近似服从正态分布的统计量进展估计。
其次,R语言可以用来进展假设检验。
假设检验也是统计推断中的一个重要的内容,在统计学中,我们用搜索到的数据对*个事先作出的统计假设按照*种设计好的方法进展检验,来判断此假设是否正确。
也就是说为了检验一个假设是否成立,先假定它是成立的,看看由此会导致什么结果。
如果导致一个不合理的现象出现,就认为原假设不正确,如果没有导出不合理的现象,则不能拒绝原假设。
R软件给出了参数假设检验的方法。
以正态总体为例,t.test()函数也可以用来进展单个或者两个正态总体的均值的假设检验。
进展单边检验时可以参加指令alternative〔备择假设〕,缺省时表示双边检验,less表示备择假设为u<
u0,greater则相反,用conf.level指定置信水平。
-c(78.1,72.4,76.2,74.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(*,Y,var.equal=T,al=〞l〞)
TwoSamplet-test
data:
*andY
t=-4.2957,df=18,p-value=0.0002176
alternativehypothesis:
truedifferenceinmeansislessthan0
95percentconfidenceinterval:
-Inf-1.908255