本文旨在介绍如何生成满足特定分布的随机数,并给出了每类方法的大致原理和实例

方法一,使用R语言概率函数

比较常见的发布如正态分布,t、F分布、二项分布等R都提供了直接的概率函数,下表展示了R中可用的单变量概率函数。
其中在分布名前加p累积分布函数(cdf),加d代表概率密度函数,加q表示分位数函数,加r表示抽样函数。

例如正态分布,相应操作如下

rnorm(100,0,1) #抽取100个服从N(0,1)的随机数
pnorm(0,0,1) #输出0.5
qnorm(0.5,0,1) # 输出0
dnorm(0,0,1) # 输出0.3989423

方法二,逆变化法

对于某些比较特殊的分布,R中可能没有提供现成的概率函数,例如双参数指数函数。此时可使用逆变换法生成符合该分布的随机数。逆变换法的基本原理是:对于连续性随机变量X,其分布函数F(x)也是一个随机变量,服从参数为0,1的均匀分布U(0,1),则依据概率论知识,若u~U(0,1),则F-1(u) ~F(x),F-1表示F的反函数。所以,逆变换法概括如下:

1.生成随机变量u~U(0,1)

2、计算F-1(u)

3、令x = F-1(u) ,得到服从目标分布的随机数

实例演示

用逆变换法生成1000个服从参数为1的指数分布随机数,并于R语言内置函数比较。

 n <- 1000k <- 1x <- numeric(n)while (k <= n){u <- runif(1,0,1) # 步骤1x[k] <- -log(1-u) / 1 #步骤2,3k <- k + 1}print(x)plot(quantile(x,seq(0,0.8,0.01)),qexp(seq(0,0.8,0.01)),xlab="逆变换法分位数",ylab= "实际分位数",main = "QQPlot",pch=16)abline(a=0,b=1)

通过逆变换法生成的随机数和实际分布随机数高度一致,说明方法是有效的。
离散发布下的随机数生成: 以上的逆变换法涉及到了求分布函数的反函数,此时自然衍生出一个问题,如果离散状况下分布函数不连续,则无法求得其反函数。回忆连续情形下的逆变换法的步骤2,其本质是求X的u分位数。分位数的基本意义见下,所以离散情形下的逆变换算法为:

1、生成随机变量u~U(0,1)

2、从支撑集中解出u分位数x,则x即为满足该分布的随机数


例如逆变换法生成100个服从参数为0.4的两点分布

n <- 100
p <- 0.4
u <- runif(n)
x <- as.integer(u>0.6)

方法三,接受拒绝法

在逆变换法中需要求累积分布函数的反分位数函数,而当随机变量的分布函数表达式比较复杂时很难求得其反函数,此时可以使用随机模拟的方式生成随机数。接受拒绝法本质是蒙特卡洛模拟,比如我们计算一个圆的面积可以随机生成在圆外接正方形内的点,当随机点的数量足够多时,圆的面积所占比例就等于在圆内随机点的比例。那么与其类似,如果把圆看出密度曲线,其基本原理就很清晰了,下图中红色的点落入了分布曲线下方,表示接受该点服从F(x),灰色的点在密度曲线外,表示拒绝。这是一个关于接受拒绝法的直观理解。不难看出u是产生于矩形内的随机点,其服从均匀分布,u被称为辅助分布,又称proposal分布。当然proposal分布并不一定要是均匀分布,此时形状将不是矩形。

接受拒绝法的步骤如下:

1、找到一个随机变量Y,其密度函数g(t)满足:f(t)/g(t)<c

2、生成一个随机变量服从U(0,1)

3、若u < f(y)/(cg(y)),则令x=y,否则返回2

例如生成100个参数为(2,2)的贝塔分布,取proposal分布为U(0,1),c=6,此时f(x)/cg(x) = x(1-x)

n <- 100
k <- 0
y <- numeric(n)
while (k < n){u <- runif(1)
x <- runif(1)  # 这里不能写成x<-u
if (x* (1-x) > u) {k <- k + 1
y[k] <- x
}
}

方法四,卷积与混合

这种方式一般用于模拟不常见的特定分布,例如多峰正态分布、混合伽马分布,使用场景有限,后续如有需要再补充。

方法五,生成多元分布

以上特定分布随机数生成方法均是单变量分布,若要生成多元分布要借助谱分解、Choleski分解或奇异值分解。下面演示生成生成100个均值向量为0,协方差矩阵如下的二元正态分布

sigma <- matrix(c(1,0.9,0.9,1),nc=2)
n <- 100; u <- 0
z <- matrix(rnorm(200),nc=2,byrow = T)
a <- chol(sigma) # Choleski分解
x <- z %*% a + matrix(rep(u,2*n),nc=2)
print(x)
print(cor(x))

其样本协方差矩阵如下,非常接近总体。

【随机数生成方法】各类随机数生成法及其R语言实现相关推荐

  1. 学习c语言的方法类比,类比法在C语言程序设计教学中运用.doc

    类比法在C语言程序设计教学中运用 类比法在C语言程序设计教学中运用 摘要:教学中方法得当,事半功倍.该文重点阐述了类比法在<C语言程序设计>教学过程中的应用,以函数实例介绍了方法的展开过程 ...

  2. r语言变量长度不一致怎么办_基础方法 | 数据管理:Stata与R语言的应用

    今天主要来带大家重温一下数据管理,并提供了Stata和R语言的操作. 数据管理的重要性 一些初学者可能意识不到数据管理的重要性,认为数据到手,软件打开,就也可以死出模型,这种想法是大错特错的 没有任何 ...

  3. 基于R语言、MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作

    详情链接 :基于R语言.MaxEnt模型融合技术的物种分布模拟.参数优化方法.结果分析制图与论文写作 内容介绍:  第一章 .理论篇 以问题导入的方式,深入掌握原理基础 : 什么是MaxEnt模型? ...

  4. R语言、MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作

    基于R语言.MaxEnt模型融合技术的物种分布模拟.参数优化方法.结果分析制图与论文写作技术应用 第一章.理论篇以问题导入的方式,深入掌握原理基础 什么是MaxEnt模型? MaxEnt模型的原理是什 ...

  5. r library car_基础方法 | 用R语言完成量化论文全流程示例!附超详细R脚本

    基础方法 ♪ Method R语言的优点 对于有一定数据分析基础的朋友们来说,要入门R语言并不是十分困难的.但是这毕竟是一门专业性很强的技术,我们当然希望投入精力掌握R语言之后能够得到相应的回报. 在 ...

  6. R语言学堂推文索引-2022年12月

    专注系列化.高质量的R语言教程 推文索引 | 联系小编 | 付费合集 更新时间: 2022.12.12 0 前言 1 数据处理通识专辑 1.1 R语言基础与base-R 1.2 数据处理与tidy-R ...

  7. R语言学堂推文索引-v5.9.1

    更新时间: 2022.9.8 0 前言 1 数据处理通识专辑 1.1 R语言基础知识 1.2 数据管理(初阶) 1.3 各类型数据处理方案 1.4 数据管理(高阶) 1.5 数据获取方法 2 制表与可 ...

  8. R语言学堂推文索引-2022年10月

    专注系列化.高质量的R语言教程 (本号已支持快捷转载,无需白名单即可转载) 更新时间: 2022.10.21 0 前言 1 数据处理通识专辑 1.1 R语言基础知识 1.2 base-r/tidy-r ...

  9. R语言学堂推文索引-v5.8.1

    更新时间: 2022.8.6 0 前言 从本版开始,索引做了如下一些调整: 转载其他公众号的推文也编入到索引中,并标记"[转]"字样: 来自付费合集的推文标记"[付费]& ...

最新文章

  1. 在现有K8S集群上安装部署JenkinsX
  2. boost::filesystem模块实现相对文件系统的测试程序
  3. PureXXX使用手记
  4. java编程学习方法_在线学习Java编程的最佳方法
  5. Android 自定义Application
  6. mysql 树排序_mysql按树深度排序
  7. linux系统可以ping,Linux系统禁ping
  8. QQ空间Python爬虫(3)---终章
  9. 【Java】Exception in thread main java.lang.Error: Unresolved compilation problem
  10. 从0搭建一个邮件服务器(用于邮件推送以及邮件群发业务)
  11. 小哥哥教你100%安装Win10专业版永久激活版(全网独一无二)
  12. w10恢复出厂设置_笔记本电脑w10怎么恢复出厂设置
  13. 【剑拔峨眉 团队裂变】蜜拓蜜教育高端特训营第二期即将上线
  14. Knowledge Distillation论文阅读之:综述文章:Knowledge Distillation
  15. 学习笔记五(蜂鸣器实验按键输入实验)
  16. 魏晋名士:骂人都不带脏字
  17. OpenRASP Java应用自我保护使用
  18. linux版高德导航软件下载,高德导航下载2021年最新版本_高德导航2021手机版下载-太平洋下载中心...
  19. 都市青年图鉴:那些喊着奋斗的人,后来怎样了
  20. list index out of range

热门文章

  1. iPhone5有几种颜色 iPhone5哪个颜色好?
  2. ASP.NET MVC 5 一 入门
  3. Open62541取消日志的打印
  4. GNSS/GPS 精度(RMS,CEP,Sigma) 与精度因子(DOP)
  5. 无限列表【UIGridView】应用示例
  6. Numpy入门(八):np.piecewise()用法
  7. verilog——74HC4511七段显示译码器
  8. 二十个面试常考模拟电路
  9. ajax的开发工具,Aptana(AJAX开发工具)
  10. 查询hba卡wwn号