软件R的安装和使用(视窗电脑)

                                 周迈

Department of Statistics, University of Kentucky

      

       R是一个免费的统计分析软件(GNU版权,这一点与LINUX相似)。它几乎是SPLUS的一个克隆。(不要钱的SPLUS).几乎所有从R中学到的都可以在SPLUS中应用,反之亦然。而SPLUS是一个很高质量的,普遍使用的统计软件。美国药品检验局曾批准使用2个统计软件。SPLUS是其中一个,另一个是SAS。R有各种版本,可以在UNIX计算机,苹果机和这里要详细讲的视窗电脑机上运行;包括视窗95,98,ME,NT,2000中都能运行。现下的最新版是R1..19/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里用鼠标点击

              PackageInstall package from local zipfile

       然后在窗口中找到你要安装的packagezip文件,选择即可。(比如在光碟上就有,或事先下载)。

    

现在假定你的电脑已经成功地安装上了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:Objectmydata”not found

这表明没有叫mydata的东西,你可以用此名字。

 

       如果重复一个指令,则可用箭头来调出前面用过的指令,还可以修改。象UnixK-shell.

 

2. 1  打印及图像存档

 

R有可以点击的“打印”菜单,对于图像窗口和指令窗口都有。也可以点击File

Print 即可。或直接点打印机的图号即可。

 

       还可将图像拷进Excel World中(便利与其它文字一起编辑)。先将R的图像窗口点击成为active,然后点击FileCopy to clip boardas bitmap。再打开(微软)Word Excel,在那儿点击EditPaste。这样你的图就到了WordExcel里了。

       如果点击FileSave aspostscript 则便将图存档成为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个从2040的整数(无重复):        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”) 或用鼠标点Filesource 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(Z5)

>pbinom(5,25,0.3)    

P(Z=5)

>dbinom(5,25,0.3)

P(Z5)

>1-pbinorm(4,25,0.3)  #请注意是4而不是5

最后P(5Z10)

>1-(1-pbinorm(10,25,0.3)+pbinom(4,25,0.3)   

>pbinom(10,25,0.3)-pbinorm(4,25,0.3)       

>sum(dbinom(5:10,25,0.3)

 

也可以索性打印出一张二项分布的概率表来(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则得到f116的概率。

对于卡方分布(自由度为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个人,其中赞成人数在300600之间(包括300600)。

 

       根据上面计算,如果你随机抽样了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组数据叫xbeforexafter。又假定数据是不配对的。则可检验:Ho: μ=0  Ha: μ<0

>t.test(x=xbefore,y=xafter,alternative=less,mu=0,paired=FALSE)

    如果数据是配对的,则改paired=FALSEpaired=TRUE.

 

单样本的百分比检验。假设数据为:1000试验中600成功。要检验成功概率是否是

0.5:  Ho:p=0.5;Ha:p0.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.testprop.test相近,只不过prop.test用的是近似计算,binom.test是精确计算。不过prop.test的功能适用性更强更广。

 

 

R还可以调用现成的C程序和Fortran程序。不过比较复杂。要先将C/Fortran程序 转换成dll可执行文件。然后调用。你应该尽量在R中完成你的计算。如果实在有调用C/Fortran的需要,则请找英文的文件。

 

 

R的一些特点:

 

1、(Splus)是向量语言。几乎所有运算都最好向量化。(会比for循环句快很多)。

 +,-,*,/,^,……等等。要一个向量的一部分,则可用[]来表示下标范围。

2、R的运算都是以函数来完成的。R3000个以上的函数。exp(x), log(x), sqrt(x),

q()c(x,y)…… 等都是函数,x都可以是向量。

3、你自己在R中可以很容易定义新的函数(例子见后)

4、R的图像功能很强,可以互动作图,直至满意。

5、对于非常大的数据,R可能不太合适。  (>1 gig)

6、许多附加功能包在RSplus中是完全一样的。(如 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的指令和输出除了数字/符号外,都是英文,所以学点英文看来是必要的。