在探讨一些统计问题时, 人们有时候希望基于现有数据, 得到某些参数的概率密度分布。以便对参数的估计有更加深入的了解。此外,有时 模型过于相当复杂,精确的公式难以给出解析解, 人们希望用模拟的方法,基于现有的数据, 探讨某些参数的分布。 这里就必须要用到贝叶斯推断。
介绍贝叶斯推断, 则绕不过贝叶斯公式, 这是一个表示参数集theta以及数据y关系的概率公式。
根据贝叶斯公式
p(theta|y) = {p(y|theta)*p(theta)}/p(y)
其中theta为参数集, y为数据:
p(y|theta) 为给定参数下, 数据y出现的概率, 即Likelihood。
p(theta) 为参数集theta的先验分布,可假设为任何概率密度分布。
p(y)则称为normalizing constant, 一般并不关心其取值。
但是, 要获得给定数据下的参数的分布却并不容易,p(y)是极难获取的值。 幸运的是, 在统计学家发明了一种基于随机抽样的方法, 可以获得参数的近似分布, 而不必考虑p(y)。 这几种有两种最常用技术,都是基于蒙特卡罗马尔科夫链。
如果一个过程的参数, 在下一个时刻的状态仅与当前时刻有关, 而与之前的状态无关, 则该过程具有马尔科夫性。换句话说, 给定一个模型, 如果要估计的一系列参数theta1, theta2, theta3, …, theta0, 当前的取值为 theta1_present, theta2_present, theta3_present, …, thetaN_present, 下一个时刻的取值为theta1’, theta2’, theta3’, …, thetaN’, 每个参数在未来取值只与对应的参数在当前时刻的取值有关, 这样一个过程, 就是一个马尔科夫过程。 记录下所有时刻参数的变化, 就构成了马尔科夫链。现代统计学中,在求复杂贝叶斯积分时, 用到马尔科夫链以及一些随机抽样的方法, 获得参数的近似分布。 常用的有两种方法, 分别称为Gibbs Sampling和Metrapolis Sampling。
马尔科夫链每变化一次, 称为一代。在控制马尔科夫链的状态变化以及抽样函数设置合理的情况下, 蒙特卡罗马尔科夫链进行的代数越多, 则所得结果越接近最大似然估计的结果。
本文就尝试用后者对简单的线性回归进行参数估计。当然, 笔者作为初学者, 理解上难免出现错误, 还请各位读者指正。
以下是Metrapolis Hastings算法的简要介绍
(1)在参数空间指定一套参数的初始值,作为起始点。初始值可以随机给出。
(2)按照参数的先验概率分布, 在初始值的基础上, 每个参数进行一定量的随机变化,计算当前参数组合的概率密度。
(3)依据当前参数组合和起始点概率密度比值是否大于0到1之间的一个均匀分布的随机数来判断是否保留当前点。
(4)若当前点的概率密度大于该随机数,就称这种状态为接受状态,此时,在满足参数概率分布的前提下,继续随机抽取参数的组合,作为下一点,计算下一点的概率密度,并计算下一点概率密度和概率密度的比值,并继续循环。
(5)若当前点不能被接受,则继续在满足参数概率分布的前提下,继续生成随机数,作为新的参数组合,直到参数组合能够被接受为止。
更详细的理论介绍, 请参阅 http://cos.name/2013/01/lda-math-mcmc-and-gibbs-sampling/
以下用实例, 即用MCMC (基于Metropolis Hastings 抽样)估计线性回归模型的参数
1 |
|
图 4 参数的Bayes估计值与真实值的比较
参考:
- Florian Hartig / December 9, 2011 MCMC chain analysis and convergence diagnostics with coda in R https://theoreticalecology.wordpress.com/2011/12/09/mcmc-chain-analysis-and-convergence-diagnostics-with-coda-in-r/