用均匀分布随机变量生成泊松分布随机变量
时间:2020-07-14
本文章向大家介绍用均匀分布随机变量生成泊松分布随机变量,主要包括用均匀分布随机变量生成泊松分布随机变量使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
《R语言的科学编程与仿真》的第18章提到,所有的随机变量可以通过处理U(0,1)随机变量生成。该书在18.2里给出了一个模拟算法,具体内容摘抄如下:
假设X是在集合{0,1,...}取值的离散随机变量,累积分布函数是F,概率质量函数是p。下面一段代码给定一个均匀随机变量U并返回一个累积分布函数是F的离散随机变量X。
# given U~U(0,1) X<-0 while(F(X)<U){ X<-X+1 }
当这个算法结束时,我们有F(X)≥U和F(X-1)<U,因此
P{X=x}=P{F(x-1)<U≤F(x)}=F(x)-F(x-1)=p(x)
正是所需要的。
基于上述想法,这里用均匀分布来生成泊松分布,并画图比较。首先是写一个函数来产生由均匀分布生成的服从泊松分布的随机变量的取值,其次是进行重复试验,运用频率来估计随机变量取该值的概率,最后是画图进行比较。
#第一步,生成模拟函数 poiss_sim<-function(lambda){ x<-0 # 初始值定为0 px<-exp(-lambda) Fx<-px U<-runif(1) while(Fx<U){ x<-x+1 px<-px*lambda/x # 利用泊松分布的概率密度函数p(x)和p(x-1)存在的递归关系,简化运算 Fx<-Fx+px # Fx即为分布函数F(x) } return(x) } #第二步,重复试验,这里的实验次数N定为10000次 N<-1e4 lambda<-2 x<-replicate(N,poiss_sim(lambda=lambda)) y<-table(x) names<-as.numeric(names(y)) freq<-as.numeric(y) phat<-vector(length=length(names)) for(i in names){ phat[i+1]<-sum(x==i)/N } # 用频率估计概率 #第三步,和R自带的函数dpois()进行图形比较 par(las=1) plot(names,dpois(names,lambda=lambda),xlab='x',ylab='p(x)',type='h') points(names,dpois(names,lambda=lambda),pch=19) points(names,phat,pch=3) legend(6,0.25,legend=c('reality','simulation'),pch=c(19,3),bty='n',cex=2)
图形如下:
可以看出,真实值和模拟值还是很接近的!
原文地址:https://www.cnblogs.com/Enjoy-Respect-9527/p/13298389.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PS常用命令之文件和目录操作
- 快速掌握并发编程---synchronized篇(上)
- PS常用命令之WmiObject操作
- 『爬虫四步走』手把手教你使用Python抓取并存储网页数据!
- 快速掌握并发编程---synchronized篇(下)
- pivottablejs|在Jupyter中尽情使用数据透视表!
- 快速掌握并发编程---锁优化篇
- 弄懂这 6 个问题,拿下 Python 生成器!
- 快速掌握并发编程---线程阻塞与唤醒
- DOM优化之重绘和回流
- 本地储存之 Cookie、webStorage、indexedDB
- 使用DocumentFragment优化DOM操作
- 事件的防抖和节流
- JS事件循环之宏任务和微任务
- 小程序生成图片并保存