R语言:逆变换法生成随机数
逆变换法生成随机数:
- 一、概念解释
- 1、PDF
- 2、PMF
- 3、CDF
- 二、连续型情况举例
- 三、离散型情况举例
一、概念解释
1、PDF
probability density function 概率密度函数,简称密度函数。连续型随机变量的概率密度函数是一个描述这个随机变量的输出值,在某个确定的取值点附近的可能性的函数
借陈希孺老师所著的《概率论与数理统计》中关于概率密度函数的释义以方便理解概念。
2、PMF
probability mass function 概率质量函数, 概率质量函数是离散随机变量在各特定取值上的概率(就是离散型随机变量的分布律)
例如,抛掷硬币,若为正面记X = 1,反面记x = 0,则概率质量函数为:
3、CDF
cumulative distribution function 累积分布函数 ,也叫分布函数,是概率密度函数的积分
常用积分表
二、连续型情况举例
步骤:
1、设U = 概率密度函数积分 = 分布函数
2、分布函数求逆,得到x = 式①
3、构造符合均匀分布的随机数 U = runif(num, start, stop)
4、随机数U代入step2中式①,即可得到对应随机数
5、验证生成的x是否符合预期: 绘制x的频数直方图,绘制总体密度函数曲线
利用逆变换法生成1000个服从fx(x)=3x2,0<x<1f_x(x) = 3x^2 ,0 < x < 1fx(x)=3x2,0<x<1的随机数。
代码实现:
U = runif(1000,0,1) # 生成1000个服从[0,1]均匀分布的随机数
x = U^(1/3) # 式① 生成服从题目分布的随机数
hist(x, prob = TRUE) # 绘制生成随机数x的频数直方图
xx = seq(0,1,0.1)
lines(xx ,3 * xx ^ 2) # 绘制密度函数,与频数分布直方图的趋势作比较
部分结果展示:
验证结果展示:
练习:
利用逆变换法生成服从fx(x)=x−28,2<x<6f_x(x) = \frac{x-2}{8}, 2 < x < 6fx(x)=8x−2,2<x<6的5000个随机数。
代码实现:
U = runif(5000,0,1) # 生成1000个服从[0,1]均匀分布的随机数
x = 4*sqrt(U)+2 # 式① 生成服从题目分布的随机数
hist(x, prob = TRUE) # 绘制生成随机数x的频数直方图
xx = seq(2,6,0.1)
lines(xx ,(xx-2)/8) # 绘制密度函数,与频数分布直方图的趋势作比较
三、离散型情况举例
离散型生成随机数的四种方法:
① R语言内置函数
② sample函数
③ 逆变换法
④ 接受拒绝法
步骤:
1、对照列联表写分布函数
2、分布函数求逆
3、构造符合均匀分布的随机数 U = runif(num, start, stop)
4、随机数U代入step2中式①,即可得到对应随机数
5、验证生成的x是否符合预期: 制表统计看频率
利用逆变换法生成1000个服从下列概率质量函数的随机数。
X | 0 | 1 | 2 | 3 | 4 |
---|---|---|---|---|---|
P | 0.1 | 0.2 | 0.2 | 0.2 | 0.3 |
代码实现:
n = 1000
x = seq(0, 4, 1)
p = c(0.1, 0.2, 0.2, 0.2, 0.3)
FF = c(0,cumsum(p)); FF #累加得到分布函数
y1 = integer(n) # 逻辑向量
m = length(FF)
u = runif(n) # 生成1000个服从[0,1]均匀分布的随机数
for(i in 1:m-1){ # u代入逆运算的结果ind = u>FF[i] & u<=FF[i+1]; # or = | and = &y1[ind]=x[i];
}; y1
table(y1)/n # 频数验证
部分结果展示:
验证结果展示:
R语言:逆变换法生成随机数相关推荐
- R语言处理数据——生成随机数
生成随机数 #如下连续生成16组1:3的随机不重复整数(每次3个),存储至repl中: repl <- NULL for(x in 1:16) {repl <- c(repl, sampl ...
- matlab逆变换法产生随机数_信号处理——生成给定分布随机数
作者:桂. 时间:2017-03-12 19:31:55 前言 本文是曲线拟合与分布拟合一文的插曲,进行分布拟合时,碰到一个问题是,如何指定分布的随机数呢?本文主要包括: 1)连续型随机数: 2)离 ...
- R语言使用:符号生成向量数据、使用pie函数可视化饼图、自定义设置饼图色彩为彩虹色、使用box函数在当前图上加个方框
R语言使用:符号生成向量数据.使用pie函数可视化饼图.自定义设置饼图色彩为彩虹色.使用box函数在当前图上加个方框 目录 R语言使用:符号生成向量数据.使用pie函数可视化饼图.自定义设置饼图色彩为 ...
- R语言使用knitr生成机器学习模型全流程步骤示例:knitr与自动化结果报告、knitr常用参数
R语言使用knitr生成机器学习模型全流程步骤示例:knitr与自动化结果报告.knitr常用参数 目录
- R语言主成分分析法笔记
01.什么是主成分分析法 简要概括主成分分析法的作用:把能反映某种特征的很多指标汇总成一个指标. 举例而言,一家银行的流动性可以体现在它的现金资产占比和定期存款占比上-- 银行A的现金资产占比是0.1 ...
- R语言:作业六(逆变换法生成随机变量;线性同余发生器LCG的编写)
1. 用逆变换法编写产生下述随机变量的程序: X 0 1 p 0.4 0.6 模拟10000次,并确定随机变量的值0的比例. f <- function(n){{x <- rep(0,n) ...
- 逆分布函数法生成随机数(以指数分布和双指数分布为例)
前面在"C++均匀分布U(0,1)的随机数中"讲了如何在C++中生成均匀分布随机数,同时也提到了均匀分布的是其他随机数的生成基础,这里就来看看均匀分布在其他随机数生成中的重要作用吧 ...
- C语言详解生成随机数的过程,time函数、时间戳timer、rand函数和srand函数,附猜数字小游戏
第十一篇:随机数详解 一.准备工作(预备知识) 1.1.生成伪随机数(函数rand) 1.2.伪随机数"变成"随机数(函数time) 1.3.生成确定范围随机数 二.练手随机数经典 ...
- 梅森旋转产生随机数c语言实现,C++生成随机数的实现代码
C风格 C为随机数提供的工具是rand.srand和RAND_MAX,定义在中. srand为rand设置种子,如果不设置,相当于调用过srand(1).rand产生伪随机数,其范围为0到RAND_M ...
最新文章
- java中重载与重写的区别
- Linux nethack
- 误删Windows文件后恢复技巧
- 秀,用NBA球员数据学透K-Means聚类
- 二三星缩水软件手机版_还在抱怨三星手机不好用?用这些软件立马解决
- POJ-3154-Graveyard
- 搞不定这三大难题,根本学不会Python,别不信!
- mysql基本sql语句总结(一)
- 使用 Python SimpleHTTPServer 快速共享文件
- java nio 心跳包_请问Java中Socket的心跳包如何实现?
- 457.环形数组循环
- python计算器代码,Python实现两款计算器功能示例
- 春节假期,把“电影院”搬回家,泰捷WEBOX T1S 投影仪全面评测
- VSCode 使用 minify 手动压缩JS, CSS, HTML
- 【学习笔记】使用OpenSSL生成CA证书-配置Nginx代理服务器使用HTTPS协议
- PHP网站(Drupal7)响应过慢之“Wating(TTFB)时间过长”
- kernel启动流程-head.S的执行_3.preserve_boot_args
- 10分钟白嫖我的常用的在线工具网站清单
- mysql rand_mysql的rand函数
- cmd命令行远程连接 CentOS 服务器