统计模拟初步

前言

本篇文章简要介绍统计模拟(Simulation),也就是如何生成符合特定分布的随机数据的方法

如何获得随机数

在考虑如何生成符合特定概率分布的随机数据之前,我们先考虑最基本的一个问题——如何获得随机数,我们正式定义“获得随机数”这件事为
::: align-center
生成随机且服从U(0,1)均匀分布的数字序列
:::
均匀分布很容易解释,至于为何在[0,1)之间,我们在下一章中会详细说明

下面介绍两种经典的算法

平方取中法

平方取中法考虑从一个N位数开始,将其平方,取中间的N位数作为下一个随机数,并重复此过程

最开始的这个N位数X_n是人给出的,相同的这个数每次生成的随机数一定是唯一且相同的,它就是我们熟悉的随机种子(Seed),一般选一个大的质数

之后将取到的随机数前加0.便可以将其映射到[0,1)区间

这是最早的随机数生成算法之一,但是周期通常较短,质量不高

线性同余法

线性同余法考虑人为给定一个乘子a,增量c,模数m以及初始随机种子X_n,此后通过递推公式
::: align-center
X_{n+1}=(aX_n+c)\bmod{n}
:::
不断迭代获得一组随机数,之后计算X_{n}/m将其映射到(0,1]区间即可
在参数的选择上,模数m通常选择尽可能大的整数,乘子a应与m互质以使序列具有满周期,c通常选择与m互质的数

线性同余法曾是上世纪中叶左右的主流算法,计算简单,但选择不好的参数会导致序列相关性差、周期短,现代算法在其上进行改进(比如著名的MT19937梅森旋转算法)取得了更优的质量

如何获得符合分布的数据

在获得了[0,1)区间上的随机数后,我们便可以考虑“如何将随机数转换为符合概率分布的数据”这件事了,注意到我们的随机数均满足位于[0,1)区间内,而这正好是概率分布的区间,于是我们便成功建立了“随机数”与“概率”之间的关系

这里我们先只介绍最直观的逆变换采样法及其推广

逆变换采样(Inverse Transformation)

一个最简单的想法便是我们考虑对于给定的,已经生成好的随机数u\in[0,1],设目标概率分布的CDF为F(x),如果我们找到x,使得
::: align-center
F(x)=u
:::
那么这个x便是符合我们要求概率分布的随机变量X的一个样本
上式通常又写为x=F^{-1}(u),其中F^{-1}(u)是给定概率分布CDF的反函数

举个例子
::: align-center
生成符合U(a,b)分布的一组数据
:::
我们假设提前获得的随机数为u,均匀分布的CDF经求得为F(x)=\frac{x-a}{b-a},我们考虑解方程
::: align-center
\frac{x-a}{b-a}=u\Rightarrow x=a+(b-a)u
:::
F^{-1}(u)=a+(b-a)u,将我们的随机数u代入便可以得到符合U(a,b)的随机数了

广义逆变换采样

但是,狭义逆变换采样要求F(x)可逆,而对于一般的概率分布(比如正态分布)而言,其CDF一般不可逆/求逆复杂,于是我们引入广义逆变换采样

广义逆变换采样的公式为:
::: align-center
F^{-1}(u)=\inf\{x|F(x)\ge u\}
:::
也就是找到一个x,使得F(x)第一个大于等于u的值

举个例子,在”骰子点数“这个离散随机变量统计学问题上,它的CDF是一个阶梯函数

  • F(1)=\frac{1}{6}
  • F(2)=\frac{2}{6}
  • ...
  • F(6)=1

假若我们要生成一组符合骰子点数分布的随机数据(也就是随机变量X=1,2,3,4,5,6的一组样本),假若我们获得的随机数是0.3,那么显然F(2)是第一个值大于0.3的数,于是我们就可以获得一个样本x=2

而对于连续型随机变量,以标准正态分布N(0,1)为例,其广义逆累计分布函数通常写为\Phi^{-1}(0,1,\alpha),其值通常表示“第一个概率大于1-\alpha的数”,也就是我们常说的\alpha分位数,因此广义逆累计分布函数又称为分位函数

游客

全部评论 (0)

暂无评论,快来抢沙发吧~