您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > R软件在概率论与数理统计中的应用解读
1第十章R软件在概率论与数理统计中的应用概率论与数理统计是一门应用性很强的数学学科.在实际应用中,经常会遇到比较繁琐的计算,在这种情况下,可以借助计算机编程计算.R是由奥克兰大学RossIhaka和RobertGentleman建立的统计分析软件,是AT&T贝尔实验室创建的S语言的民用版本,S-Plus是Insightful公司的商业化软件.而R是免费的,且源代码完全开放,其源代码主要用C语言编写,也有一些程序用Fortran编写,熟悉C语言的读者很容易掌握R.本章将结合概率统计教学,具体介绍R软件的使用方法.§10.1R软件概述10.1.1R软件的下载与安装R软件是完全免费的,在上可以下载到R软件的Windows版本,当前的版本是R-2.8.1版(2008年12月22日发布),大约31MB.R软件的安装非常容易,运行刚才下载的程序,按照Windows的提示安装即可.当开始安装后,选择安装提示的语言,接受安装协议,选择安装目录,并选择安装组件.在安装组件中,最好将PDFReferenceManual项也选上,这样在R软件的帮助文件中有较为详细的PDF格式的软件说明.安装完成后,程序会创建R程序组并在桌面上创建R主程序的快捷方式.通过快捷方式运行R软件,便可调出R软件的主窗口,如图10-1所示.图10-12R软件的界面与Windows的其他编程软件类似,由一些菜单和快捷按钮组成.快捷按钮下面的窗口便是命令输入窗口,它也是运算结果的输出窗口.主窗口上方的一些文字是运行R软件时出现的一些说明和指引.文字下的“”符号便是R软件的命令提示符,在其后可以输入命令.R软件一般采用交互式工作方式,在命令提示符后输入命令,回车后便会输出计算结果.当然也可将所有的命令建立成一个文件,运行这个文件的全部或部分来执行相应的命令,从而得到相应的结果.对于一些陌生的命令,可以通过单击主窗口中的【帮助】菜单查找其具体的命令格式及含义.在命令的后面加一个“#”号,那么“#”号后面的内容为注释.10.1.2向量R中最简单运算是向量的赋值,最常用的方法是使用函数c(),它把若干个数值或字符串组合为一个向量,比如:x1-c(1,2)x1[1]12x2-c(3,4)x2[1]34x-c(x1,x2)x[1]1234可以对向量进行加(+)、减(-)、乘(*)、除(/)和乘方(^)运算,表示对向量的每一个元素进行相应的运算.例如:x-c(1,4,6.25)y-x*2+1y[1]3.09.013.5也可以用向量作为函数自变量,sqrt、log、exp、sin、cos、tan等函数都可以用向量作自变量,结果是对向量的每一个元素取相应的函数值,如:3sqrt(x)[1]1.02.02.5函数min和max分别取向量的最小值和最大值,函数sum计算自变量向量的元素和,函数range返回包含两个值的向量,第一个值是最小值,第二个值是最大值.例如:max(x)[1]6.25sort(x)返回x的元素从小到大排序的结果向量.order(x)返回使得x从小到大排列的元素下标向量.例如:a-c(1,2.3,0.4)sort(a)[1]0.41.02.3order(a)[1]312在R中很容易产生一个等差数列.例如,1:n产生从1到n的整数列,-2:3产生从-2到3的整数列,5:2产生反向的数列:1:5[1]12345-2:3[1]-2-101235:2[1]5432要注意1:n-1不是代表1到n-1而是向量1:n减去1,这是一个常犯的错误:n-51:n-1[1]012341:(n-1)[1]1234seq函数是更一般的等差数列函数.如果只指定一个自变量n0,则seq(n)4相当于1:n.指定两个自变量时,第一自变量是开始值,第二自变量是结束值,如seq(-2,3)是从-2到3.R函数调用的一个很好的特点是它可以使用不同个数的自变量,自变量可以用“自变量名=自变量值”的形式指定.例如,seq(-2,3)可以写成seq(from=-2,to=3).可以用一个by参数指定等差数列的增加值,例如:seq(0,2,0.7)[1]0.00.71.4也可以写成seq(from=0,to=2,by=0.7).有参数名的参数的次序可以颠倒,如:seq(0,by=0.7,to=2)[1]0.00.71.4也可以用length参数指定数列长度,如seq(from=10,length=5)产生10到14的向量.另一个类似的函数是rep,它可以重复第一个自变量若干次,例如:rep(x,3)[1]1.004.006.251.004.006.251.004.006.25第一个参数名为x,第二个参数名为times(重复次数).R提供了十分灵活的访问向量元素和向量子集的功能.某一个元素只要用x[i]的格式访问,其中x是一个向量名,或一个取向量值的表达式,如:x[1]1.004.006.25x[2][1]4可以单独改变一个元素的值,例如:x[2]-125x[1]1.00125.006.25事实上,R提供了四种方法来访问向量的一部分,格式为x[v],x为向量或向量值的表达式,v是一个向量,取值在1到length(x)之间,取值允许重复,例如:5x[c(1,3)][1]1.006.25x[1:2][1]1125x[c(1,3,2,1)][1]1.006.25125.001.00向量v的取值在-length(x)到-1之间,表示扣除相应位置的元素.例如:x[-(1:2)][1]6.2510.1.3数组与矩阵数组(array)可以看成是带多个下标的元素的集合,常用的是数值型的数组如矩阵,也可以有其它类型(如字符型、逻辑型、复型数组).R可以很容易地生成和处理数组,特别是矩阵(二维数组).数组有一个特征属性叫做维数向量(dim属性),维数向量是一个元素取正整数值的向量,其长度是数组的维数,比如维数向量有两个元素时数组为二维数组(矩阵).一组值只有定义了维数向量(dim属性)后才能被看作是数组.比如:z-1:12dim(z)-c(3,4)z[,1][,2][,3][,4][1,]14710[2,]25811[3,]36912这时z已经成为了一个维数向量为c(3,4)的二维数组.也可以把向量定义为一维数组,例如:dim(z)-12z[1]1234567891011126数组元素的排列次序缺省情况下按列排序,即第一下标变化最快,最后下标变化最慢,对于矩阵(二维数组)则是按列存放.例如,假设数组a的元素为1:24,维数向量为c(2,3,4),则各元素次序为a[1,1,1],a[2,1,1],a[1,2,1],a[2,2,1],a[1,3,1],...,a[2,3,4].用函数array()或matrix()可以更直观地定义数组.如array(1:12,dim=c(3,4))[,1][,2][,3][,4][1,]14710[2,]25811[3,]36912函数matrix()用来定义最常用的二维数组,即矩阵.例如,定义一个3行4列,由1:12按行次序排列的矩阵,可以用:matrix(1:12,ncol=4,byrow=T)[,1][,2][,3][,4][1,]1234[2,]5678[3,]9101112注意在有数据的情况下只需指定行数或列数之一.指定的数据个数允许少于所需的数据个数,这时循环使用提供的数据.例如:b-matrix(0,nrow=3,ncol=4)b[,1][,2][,3][,4][1,]0000[2,]0000[3,]0000要访问数组的某个元素,只要象上面那样写出数组名和方括号内用逗号分开的下标即可,如a[2,1,2],b[2,3].数组可以进行四则运算(+,-,*,/,^),表示数组对应元素的四则运算,参加运算的数组一般应该是相同形状的(dim属性完全相同).例如,假设A,B,7C是三个形状相同的数组,则D-C+2*A/B计算得到的结果是A的每一个元素除以B的对应元素加上C的对应元素乘以2得到相同形状的数组.四则运算遵循通常的优先级规则.矩阵是二维数组,但因为其应用广泛所以对它定义了一些特殊的运算和操作.函数t(A)返回矩阵A的转置.nrow(A)为矩阵A的行数,ncol(A)为矩阵A的列数.矩阵之间进行普通的加减乘除四则运算仍遵从一般的数组四则运算规则,即数组的对应元素之间进行运算,所以注意A*B不是矩阵乘法而是矩阵对应元素相乘.要进行矩阵乘法,使用运算符%*%,A%*%B表示矩阵A乘以矩阵B(当然要求A的列数等于B的行数).例如:A-matrix(1:12,nrow=4,ncol=3,byrow=T)B-matrix(c(1,0),nrow=3,ncol=2,byrow=T)A[,1][,2][,3][1,]123[2,]456[3,]789[4,]101112B[,1][,2][1,]10[2,]10[3,]10A%*%B[,1][,2][1,]60[2,]150[3,]2408[4,]33010.1.4数据框数据框是R软件的一种数据结构.它通常是矩阵形式的数据,但矩阵各列可以是不同类型的.数据框每列是一个变量,每行是一个观测.例如air-data.frame(data=c(1.13,1.16,1.18,1.19),+condition=c(Fog,Clear,Cloud,Fog),+Oxon=c(10.3,NA,36.4,13.6))airdataconditionOxon11.13Fog10.321.16ClearNA31.18Cloud36.441.19Fog13.6一个矩阵可以用data.frame()转换为一个数据框,如果它原来有列名,则其列名被作为数据框的变量名,否则系统自动为矩阵的各列起一个变量名.如A-matrix(1:12,nrow=4,ncol=3,byrow=T)data.frame(A)X1X2X3112324563789410111210.1.5程序控制结构R是一个表达式语言,其任何一个语句都可以看成是一个表达式.表达式之间以分号分隔或用换行分隔.表达式可以续行,只要前一行不是完整表达式(比如末尾是加减乘除等运算符,或有未配对的括号)则下一行为上一行的继续.若干个表达式可以放在一起组成一个复合表达式,作为一个表达式使用.组合用大括号表示,如:{9x-15x}R语言也提供了其它高级程序语言共有的分支、循环等程序控制结构.分支结构包括if结构:if(条件)表达式1或if(条件)表达式1else表达式2其中的“条件”为一个标量的真或假值,表达式可以是用大括号包围的复合表达式.有else子句时一般写成:if(条件){表达式组……}else{表达式组………}这样的写法可以使else不至于脱离前面的if.注意“&&”表示“与”,它是一个短路运算符,即第一个条件为假时就不计算第二个条件.在条件中也可以用“||”(两个连续的竖线符号)表示“或”,它也是短路运算符,当第一个条件为真时就不再计算第二个条件.循环结构中常用的是for循环,是对一个向量或列表的逐次处理,格式为“for(nameinvalues)表达式”,如若要计算1到5这五个数的和:s-0;x-1:5for(iin1:5){+s-s+x[i]+}s[1]15当然,如果只是要求各元素的和,只要调用sum(x)即可.从这里我们也可以看出,显式的循环经常是可以避免的,利用函数对每个元素计算值、使用sum10等统计函数往往可以代替循环.因为循环在R中是很慢的,所以应尽可能避免使用显式循环.10.1.6函数R软件允许用户自己创建模型的目标函数,有的R函数存储为特殊的内部形式,并可以被进一步的调用.这样在使用时可以使语言更有利、更方便,而且程序也更美观.学习写自己的程序是用户学习使用R语言的主
本文标题:R软件在概率论与数理统计中的应用解读
链接地址:https://www.777doc.com/doc-6325024 .html