软件R的安装和使用(视窗电脑)
周迈
Department of
Statistics,
R是一个免费的统计分析软件(GNU版权,这一点与LINUX相似)。它几乎是SPLUS的一个克隆。(不要钱的SPLUS).几乎所有从R中学到的都可以在SPLUS中应用,反之亦然。而SPLUS是一个很高质量的,普遍使用的统计软件。美国药品检验局曾批准使用2个统计软件。SPLUS是其中一个,另一个是SAS。R有各种版本,可以在UNIX计算机,苹果机和这里要详细讲的视窗电脑机上运行;包括视窗95,98,ME,NT,2000中都能运行。现下的最新版是R1.3.1(9/2001).
1. 在视窗计算机上安装R
如果你有R的光碟,则可省去下载的时间和麻烦。将光碟置于光驱中。用鼠标点
击 SetupR.exe 即启动了安装。
如果你没有R的光碟,则可以从以下地址下载“SetupR.exe”:
http://cran.us.r-project.org/bin/windows/base/
注意这是一个15MB大的文件,所以会需要较长时间下载。
如果安装顺利你将会在START-PROGRAMS里看到R。用鼠标选择它即开始运行R了。在R里你可以键入q()或用鼠标选FILE-EXIT来退出R。此时有一对话框,问你是否需要把R中运行的历史存下。此时点No。(以后你得到有用结果时应点Yes将结果和历史存下)。
R还有许多附加的功能包,不用时不调用,可省内存。如果要调用,在R里用鼠标点Packages看看有那些已经安装了(要先安装才能调用)。如果已按装了则用鼠标选择即可。
如果要新安装功能包,则先启动R,在R里用鼠标点击
Package→Install package from local zipfile
然后在窗口中找到你要安装的package的zip文件,选择即可。(比如在光碟上就有,或事先下载)。
现在假定你的电脑已经成功地安装上了R。
2. 第一节课
下面是R的演示,我们将输出略去了,只有需要你打字的输入在这儿。#后面的是注,
R不执行的。注意R是分大小写的(象Unix,不象DOS)。
注意>符是R的prompt, 表示R已经准备接受你的指令。
>data1 <- c(21,25, 25,18,44,20,25,15,19,20,30) # 这产生了一个向量叫data1
>1s() #(是el-s,不是壹-s) 看看有什么(看到了data1 了吗?)
>summary(data1)
>stem(data1)
>hist(data1) 直方图
>data2<-rnorm(100) 产生100个正态随机数,放在data2里
>hist(data2)
>data() 看看有那些数据已经装进R。
>data(sunspots) 调入数据sunspots
>sunspots 将sunspots在屏幕上显示出来。
>plot(sunspots)
可以在图上打出你的名字、学号:
>text(locator(1),”your
name and ID”)
此时用鼠标点击图上的某个地方。
>rm(data1) 将data1抹去。
>demo(graphics) 看作图演示,要在指令窗里回车数次。
>q() 退出R
初学者常范的一个错误是自己产生或定义一个东西,起名和现有的东西重名。比如c, t, 等等。一开始好象不会导至错误,但后来会引起许多混乱。所以起名时要避免重名。如你想给你的数据或函数起名mydata,则先试试:
>mydata
Error:Object “mydata”not found
这表明没有叫mydata的东西,你可以用此名字。
如果重复一个指令,则可用箭头来调出前面用过的指令,还可以修改。象Unix的K-shell.
2. 1 打印及图像存档
R有可以点击的“打印”菜单,对于图像窗口和指令窗口都有。也可以点击File
→Print 即可。或直接点打印机的图号即可。
还可将图像拷进Excel 或 World中(便利与其它文字一起编辑)。先将R的图像窗口点击成为active,然后点击File→Copy to clip board→as bitmap。再打开(微软)Word 或Excel,在那儿点击Edit→Paste。这样你的图就到了Word或Excel里了。
如果点击File→Save as→postscript 则便将图存档成为postscript文件, 等等。
2. 2 内存
R有它自己的内存管理系统。可以用gc()来看看有多少内存已经占用。不过从R1.2.0
版本开始(现在的最新版本为1.3.0)你不必再担心内存问题。当然如果你的PC机内存不足则R的运行会很慢。
2.3 彩色作图和图中的数学符号
R可以产生彩色图。(可能你在demo(graphics)中见过了)。用plot(x,col=”red”)来得到一个红色的图。如要其它颜色,用colors()来看600多种颜色的名称。
你也可以用points(x,col=”white”)来抹去刚才得到的红色点,(假定你用white作底色)。
其它函数也有不少可用col=的,包括lines()等等。
R优于Splus的一点是R可以在图中作出数学符号和希腊字母(与tex语言功能相近)。以下是一个简单例子:(更多可见demo())。
>plot(rnorm(100),type=”n”)
>text(20,0,expression(theta(mu)),col=”blue”)
>text(40,0,expression(theta{“2+x”}),col=”blue”)
3 第二节课
R要边试边学,以下是一些常用的函数用法,试试看。
看演示:
demo() or demo(graphics)
删除x: rm(x)
看你有什么: ls()
随机产生9个从20到40的整数(无重复): sample(20:40,9,replace=FALSE)
随机分组,18个东西分3组: sample(1:3,18,replace=TRUE)
随机分组,18个东西分3组,每组6个 sample(rep(1:3,6),18,replace=FALSE)
查阅sample()函数的功能,用法: ?sample
计算data1的样本均值 mean(data1)
计算data1的样本标准差 sd(data1)
计算data1的样本方差 var(data1)
计算data1的样本中位数 median(data1)
range(data1)
boxplot(data1)
计算5的阶乘 prod(1:5)
计算从20个东西里取5个的不同种取法 choose(20,5)
产生100个标准正态分布的随机数 rnorm(100)
产生并把连续随机数离散化 table(cut(rnorm(100),8))
R的另一种用法是将几个乃至几十个指令存档于一个ASCII文件(比如叫mycode),然后在R里打
>source(“ mycode”) 或用鼠标点File→source R code。
对于现成的数据不必重新打字输入,而可用R来读。先将数据整理成ASCII文件(
如用wordpad),然后在R里作如下指令: (假定你的数据在text.dat中)(将数据读入并存在data3中)
>data3<-read.table(“c:/stat/test.dat”,header=TRUE)
另外还可用scan()来读数据,用write()来输出数据。
R可以替代几乎所有的统计表格,得到各种概率
如果Z是一个二项分布随机变量,N=25,p=0.3,则P(Z≦5)为
>pbinom(5,25,0.3)
P(Z=5)为
>dbinom(5,25,0.3)
P(Z≧5)为
>1-pbinorm(4,25,0.3) #请注意是4而不是5。
最后P(5≦Z≦10)为
>1-(1-pbinorm(10,25,0.3)+pbinom(4,25,0.3) 或
>pbinom(10,25,0.3)-pbinorm(4,25,0.3) 或
>sum(dbinom(
也可以索性打印出一张二项分布的概率表来(N=25,p=0.3)
>dbinom(0:25,25,0.3)
为了看得更清楚些,你可以试试:
>print(dbinom(0:25,25,0.3),print.gap=2) 或
>print(cbind(0:25,dbinom(0:25,25,0.3)),print.gap=3)
如果Z是一个标准的正态分布变量,则P(Z<1)为
>pnorm(1)
如果要计算非标准的正态概率,则要给出均值和标准差。如果Z是均值为 –2,标准差
为3的正态随机变更,则P(Z<1)为:
>pnorm(1,mean=-2,sd=3)
而P(2<Z<3)为:
>pnorm(3,mean=-2,sd=3)-pnorm(2,mean=-2,sd=3)
对于超几何分布的概率,可用dhyper()或phyper()来计算:
-------------------
| f11 | | 19
------------------- 假设左边这个2×2的表是我们关心的。要
| | | 11 计算f11的分布概率。
-------------------
14 16
则f11=6的概率为
>dhyper(6,14,16,19)
如果用phyper则得到f11≦6的概率。
对于卡方分布(自由度为1的中心分布)。它小于3.84的概率为
>pchisq(3.84,df=1,ncp=0)
4. 一些习题
题1:如果整个母体(所有人们)对于一件事的观点正好是一半一半(赞成/反对)。而我们用随机抽样来进行调查。用R来算出以下概率:
(a)随机抽样10个人,其中6人或以上赞成
(b)随机抽样100个人,其中60人或以上赞成
(c)随机抽样1000个人,其中 600人或以上赞成
(d)随机抽样2000个人,其中1200人或以上赞成
(e)随机抽样1500个人,其中赞成人数在300到600之间(包括300和600)。
根据上面计算,如果你随机抽样了2000人,其中1200人赞成。你还相信一半/一半(赞成/反对)吗?摆出理由。[所有计算均可用pbinom()完成]
也可用R打印出一个小小的正态分布概率表,请与书中的比较。
>pnorm(seq(-3.5,3.5,0.5))
设Z是一正态分布的随机变量。均值为2,标准差为4。请计算3.085<Z<4.226的概率。
单样本的T检验。先将数据存入一个向量(比如)叫data6
>data6<-c(33.9,52.4,48.6,53.5,43.8)
要检验Ho:μ=46.5
Ha: μ<46.5(其实只算显著性),则
>t.test(data6,alternative=”less”,mu=46.5)
另外2个对立假设是“greater”和“tow.sided”。这函数除了给出显著性外还给出一个
95%置信区间。
t.test()还可以做两样本t检验。假定有2组数据叫xbefore和xafter。又假定数据是不配对的。则可检验:Ho: μ=0 Ha: μ<0
>t.test(x=xbefore,y=xafter,alternative=”less”,mu=0,paired=FALSE)
如果数据是配对的,则改paired=FALSE为paired=TRUE.
单样本的百分比检验。假设数据为:1000试验中600成功。要检验成功概率是否是
0.5: Ho:p=0.5;Ha:p≠0.5,则
>prop.test(600,n=1000,p=0.5,alternative=”two.sided”)
另外两个对立的假设是“less”和“greater”.这函数也给出95%的置信区间。
进一步的讯息可用 ?t.test。查询在线手册。
如果需要有R的附加功能包,则可以先查一下有那些装上了。
>library() 列出所有装好的附加功能包。(假定你有ctest.)
>library(ctest) 这样便将ctest调进来了。(其中包括binom.test函数)
>library(help=ctest) 看看在ctest功能包中包括那些函数。(其中有binom.test)
>binom.test(600,n=1000,p=0.5,alternative=”two.siced”) 利用binom.test来做统计检验
>?binom.test
如果library()中没有你需要的功能包,则要先安装上(请看第一节)。
函数binom.test与prop.test相近,只不过prop.test用的是近似计算,binom.test是精确计算。不过prop.test的功能适用性更强更广。
R还可以调用现成的C程序和Fortran程序。不过比较复杂。要先将C/Fortran程序 转换成dll可执行文件。然后调用。你应该尽量在R中完成你的计算。如果实在有调用C/Fortran的需要,则请找英文的文件。
R的一些特点:
1、R(Splus)是向量语言。几乎所有运算都最好向量化。(会比for循环句快很多)。
+,-,*,/,^,……等等。要一个向量的一部分,则可用[]来表示下标范围。
2、R的运算都是以函数来完成的。R有3000个以上的函数。exp(x), log(x), sqrt(x),
q(),c(x,y)…… 等都是函数,x都可以是向量。
3、你自己在R中可以很容易定义新的函数(例子见后)
4、R的图像功能很强,可以互动作图,直至满意。
5、对于非常大的数据,R可能不太合适。 (>1 gig)
6、许多附加功能包在R和Splus中是完全一样的。(如 survival, bootstrap等等)
7、R中的随机数产生方法可以自由选择(如果你担心随机数的质量的话)
8、R不要钱,可以让学生每人一份。可以在家里做计算。或在笔记本电脑上
如果你要定义新的函数,可以先在R外用任何编辑软件编写好(ASCII file或.TXT file)然后在R里边用source()读进来。也可以直接在R里边编写。比如先调R的函数mean,修改后变为你自己的函数junk。
>junk<-edit(mean)
如要修改你的函数,则可用:
>fix(junk)
如果你要定义的函数很短,则可直接在R中键入,例如
>junk<-function(x) {x/(x+5)}
下面是又一个自我定义的函数例子。(给定样本大小,样本均值和标准差,产生假数据)
fakedata<-function(size,
xbar, sdd){
if(sdd<=0) stop(“sdd must >0”)
if(!is.numeric(xbar)) stop(“xbar must be a real number”)
fake1
<-rnorm(size)
fake2
<-fake1 – mean(fake1)
fake2*(sdd/sd(fake2))+xbar
}
这个函数在以下情况有用:有时习题中只给出样本大小(=50),样本均值(=11.8)和标准差(=0.6),但没有原始数据。如果要做t检验,则可以如下做:
>mydata
<- fakedata(50,11.8,0.6)
>t.test(mydata,
mu=12, alternative=”less”)
进一步的阅读只能看英文了。可以先看“An Introduction to R”。此书也是免费的。在R里点击Help,然后选这本书,可以打印出来阅读。R的指令和输出除了数字/符号外,都是英文,所以学点英文看来是必要的。