SPSS:这是一个很受欢迎的统计软件容易操作,输出漂亮,功能齐全,价格合理。对于非统计工作者是很好的选择。Excel:严格说来不是统计软件,但作为数据表格软件,必然有一定统计计算功能。多数装Office时没有装数据分析的功能,画图功能都具备(虽然不好看)。对于简单分析,Excel还算方便,但随着问题的深入,就不那么“傻瓜”,需要很麻烦地使用函数,甚至根本没有相应的方法了。SAS:这是功能非常齐全的软件;美国政府政策倾斜(“权威性”)许多美国公司使用。价格不菲,每年交费.即使赠送,条件苛刻尽管现在已经尽量“傻瓜化”,仍然需要一定的训练才可以进入。S-plus:这是统计学家喜爱的软件。功能齐全,图形漂亮有不断加入的各个方向统计学家编写的统计软件包。也可以自己加入算法.强大而又方便的编程功能,使得研究人员可以编制自己的程序来实现自己的理论和方法。它也在进行“傻瓜化”以争取顾客。但主要以其方便的编程为顾客所青睐。但是对于不会编程者,不那么“傻瓜”R软件:免费的,志愿者管理的软件。编程方便,语言灵活,图形功能强大有不断加入的各个方向统计学家编写的统计软件包。也可以自己加入自己算法的软件包.这是发展最快的软件,受到世界上统计师生的欢迎。是用户量增加最快的统计软件。对于一般非统计工作者来说,主要问题是它没有“傻瓜化”。•Minitab:这个软件是很方便的功能强大而又齐全的软件,也已经“傻瓜化”,在我国用的不如SPSS与SAS那么普遍。•Eviews:这是一个主要处理回归和时间序列的软件。•GAUSS:这是一个很好用的统计软件,许多搞经济的喜欢它。主要也是编程功能强大。目前在我国使用的人不多。•MATLAB:这也是应用于各个领域的以编程为主的软件,在工程上应用广泛。但是统计方法不多。使用傻瓜软件的问题…..•无法任意取出计算过程中产生的任何中间结果;只能输出软件规定的输出.•无法在中间插入任何算法.•无法实现软件所没有的计算.无法实现任何方法或计算方面的创新.•是输入输出皆有限制的黑盒子.•用语句的任何计算(即使1+1=2)都需类似八股文的“花架子”.搞统计是否不需要学习编程语言,可以不学习,如果你…•搞纯粹数学推导的,只搞“理论”,不面对数据,不用计算机•觉得岁数太大,学不会“非傻瓜”的计算•不想有创新,仅使用现成方法套用但如果你要创新…•你需要反复试验你的新方法•需要用各种数据来检验你的新方法•需要把你的方法和老方法进行比较•需要介绍自己的新方法•使用编程语言不可避免R软件•R免费资源公开(不是黑盒子,也不是吝啬鬼)•R可以在UNIX,Windows和Macintosh运行.•R有优秀的内在帮助系统.•R有优秀的画图功能•学生能够轻松地转到商业支持的S-Plus程序(如果需要使用商业软件)•R语言有一个强大的,容易学习的语法,有许多内在的统计函数.•通过用户自编程序,R语言很容易延伸和扩大.它就是这样成长的.•R是计算机编程语言.类似于UNIX语言,C语言,Pascal,Gauss语言等.•对于熟练的编程者,它将觉得该语言比其他语言更熟悉.•而对计算机初学者,学习R语言使得学习下一步的其他编程不那么困难.•那些傻瓜软件(SAS,SPSS等)语言的语法则完全不同.R的历史•S语言在1980年代后期在AT&T实验室开发.•R项目由Auckland大学统计系的RobertGentleman和RossIhaka于1995年开始的.•它很快得到广泛用户的欢迎.目前它是由R核心发展团队维持;它是一个由志愿者组成的工作努力的国际团队下载R软件一.R软件的使用1.基本语法2.向量、矩阵3.list与data.frame4.读写数据文件5.控制语句与自定义函数二.数据描述性分析1.分布2.统计量3.一维数据的统计图形4.多维数据的图形表示R软件三.回归分析四.判别分析五.聚类分析六.主成分分析基本语法1.变量使用即定义,变量名区分大小写,可用中文命名变量赋值可采用4种形式:=,-,-,assign()变量类型自动由变量赋值确定。#注释符号,分号;语句连接符例子:a=10a-1010-aassign(“a”,10)A=10A-1010-Aassgin(‘ab’,200)中国=“中华人民共和国”#生成字符串变量assign(“中国”,“中华人民共和国”)a=10;A=10;a;A2.算术运算符:+,-,*,/,^(乘方),%%(模),%/%(整除)3.常用的数学函数有:abs,sign,log,log2,log10,sqrt,exp,sin,cos,tan,acos,asin,atan,cosh,sinh,tanh4.查看帮助,例如:help(round),?abs向量、矩阵1.向量(一维数组,下标从1开始)a=c(d1,d2,d3,…)间隔为1的等差序列:a:b指定间隔的等差序列:seq(from,to,by)seq(length=,from=,by=)重复函数:rep(vec,times)rep(vec,times,len=,each=)a=c(3,5,8,10)a=1:10;b=seq(1,10,2);c=rep(a,2,each=3)a=seq(-pi,pi,0.2)随机向量rnorm(10)#10个服从标准正态分布的随机数z=1:5z[7]=8;z[1]12345NA8#缺失数据NAz[c(1,3,5)]=1:3;z[1]12243NA8z[is.na(z)]=0#函数is.na()判断数据是否缺失,将其为真的赋为0z[z3]#z中小于3的元素z[(length(z)-1):length(z)]#最后二个元素.z[-c(1,3)]#去掉第1、3元素.x=rnorm(10)sort(x)order(x)2.矩阵(二维数组)及多维数组matrix(data=NA,nrow=1,ncol=1,byrow=FALSE,dimnames=NULL)byrow=TRUE以行序放置,(默认FALSW,以列序)array(data=NA,dim=c(),dimnames=)a=c(1,2,3,4,5,6,7,8,9,10)b=matrix(data=a,nrow=5,ncol=2,byrow=TRUE)c=array(data=1:12,dim=c(2,3,2))3.向量和数组/矩阵的转化只要定义向量的维数即可实现向量和数组转化例如:c=1:12;a=matrix(c,nrow=2,ncol=6)dim(c)=c(3,4);A=diag(c(1,4,5))#以向量为对角元生成对角矩阵a=diag(A)#获取矩阵的对角元b=as.vector(c)d=rbind(a,a)#行合并,要求列数相等e=cbind(a,a)#列合并,要求行数相等4.维数问题dim()#获得维数,返回向量nrow(),ncol()#获得行数和列数rownames(),colnames()#访问各维名称x=matrix(rnorm(24),4,6)x[c(2,1),]#第2和第1行x[,c(1,3)]#第1和第3列x[2,1]#第[2,1]元素x[x[,1]0,1]#第1列大于0的元素x[,-c(1,3)]#没有第1、3列的x.x[-2,-c(1,3)]#没有第2行、第1、3列的x.5.基本矩阵运算矩阵间四则运算:+,-,*,/分别是对应元素的四则运算向量矩阵间:向量按列匹配与矩阵运算例如:A=matrix(1:6,nrow=3)B=matrix(10:15,nrow=3)C=c(100,200)则:A+BA*BA+C1117105210120413192270102205152136901032066.矩阵运算转置t(mat)行列式det(mat)逆矩阵solve(mat)特征eigen(mat)#返回列表(values,vectors)乘法A%*%B向量内积/外积x%*%y,x%o%y(笛卡尔积)生成对角diag(Vec)取对角diag(mat)奇异值分解svd(mat)mat=UDV’得到列表(d,u,v)qr分解qr(mat)Choleski分解chol(mat)列表和数据框1.列表是一种特殊的对象集合,各元素类型任意生成:list(name1=value1,…,namen=valuen)访问/修改:对象名[[下标]]或对象名$nameistu=list(age=10,name=“Tom”,interests=c(“swimming”,”drawing”))stu[[2]]stu$namestu$name=“john”names(stu)#得到所有的变量名2.数据框是R的一种数据结构,以矩阵形式保存数据各列类型可以不同,每列为一变量,每行为样品各列长度相等生成:data.frame()stu=data.frame(name=c(“john”,”wuji”),age=c(30,32))x=data.frame(matrix(1:6,nrow=2))names(stu)#得到所有的变量名rownames(stu)#得到行名attach(x)#把数据框中的变量链接到内存中x=matrix(1:6,2,3)x=data.frame(x);xX1X2X311352246x$X2[1]34attributes(x)$names[1]“X1“X2“X3“$row.names[1]12“$class[1]data.framex=data.frame(id=101:120,score=round(rnorm(20,70,10)))x[seq(1,10,2),]x[order(x[[2]],decreasing=T),]x[x[[2]]60,]数据格式及I/O1.读表格形式文本文件read.table(file,header=FALSE,sep=““,…)header表示第一行是否有变量名,sep表示数据分割的字符D1=read.table(“e:\\test1.txt”,header=TRUE)D2=read.table(“clipboard”)3.计算的数据保存成文本文件或CSV文本文件write.table(data,file=“”)#纯文本格式例:将数据D1写入文件file_1.txtwrite.table(D1,file=“e:\\file_1.txt”)1.分支结构单分支:if(条件)语句if(条件){复合语句;}双分支:if(条件)语句1else语句2多分支:if()语句1elseif()语句2…elseif()语句nelse语句n+1switch:switch(表达式,list)返回list中下标与表达式对应的值例子:x=1;if(x0){a=10;b=10}else{a=20;b=20;}switch(x,1:5,100,20)#12345这三个构成列表list,返回list[x]控制语句2.循环结构for(nameinexpress)expr;#{expr_s}while(condition)expr;#{expr_s}repeat{exprs;if(达到中止条件)break}中止循环语句:break;跳空循环语句:next;例子:完成1到100的求和运算s1=0;j=1;k=1;s2=0;s3=0;for(iin1:100)s1=s1+i;#或者while(j=100){s2=s2+j;j=j+1;}#或者repeat{s3=s3+k;k=k+1;if(k100)break}fun-function(arg1,arg2,…){注意:最后一句表达式的值为返回值}例子:完成一维向量均值运算mymeanmymean=function(x){sum=0;n=length(x)for(jin1:n)sum=sum+x[j]sum=sum/n}meanofx=my