跳至内容
R
数据科学

蒙特卡罗方法简介

在本教程中,读者将学习蒙特卡罗方法及其在数据科学中的应用,如积分近似和参数估计。
Asael Alonzo Matamoros's photo
Asael Alonzo Matamoros
已更新 · 6分钟 阅读

使用 AI 探索

ChatGPTClaudePerplexity

创建您的免费账户

实践并学习路径你的进步。

使用 Google 继续
继续操作即表示您接受我们的《使用条款》和《隐私政策》,并同意您的数据存储在美国。

简介

数据分析过程中出现的两大类数值问题是优化问题和积分问题。对于给定模型,相关估计量并不总能通过解析方式计算,因此我们常常需要考虑数值解。规避该问题的一种方法是使用模拟。蒙特卡罗估计指的是从某个概率分布中模拟假想抽样,以计算该分布的重要量。

蒙特卡罗的基本思想是将积分写成关于某个概率分布的期望值,然后使用矩估计法进行近似($E[g(X)] \approx \overline{g(X)} = \dfrac{1}{n}\sum g(X_{i})$)。

如果我们有一个连续函数 $g(\theta)$,并希望在区间 (a,b) 上对其积分,我们可以将积分改写为关于均匀分布 $U \sim U[a,b]$ 的期望值,即:

function

使用矩估计法,我们的积分近似为:

function

其中

values

是从均匀分布中模拟得到的取值。

示例 1:指数函数的积分近似

1) 给定函数 $f(x)= e^{x}$,在区间 [3,5] 上的积分为:

function

该积分的蒙特卡罗近似为:

#       Declaring the desired function
f = function(x){return(exp(x))}
#       Declaring the absolute error function
error = function(x,y){return(abs(x-y))}
#       The actual integral answer
ans = exp(5)-exp(3)

set.seed(6971)
#       number of iterations
n = 10^2
#       simulated uniform data
x= runif(n,3,5)
#       MonteCarlo approximation
MCa= (5-3)*mean(f(x))
#       Approximation error
e = error(ans,MCa)

rest =  data.frame(n = n,MCapprox = MCa,error = e)
set.seed(6971)
for(k in 3:6){
  n = 10^k
  x = runif(n,3,5)
  mca = (5-3)*mean(f(x))
  rest = rbind(rest,c(n,mca,error(ans,mca) ) )
}

kable(rest,digits = 5,align = 'c',caption = "Integral Monte Carlo approximation results",
      col.names =c("Number of simulations","Monte Carlo approximation","Error approximation"))

广义蒙特卡罗近似

在一般情况下,给定分布 f 的积分近似为:

function

构造 $\widehat{I}$ 的算法可按以下步骤描述:

1) 从分布 f 生成 values

2) 计算:function

3) 得到样本均值:$$\overline{I} = \dfrac{1}{n}\sum_{k=1}^{n}\dfrac{g(\theta_k)}{f(\theta_k)}$$

在下一个代码块中,给出了简单的蒙特卡罗近似函数,以展示算法的工作方式,其中 a 和 b 为均匀分布的参数,n 为所需的模拟次数,f 为我们要积分的函数。

# The simple Monte Carlo function
MCaf = function(n,a,b,f){
x = runif(n,a,b)
MCa = (b-a)*mean(f(x))
return(MCa)
}

贝叶斯数据分析中的蒙特卡罗方法

贝叶斯数据分析的主要思想是使用贝叶斯推断方法来拟合模型(如回归或时间序列模型)。我们假设感兴趣的参数具有某个理论分布,该分布(后验)通过观测数据的分布(似然)以及关于参数的先验或外部信息(先验分布)利用贝叶斯定理进行更新。

$$p(\theta / X) \text{ } \alpha\text{ } p(X/\theta)p(\theta)$$ 其中:

$p(\theta/X)$ 为参数的后验分布

$p(X/\theta)$ 为观测数据的抽样分布(似然)。

$p(\theta)$ 为参数的先验分布。

贝叶斯方法中的主要问题是估计后验分布。马尔可夫链蒙特卡罗方法(mcmc)对后验分布进行采样,并使用蒙特卡罗方法近似期望、概率或分位数。

在接下来的两节中,我们给出两个示例,用于近似理论分布的概率和分位数。上述过程是贝叶斯方法中常用的方法论。

示例 2:Gamma 分布的概率近似

假设我们要计算随机变量 $\theta$ 落在 0 到 5 之间的概率 $P(0 < \theta < 5)$,其中 $\theta$ 服从参数 a = 2、b = 1/3 的 Gamma 分布($\theta \sim Gamma(a = 2,b = 1/3)$),则该概率为:

function

其中,当 $\theta$ 属于区间 [0,5] 时,$I_{[0,5]}(\theta) = 1$。蒙特卡罗近似的思路是统计落在区间 [0,5] 内的观测值个数,并将其除以模拟数据的总数。

set.seed(6972)
#       number of iterations
n = 10^2
#       simulated uniform data
x= rgamma(n,shape = 2,1/3)
#       MonteCarlo approximation
MCa= mean(x <= 5)
#       Approximation error
e = error(pgamma(5,2,1/3),MCa)

rest =  data.frame(n = n,MCapprox = MCa,error = e)

for(k in 3:6){
  n = 10^k
  x= rgamma(n,shape = 2,1/3)
  mca= mean(x <= 5)
 rest = rbind(rest,c(n,mca,error(pgamma(5,2,1/3),mca) ) )
}

kable(rest,digits = 5,align = 'c',caption = "Probability Monte Carlo approximation results",
      col.names =c("Number of simulations","Monte Carlo approximation","Error approximation"))

示例 3:正态分布的分位数近似

假设我们要计算服从均值 $\mu = 20$、标准差 $\sigma = 3$ 的正态分布的随机变量 $\theta$ 的 0.95 分位数($\theta \sim normal(\mu = 20,\sigma^{2} = 9)$),则 0.95 分位数为:

function

主要思路是找到使概率小于等于 0.95 的最大样本值;蒙特卡罗分位数近似可通过对模拟数据使用 quantile() 函数来估计。

set.seed(6973)
#       number of iterations
n = 10^2
#       simulated uniform data
  x= rnorm(n,20,3)
#       MonteCarlo approximation
MCa= quantile(x,0.95)
#       Approximation error
e = error(qnorm(0.95,20,3),MCa)

rest =  data.frame(n = n,MCapprox = MCa,error = e)

for(k in 3:6){
  n = 10^k
  x= rnorm(n,20,3)
  mca= quantile(x,0.95)
 rest = rbind(rest,c(n,mca,error(qnorm(0.95,20,3),mca) ) )
}

kable(rest,digits = 5,align = 'c',caption = "Quantile Monte Carlo approximation results",
      col.names =c("Number of simulations","Monte Carlo approximation","Error approximation"),row.names = FALSE)

讨论与结论

蒙特卡罗近似方法为积分近似提供了另一种工具,并且在贝叶斯推断中尤为关键,尤其当我们处理复杂精细的模型时。如同三个示例所示,蒙特卡罗方法能给出极好的近似,但要使近似误差接近于零,往往需要大量的模拟。

参考文献

1) Introducing Monte Carlo methods with R,Springer 2004,Christian P. Robert and George Casella。

2) Handbook of Markov Chain Monte Carlo,Chapman and Hall,Steve Brooks, Andrew Gelman, Galin L. Jones, and Xiao-Li Meng。

3) Introduction to mathematical Statistics,Pearson,Robert V. Hogg, Joseph W. Mckean, and Allen T. Craig。

4) Statistical Inference An Integrated Approach,Chapman and Hall,Helio S. Migon, Dani Gamerman, Francisco Louzada。

主题
R
数据科学