Pular para o conteúdo principal

Introdução aos métodos de Monte Carlo

Neste tutorial, você vai aprender a metodologia de Monte Carlo e suas aplicações em ciência de dados, como aproximação de integrais e estimação de parâmetros.
Atualizado 17 de set. de 2026  · 6 min lido

Explorar com IA

ChatGPTClaudePerplexity

Introdução

Duas grandes classes de problemas numéricos que surgem em procedimentos de análise de dados são problemas de otimização e de integração. Nem sempre é possível calcular analiticamente os estimadores associados a um modelo, e muitas vezes recorremos a soluções numéricas. Uma forma de contornar isso é usar simulação. A estimação de Monte Carlo consiste em simular amostras hipotéticas de uma distribuição de probabilidade para calcular quantidades relevantes dessa distribuição.

A ideia básica de Monte Carlo consiste em escrever a integral como um valor esperado em relação a alguma distribuição de probabilidade e, em seguida, aproximá-la usando o estimador de momentos ($E[g(X)] \approx \overline{g(X)} = \dfrac{1}{n}\sum g(X_{i})$).

Se temos uma função contínua $g(\theta)$ e queremos integrá-la no intervalo (a,b), podemos reescrever nossa integral como um valor esperado de uma distribuição uniforme $U \sim U[a,b]$, ou seja:

function

Usando o estimador de momentos, a nossa aproximação da integral é:

function

Em que os

values

são valores simulados de uma distribuição uniforme.

Exemplo 1: aproximação de integral exponencial

1) Dada a função $f(x)= e^{x}$, a integral no intervalo [3,5] é:

function

A aproximação de Monte Carlo dessa integral é:

#       Declarando a função desejada
f = function(x){return(exp(x))}
#       Declarando a função de erro absoluto
error = function(x,y){return(abs(x-y))}
#       Valor exato da integral
ans = exp(5)-exp(3)

set.seed(6971)
#       número de iterações
n = 10^2
#       dados uniformes simulados
x= runif(n,3,5)
#       Aproximação de Monte Carlo
MCa= (5-3)*mean(f(x))
#       Erro de aproximação
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 = "Resultados da aproximação de integrais por Monte Carlo",
      col.names =c("Número de simulações","Aproximação de Monte Carlo","Erro de aproximação"))

Aproximação de Monte Carlo generalizada

De forma geral, a aproximação da integral para uma distribuição f qualquer é:

function

Um algoritmo para construir $\widehat{I}$ pode ser descrito pelos passos a seguir:

1) Gere values de uma distribuição f

2) Calcule: function

3) Obtenha a média amostral: $$\overline{I} = \dfrac{1}{n}\sum_{k=1}^{n}\dfrac{g(\theta_k)}{f(\theta_k)}$$

No próximo bloco, apresentamos a função simples de aproximação de Monte Carlo para mostrar como o algoritmo funciona, em que a e b são os parâmetros da densidade uniforme, n é o número de simulações desejadas e f é a função que queremos integrar.

# Função simples de Monte Carlo
MCaf = function(n,a,b,f){
x = runif(n,a,b)
MCa = (b-a)*mean(f(x))
return(MCa)
}

Métodos de Monte Carlo na análise bayesiana de dados

A ideia central da análise bayesiana de dados é ajustar um modelo (como regressão ou séries temporais) usando uma abordagem de inferência bayesiana. Assumimos que nossos parâmetros de interesse têm uma distribuição teórica; essa distribuição (posterior) é atualizada usando a distribuição dos dados observados (verossimilhança) e as informações prévias ou externas sobre os parâmetros (distribuição a priori) por meio do teorema de Bayes.

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

$p(\theta/X)$ é a distribuição a posteriori do parâmetro

$p(X/\theta)$ é a distribuição amostral dos dados observados (verossimilhança).

$p(\theta)$ é a distribuição a priori do parâmetro.

O principal desafio na abordagem bayesiana é estimar a distribuição a posteriori. Os métodos de Cadeias de Markov via Monte Carlo (mcmc) geram uma amostra da posterior e aproximam valores esperados, probabilidades ou quantis usando métodos de Monte Carlo.

Nas duas seções seguintes, trazemos dois exemplos para aproximar probabilidades e quantis de uma distribuição teórica. O procedimento apresentado é a metodologia usual empregada em uma abordagem bayesiana.

Exemplo 2: aproximação de probabilidade de uma distribuição gama

Suponha que queremos calcular a probabilidade de uma variável aleatória $\theta$ estar entre zero e 5, $P(0 < \theta < 5)$, onde $\theta$ tem distribuição gama com parâmetros a = 2 e b = 1/3 ($\theta \sim Gamma(a = 2,b = 1/3)$). Então, a probabilidade é:

function

Em que $I_{[0,5]}(\theta) = 1$ se $\theta$ pertence ao intervalo [0,5]. A ideia da aproximação de Monte Carlo é contar quantas observações pertencem ao intervalo [0,5] e dividir pelo total de dados simulados.

set.seed(6972)
#       número de iterações
n = 10^2
#       dados uniformes simulados
x= rgamma(n,shape = 2,1/3)
#       Aproximação de Monte Carlo
MCa= mean(x <= 5)
#       Erro de aproximação
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 = "Resultados da aproximação de probabilidade por Monte Carlo",
      col.names =c("Número de simulações","Aproximação de Monte Carlo","Erro de aproximação"))

Exemplo 3: aproximação de quantil de uma distribuição normal

Suponha que queremos calcular o quantil de 0,95 de uma variável aleatória $\theta$ que tem distribuição normal com parâmetros $\mu = 20$ e $\sigma = 3$ ($\theta \sim normal(\mu = 20,\sigma^{2} = 9)$). Assim, o quantil de 0,95 é:

function

A ideia principal é encontrar o maior valor amostral que gere uma probabilidade menor ou igual a 0,95. A aproximação do quantil por Monte Carlo é estimada usando a função quantile() sobre os dados simulados.

set.seed(6973)
#       número de iterações
n = 10^2
#       dados uniformes simulados
  x= rnorm(n,20,3)
#       Aproximação de Monte Carlo
MCa= quantile(x,0.95)
#       Erro de aproximação
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 = "Resultados da aproximação de quantil por Monte Carlo",
      col.names =c("Número de simulações","Aproximação de Monte Carlo","Erro de aproximação"),row.names = FALSE)

Discussões e conclusões

Os métodos de aproximação de Monte Carlo oferecem uma alternativa para aproximação de integrais e são essenciais na abordagem de inferência bayesiana, especialmente quando trabalhamos com modelos sofisticados e complexos. Como vimos nos três exemplos, os métodos de Monte Carlo fornecem ótimas aproximações, mas exigem um número muito grande de simulações para que o erro de aproximação fique próximo de zero.

Referências

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.

Tópicos
R
Ciência de dados
Relacionado
Clustering k-means

Tutorial

Introdução ao k-Means Clustering com o scikit-learn em Python

Neste tutorial, saiba como aplicar o k-Means Clustering com o scikit-learn em Python

Kevin Babitz

8 min

Tutorial

Tutorial de regressão linear no R

Neste tutorial, você aprenderá os fundamentos de um modelo estatístico muito popular: a regressão linear.

Eladio Montero Porras

15 min

Tutorial

Teste de qui-quadrado em planilhas

Neste tutorial, você aprenderá a realizar o teste qui-quadrado em planilhas.
Avinash Navlani's photo

Avinash Navlani

10 min

Tutorial

Introdução ao Q-learning: um tutorial para iniciantes

Aprenda o algoritmo de aprendizado por reforço sem modelo mais popular com um tutorial em Python.
Abid Ali Awan's photo

Abid Ali Awan

11 min

Tutorial

Introdução a modelos não lineares e percepções usando o R

Descubra as complexidades dos modelos não lineares em comparação com os modelos lineares. Saiba mais sobre suas aplicações, limitações e como ajustá-las usando conjuntos de dados do mundo real.

Somil Asthana

11 min

Tutorial

Tutorial do K-Means Clustering no R

Saiba o que é o k-means e descubra por que ele é um dos algoritmos de agrupamento mais usados na ciência de dados
Eugenia Anello's photo

Eugenia Anello

8 min

Ver MaisVer Mais