MCMC在金融工程中有着重要作用,它可以用来仿真产品价格分布以及波动,可以用来求解模型中的参数。Metropolis-Hastings算法是一种常用的MCMC算法,本文是我在使用MCMC时候的一些思考,和大家一起分享。阅读本文需要对MCMC有一定的认识,本文默认读者熟悉MCMC,并在此基础上对一些技术细节给出了自己的思考。文中算例采用R语言实现,每一个算例都非常简单,但是很具有代表性,如有不正确的地方,希望大家多多批评,多多指正。
0、Metropolis-Hastings算法回顾
算法的作用,是在已知某种概率密度函数(pdf)的情况下,生成一族服从这种概率密度函数的随机数。这里的概率分布函数应该是比较奇葩的,不然我们也不会用到MH算法。或者,是在已知某种函数的情况下,生成一族随机数,这族随机数的直方图的中点连线就是这个函数。说白了,这个函数就是非正则pdf。我这里说的pdf,可以是连续的,也可以是离散的。
转移核Q: 这个转移核的作用可以以某一个概率把i变为j,这个概率我们表示为Q(i,j)。例如某一个转移核能够以3/14的概率把7变成12.8,那么Q(7,12.8)=3/14。如果是离散的转移核,那我们很好理解,它可以是马尔科夫过程,Q就是马氏链的转移矩阵。如果是连续的转移核,那Q就应该是概率密度函数。
仿真目标P:算法的任务是生成一组随机数{
为了统一符号的需要,本文的Metropolis-Hastings算法(MH算法,henceforth)如下:
Step1:我们需要选取一个转移核Q,这个转移核的作用是输入数A的时候能够以一定的概率变为数B;
Step2:选取一个初始
Step3:把
Step4:生成一个随机数u~U(0,1),如果
那么
Step5:重复Step3-4,生成大量序列。
1、对(非正则)离散分布仿真,采用随机游走的转移核
假设我们要随机生成的随机变量X,需要满足如下的离散分布: