Primeira vez aqui? Seja bem vindo e cheque o FAQ!
x

O que é o método de Monte Carlo muito usado em estatística, finanças, economia, engenharia e várias outras áreas aplicadas?

+3 votos
1,907 visitas
perguntada Jul 18, 2015 em Estatística por danielcajueiro (5,251 pontos)  
Compartilhe

1 Resposta

+5 votos
respondida Jul 26, 2015 por danielcajueiro (5,251 pontos)  

Eu gosto de pensar no método de monte carlo como uma forma de você fazer o papel de Deus ou Natureza e ter controle sobre os processos geradores de dados.

No mundo real, quando enfrentamos um problema empírico precisamos (1) coletar dados que estão disponíveis em alguma base ou (2) fazemos experimentos para gerar esses dados. Um exemplo do primeiro caso é você acessar a base do Banco Central de bancos e coletar dados contábeis de bancos. Usando esses dados contábeis, você pode por exemplo estudar os determinantes de lucratividade dos bancos. Um exemplo do segundo caso é quando uma empresa farmacêutica deseja testar um novo medicamento e considerando uma determinada amostra aplica esse novo medicamento em parte da amostra e, a partir daí, infere a respeito do potencial do novo medicamento. Em ambos os casos, você não tem acesso ao processo gerador dos dados. Você tem apenas acesso as realizações de eventos que ocorreram em um determinado momento e pode fazer hipóteses a respeito das variáveis que você coletou (ou da base ou do experimento).

No caso do método de monte carlo, você controla o processo gerador de dados de algumas variáveis aleatórias e usa esses processos para estudar ou entender mais sobre algum fenômeno. Isso pode ser interessante para ganhar intuição sobre algum problema que pode depois ser resolvido analiticamente ou realmente usar as amostras coletadas para resolver o problema de interesse (quando não houver solução analítica).

Considere por exemplo o problema simples de calcular a relação entre as áreas de um quadrado e um círculo que está inscrito nesse quadrado e tangencia os quatro lados dele. Assuma por exemplo que o círculo tem raio \(r=1\) e, consequentemente, o quadrado tem lado \(l=2\). A solução desse problema é óbvia, pois sabemos que a relação entre as áreas é dada por

\[\frac{\pi r^2}{l^2}=\frac{\pi}{4}.\]

Será que podemos resolver esse problema usando o Método de Monte Carlo?

Sim! Note que podemos aproximar a solução respondendo uma pergunta relacionada: Dado que eu sorteio uma vetor de variáveis aleatórias \((x,y)\) uniformemente no intervalo \([-1,1]\times [-1,1]\), qual a probabilidade de ele cair dentro do círculo?

A solução completa desse problema está aqui. Note que o que fazemos nessa solução é uma das aplicações mais comuns do método de monte carlo que é aproximar integrais numericamente. Nesse caso, calculamos as áreas sobre as curvas formadas pelo círculo no intervalo \([-1,1]\) e pelas retas constantes 1 e -1 nesse mesmo intervalo. A convergência dessa solução é garantida pela Lei dos Grandes Números.

Veja outro exemplo agora em econometria. Suponha que você quer analisar o que ocorre com a distribuição do estimador de mínimos quadrados do coeficiente angular da reta dada por \(y=\alpha +\beta x + u\) quando aumentamos o tamanho da amostra.

Suponha que \(u\) é uma variável aleatória normal padrão e \(\alpha=2\) e \(\beta=3\). Vamos fazer o papel de Deus e gerar os valores de \(y\) e usar os vetores \([x,y]\) para estimar os coeficientes \(\alpha\) e \(\beta\) (embora estejamos aqui particularmente interessados nas estimativas de \(\beta\)). Desenvolvi esse código em python (talvez alguém possa adicionar um código em R ou matlab em outra resposta para complementar) para fazer essa brincadeira:

import random
import matplotlib.pyplot as plt
from scipy import stats
import numpy as np

def geracaoDados(n):
    alpha=2
    beta=3
    x=np.random.normal(0,4,n)
    u=np.random.normal(0,1,n)
    y=alpha*np.ones(n)+beta*x+u
    return x,y

def estimacao(x,y):
    beta, alpha, r_value, p_value, std_err = stats.linregress(x,y)
    return alpha,beta

if __name__ == '__main__':
    numeroAmostras=1000
    n=1000 # numero de observacoes
    vetor=np.empty([numeroAmostras])
    for i in range(0,numeroAmostras):
        [x,y]=geracaoDados(n)
        [alpha,beta]=estimacao(x,y)
        vetor[i]=beta
    matplotlib.pyplot.hist(vetor,bins=30)
    plt.title('Amostra de tamanho 1000')

Esse código em Python tem dois módulos. No primeiro fazemos o papel de "Deus" (ou "natureza"). No segundo, utilizando a função de regressão linear do Python, estimamos os coeficientes da reta. No programa principal, que chama essas funções, eu gero várias amostras diferentes (fazendo o papel de Deus). Em cada uma dessas amostras, os coeficientes serão estimados com valores diferentes e eu construo uma distribuição para essas variáveis.

Vamos estimar \(\beta\) utilizando o método dos mínimos quadrados. Utilizando amostras de tamanhos 10 e 1000. Veja as distribuições da variável de interesse nas figuras abaixo:

Monte Carlo www.prorum.com

Monte Carlo www.prorum.com

Note que, como já sabemos da teoria, quando a amostra aumenta, a variância do estimador de \(\beta\) reduz. Obviamente, várias outras idéias podem ser discutidas com essa simples simulação. Por que você não simula usando esse código e descobre o que mais ocorre?

Qualquer referência de estatística ou econometria que apresente o tema de regressão linear apresenta esses resultados. Para ganhar intuição sobre o tema utilizando simulações monte carlo, eu sugiro essa referência.

Se você ainda não programa e gostaria de iniciar a programar, escolha um dos links abaixo:

Se você preferir R, vá por aqui.

Se você preferir Python, siga esse caminho.

...