统计模拟与R有关资料知识题目解析.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《统计模拟与R有关资料知识题目解析.ppt》由会员分享,可在线阅读,更多相关《统计模拟与R有关资料知识题目解析.ppt(162页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、统计模拟与,主讲: 朱 强 理学院,QQ群: 6052759 E-Mail:qiang_,Simulation and R,课程要求,1.本课程上机实习3-4次 2.每次上机需要完成一次实验并提交 3.本课程怎么考试? 4.总评=考勤+实验作业+考试成绩,主要内容,1.R软件介绍 2.R统计分析 3.统计模拟介绍,教材和主要参考书籍,1、肖枝洪、朱强著, 统计模拟及其R实现, 武汉大学出版社,2010,2、Sheldon.M.Ross, Simulation,(3nd), Elsevier,2002,3、王兆军,陈广雷,邹长亮译,统计模拟(第4版), 人民邮电出版社,2007.,4、薛毅,陈立
2、萍,统计建模与R软件, 清华大学出版社,2006.,第一篇:R介绍,R是 一个开放(GPL)的统计编程环境 一种语言,是语言(由ATsexf 1 M F M M F Levels: F M 函数factor()用来把一个向量编码为一个因子,一般形式为 factor(x,levels=sort(unique(x),na.last=TRUE),labels, exclude=NA,ordered=FALSE) is.factor()检验对象是否是因子,as.factor()把向量转化为因子。levels()可以得到因子的水平 sex.level=levels(sexf);sex.level 1”F
3、” “M” 对因子向量可用table()统计各类数据的频数。 sex.tab=table(sexf);sex.tab,2.tapply()函数 例子:知道5位学生的性别,还知道这5位学生的身高,分组求身高的平均值 height=c(174,165,180,171,160) tapply(height,sex,mean) 1 F M 162.5 175.0 tapply() 的一般形式为 tapply(x,INDEX,FUN=NULL,simplify=TRUE) x是一对象,通常为一向量,INDEX是与X有同样长度的因子,FUN是要计算的函数 3.gl()函数 gl()可以方便地产生因子, g
4、l(n,k,length=n*k,labels=1:n,odered=FALSE) n为水平数,k为重复的次数,length为结果的长度,labels为n维向量,表示因子水平,ordered是逻辑变量,表示是否为有序因子,缺省值FALSE gl(2,3) gl(2,1,6),六、列表(list)和数据框(data.frame) 1、列表的构造 red=list(name=“黎明”,age=30,scores=c(85,76,90) rec $name 1 黎明 $age 1 30 $scores 1 85 76 90,列表元素可用”列表名下标”引用 rec2 130 rec32 但列表不同于向
5、量,每次只能引用一个元素,如rec1:2 是不允许的,对连续型变量产生因子,或分类 age- runif(100)*50 table(cut(age,c(0,10,20,30,40,50) (0,10 (10,20 (20,30 (30,40 (40,50 27 20 17 19 17,注意:”列表名下标”或”列表名下标范围”的用法是允许的,但与前面的含义不同,它还是一个列表 若指定了元素的名字,则引用列表元素还可以用它的名字作为下标 “列表名“元素名”或者“列表名$元素名” rec“age” rec$age 2、列表的修改 rec$name=“张三” rec$age=list(20,32,5
6、8) 可重新添加一些到列表中 rec$sex=“男” rec6=161 第5号元素没定义,所以值是”NULL”,若rec是一个向量,则空元素为”NA” 列表之间还可以连接起来, List.ABC=c(list.A,list.B,list.C),3.数据框 数据框通常是矩阵形式的数据,但矩阵各列可以是不同类型。数据框每列是一个变量,每行是一个观测。 (1)生成数据框 一般可以把数据框看作一种推广了的矩阵,它可用矩阵形式 表示,数据框可以用data.frame()函数生成,用法与list()函数相同 ls()#列出工作空间你定义的所有变量 str(x)#给出对象x的一些信息,d=data.fram
7、e(name=c(李明,张聪,王建),age=c(30, 35,28),height=c(180,162,175) d name age height 1 李明 30 180 2 张聪 35 162 3 王建 28 175 可以将列表转化为一个数据框:如比较他们之间的区别 d1=list(name=c(李明,张聪,王建),age=c(30, 35,28),height=c(180,162,175) as.data.frame(d1),(2)数据框的引用 引用数据框元素的方法与引用矩阵元素的方法相同。 d1:2,2:3 数据框的各变量也可用按列表引用(用双括号或$引用) d“age” 1 30
8、35 28 d$height 1 180 162 175 数据框的各行也可以定义名字,用rownames属性定义。 names(d) 1 name age height rownames(d)=c(one,two,three) rownames(d) 1 one two three,(3)attach()函数 数据框的主要用途是保存统计建模的数据。调用数据框的变量像以前d是不方便的,R提供了函数attach()可以把变量调入内存。 attach(d) r=age/height#此时age,height是可以利用的 但r的值不会进入数据框d,若想把刚才r当作新的数据框的变量 d$r=age/we
9、ight d name age height r one 李明 30 180 0.1666667 two 张聪 35 162 0.2160494 three 王建 28 175 0.1600000 detach(d)取消连接,(4)列表与数据框的编辑 可用函数edit()对列表或者数据框进行编辑 newd=edit(d) 当然也可对向量,数组,矩阵类型的数据进行修改和编辑. Fix 用函数merge(x, y, .) 对两个数据框合并成一个 可查看帮助.?merge,七、输入输出 1.输入 (1)read.table()等相关函数 read.table()函数是读表格形式的文件,若”班级”数据
10、已输入到一个纯文本文件”cjb.txt”中,假设存储在c:/cjb.txt, 其格式如下:,学号 姓名 平时 其中 期末 总评 07*001吴蒙蒙85666469 07*002高旭95809491 07*003李楠92785567 07*004赵利冲78484040 07*005何耀龙89585160 07*006何星85448174 07*007唐佳征95735365 07*008程西平96868990 07*009陈茂琴95846977 07*010程长久94798284 07*011王锋93748685 07*012何福顺90825366 07*013罗玲96939092 07*014刘
11、卿卿97679489 07*015张晓芳93728282 072301016杨乐遥88615060 072301017沈亮95415460 072301018高晶98769189 072301020郭慧93918387 072301021陈灿92766975 072301022李婷90766975 072301023陈元俊94745969 072301024谭海梅95646370 072301025张亚琴95898588 072301026胡阳98929897 072301027张冲92606569 072301028位会敏95928287 072301029胡红96789089 072301
12、030岳鑫璐96607979 072301031李欢欢988510097 072301032陈龙龙92656470 072301033朱盼88556668,读入格式为: cjb=read.table(c:/cjb.txt,header=TRUE) cjb is.data.frame(cjb) 1 TRUE header=TRUE表示第一行读入的是变量名,默认是 header=FALSE,即自动会添上列名.具体用法可见 帮助.?read.table d=read.csv(txt.csv)#读逗号分隔的文本文件 d=read.csv2(“txt.csv”)#读分号分隔的文本文件, 逗号代替小数点
13、d=read.delim(foo.txt)#读制表符分隔的文件 d=read.delim2(“foo.txt”)#读制表符分隔的文件, 逗号代替小数点 d=read.fwf(txt.fwf)#读固定宽的文件,D=readLines(“a.txt”)#每行有不同的结构 readLines(con = stdin(), n = -1L, ok = TRUE, warn = TRUE, encoding = unknown) cat(TITLE extra line, 2 3 5 7, , 11 13 17, file=ex.data, sep=n) readLines(ex.data, n=-1)
14、 unlink(“ex.data”) # 删除文件,R中一般不能直接读xls文件,可先转换为csv (2)scan()函数 scan()函数可直接读纯文本文件数据和直接从屏幕上 输数据 x=scan() 1: 2 4 4.2 5 5: Read 4 times x 1 2 4 4.2 5 假设有10名学生的体重数据已输入文件”weight.txt”, 格式为45 63.5 32.5 67.2 77.5 55 54 49 62 70 w=scan(c:/weight.txt),假设weight.txt中,奇数是女性体重,偶数是男性体重, 即数据中有不同的属性 wfm=scan(c:/weight
15、.txt,list(F=0,M=0) Read 5 records 将数据读入,并以列表的方式赋给变量wfm wfm $F 1 45.0 32.5 77.5 54.0 62.0 $M 1 63.5 67.2 55.0 49.0 70.0 其它数据格式的读入可以参见帮助文档中的R数据输入 输出.,2.输出 直接输入变量名即可输出 x=1:5 x 1 1 2 3 4 5 用print(x)与上式是等价的,里面有些参数,digits指定 每个数输出的有效数字位. options(digits=3) 1/3 1 0.333 write.table#输出数据框到文件 write.csv write.cs
16、v2 Write.matrix#输出矩阵到文件,需要加载包MASS,cat()函数也可用来输出,但它可以把多个参数连接起来 再输出(类似于paste()的功能) cat(i=,i,n)#注意为什么要用”n” cat(c(AB,C),c(E,F),n,sep=) ABCEF cat()还可以指定一个参数”file=文件名”,把结果写到 指定的文件中 cat(i=,1,n,file=c:/result.txt) 若指定的文件存在,则原内容被覆盖,但加上 append=TRUE可以不覆盖原文件而是在末尾附加.,八 程序控制结构,1.分支结构,if(条件) 表达式,或 if(条件)表达式1 else
17、表达式2 例如: if(any(x=0)y=log(1+x) else y=log(x),还有switch()函数,可参见讲义.,2.循环结构,(1)for循环,for(name in expr1)expr2 例如: 构造一个4阶Hilbert矩阵 n=4;x=matrix(0,nrow=4,ncol=4) for(i in 1:n) for(j in 1:n) xi,j=1/(i+j-1) , x ,1 ,2 ,3 ,4 1, 1.0000000 0.5000000 0.3333333 0.2500000 2, 0.5000000 0.3333333 0.2500000 0.2000000
18、3, 0.3333333 0.2500000 0.2000000 0.1666667 4, 0.2500000 0.2000000 0.1666667 0.1428571,(2)while循环,while(condtion)expr 当条件condtion成立,则执行表达式expr.例如编写一个计算100以内的Fibonacci数 f=1;f2=1;i=1 while(fi+fi+1f 11 1 2 3 5 8 13 21 34 55 89 144 13 233 377 610 987,(3)repeat循环,repeat expr repeat循环依赖break语句跳出循环.例如用repea
19、t循环编写一个计算100以内的Fibonacci数 f=1;f2=1;i=1 repeat fi+2=fi+fi+1 i=i+1 if(fi+fi+1=1000)break f 11 1 2 3 5 8 13 21 34 55 89 144 13 233 377 610 987,三个例子 myfn1- function(obs=10,n=100) x- rep(NA,100) for (i in 1:n) tmp - runif(obs) xi - mean(tmp) list(mn=mean(x),std=sd(x) Myfn1(),myfn2- function(obs=10) x - r
20、unif(obs) while(mean(x) 0.45) obs - 2*obs x - runif(obs) list(mn=mean(x),std=sd(x),obs=obs) myfn2(),myfn3= 0.45) break obs - 2*obs list(mn=mean(x),std=sd(x),obs=obs) myfn3(),九 编写函数,函数是一系列语句的组合,在R中可以写出自己的函数 形式为:变量名function(变量列表)函数体 函数的调用:变量名(变量值) 函数可以递归引用,但不提倡! 例如: f=function(x) x+exp(x) f(3.5) 例子 使用
21、gamma函数求n!factorial = function(n) + if (n=0) gamma(n+1) + else print(“Please input a positive integer!) + factorial(6) factorial(-6) Choose(10,5) #求组合值,fzero=function(f,a,b,eps=1e-5) if(f(a)*f(b)0) list(fail=“finding root is fail!”) else repeat if(abs(b-a)eps)break x=(a+b)/2 if(f(a)*f(x)0)b=x else a
22、=x list(root=(a+b)/2,fun=f(x) ,例:编写一个用二分法求非线性方程根的函数,并求方程 在区间1,2内的根,精度要求,用刚才编写的函数计算上述方程的解 f=function(x)x3-x-1 fzero(f,1,2) $root 1 1.324718 $fun 1 -1.405875e-05,R软件提供了求一元方程的根的函数uniroot() uniroot(f,interval,lower=min(interval),upper=max(interval),tol=.Machie$double.eps0.25,maxiter=1000,.) uniroot(f,c(
23、1,2) $root 1 1.324718 $f.root 1 -5.634261e-07 $iter 1 7 $estim.prec 1 6.103516e-05,用于处理错误的函数 用于处理用户输入不正确的类型而可能出现的错误 warning() 若错误不严重以至影响整个计算 stop() 若错误可能导致计算中止 print() 显示必要的信息 formatC() 数值作为字符串输出 cat() 字符串联,可以插入n(换行)及t(tab键) paste() 字符粘贴(非字符型自动转换)例子:cat(R, is,a good, software.n) formatC(1/3, format
24、= f, digits = 4) formatC(1/3, format = e, digits = 4)paste(1:12) # 与as.character(1:12)等价paste(A, 1:6, sep = )paste(today is, date(),例.考虑某银行的存取系统. 设open.account()为存开户函数,deposit()为存款函数,withdraw()为取款函数, balance()为存取款平衡(余额)函数. 对于客户的存取过程如下:,open.account=function(total) list( deposit=function(amount) if(a
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 统计 模拟 摹拟 有关 资料 知识 题目 解析
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内