Aulas do Curso de Modelagem matemática IV da FGV-EMAp
License: GPL3
Image: default
Conceitos básicos de processos estocásticos em populações
Copyright (2013-15) Flávio Codeço Coelho, EMAp-FGV
Neste módulo revisitamos os elementos básicos da dinâmica de populações, como nascimento, morte, imigração e emigração. Mas agora vamos representá-los como realizações de eventos probabilísticos.
Processo Poisson simples
Neste processo consideramos apenas o nascimento, ou mais genericamente a entrada de indivíduos em uma população de forma aleatória, mas a uma taxa constante .
Seja o número de novos indivíduos que entraram na população no intervalo . Então podemos definir as probabilidades de transição da população como:
,
é independente de todas as entradas no intervalo
Aqui, o(dt) denota todos os termos de order inferior a dt.
Tempo até o próximo evento
Suponha que seja o tempo do primeiro evento após . Para determinar a distribuição de probabilidade de , podeŕiamos considerar a distribuição . Mas é muito mais fácil pensarmos sobre o evento complementar , ou seja nenhum evento ocorreu antes de .
Considere um intervalo pequeno , agora vamos dividir os eventos que ocorrem no intervalo nos que ocorrem no primeiro intervalo e nos que ocorrem no intervalo subsequente . Podemos ver que
e nenhum evento ocorre no intervalo
nenhum evento ocorre no intervalo
aplicando a condição acima,
nenhum evento ocorre no intervalo
Aplicando a condição obtemos
Quando tende a , temos
Cuja solução é
Como concluímos que a função de distribuição acumulada de é
Logo a pdf do tempo até o próximo evento é:
que corresponde à distribuição exponencial com parâmetror .
Exercício: Simulando o processo de Poisson
A partir do exposto acima, implemente uma simulação de 100 eventos de um processo de Poisson com taxa . Mostre graficamente que a distribuição do tempo até o centésimo evento segue uma distribuição Gamma(100,).
Equações Diferenciais Estocásticas (EDEs)
Uma equação diferencial estocástica é uma equação diferencial na qual um ou mais de seus termos é um processo estocástico. Por conseguinte, a sua solução também é um processo estocástico. Seguindo a notação do cálculo de Ito, um exemplo simples seria:
onde é um processo de Wiener, ou seja, um processo estocástico em tempo contínuo, também conhecido como movimento browniano.
A solução analítica destas equações foge ao escopo deste curso. Mas podemos explorar soluções numéricas.
Modelando com EDEs
Vamos agora desenvolver alguns modelos simples usando EDEs.
Dinâmica de uma população (Processo de nascimentos e mortes)
Seja o seguinte modelo da dinâmica demográfica de uma população:
onde é a população no tempo e e são as taxas de nascimento e morte, respectivamente. A solução deste sistema é:
Naturalmente, populações naturais não variam de forma tão bem comportada. Como existem heterogeneidades em uma população real, como derivado acima corresponde ao valor esperado da população, e não ao valor exacto de um processo de nascimentos e mortes no tempo . Além do mais varia continuamente enquanto que populações variam de forma discreta.
Um modelo estocástico da demografia desta população, preservando as mesmas taxas de nascimento e morte pode ser construído, nos oferecendo uma série temporal mais realística.
Para nos ajudar a chegar na EDE correspondente, vamos construir um modelo estocástico direto primeiro. Vamos considerar os nascimentos e mortes aleatórios, em um curto intervalo de tempo .
Neste intervalo, são possíveis três tipos de alterações na população:
- Um nascimento, ,
- uma morte, ,
- ou nada, .
Estas alterações ocorrerão com as respectivas probabilidades:
- ,
- e
- .
Seja a probabilidade de ser ter indivíduos na população no instante de tempo .
Isto nos leva a:
Pode-se demonstrar que para muito pequeno, que a EDE abaixo satisfaz aproximadamente a mesma distribuição de probabilidade que o processo estocástico discreto acima.
onde é um processo de Wiener.
Para resolver numericamente esta EDE precisamos entender o método de Euler-Maruyama.
Método de Euler-Maruyama
Considere a seguinte equação diferencial estocástica de Itō :
Com condições iniciais , onde where é o processo de Wiener, e suponha que queremos resolver esta EDE em um dado intervalo . Então a aproximação de Euler–Maruyama approximation à solução verdadeira de é a cadeia de Markov definida abaixo:
- Divida o interval em sub-intervalos iguais de comprimento ;
- faça
- Defina recursivamente para : onde , i.e. i.i.d. com média e variância
Solução numérica do processo de nascimento e morte
Vamos agora definir as funções que correspondem às partes determinísticas e estocásticas da nossa EDE.
Agora definimos uma função que implementa o método de Euler-Maruyama, Junto com uma figura interativa aplicando-o ao nosso modelo.
O Método de Milstein
O método de Milstein parte da mesma ideia de do método de EM, ou seja discretizar a dinâmica em n intervalos iguais. A forma como serão calculados os valores da função em função de seus valores anteriores é que muda:
onde é a derivada de com respeito a , e , são variáveis aleatórias i.i.d. de distribuição Normal com média 0 e variância .
Exercício:
Modifique o solver acima implementando o método de Milstein.
Derivando uma EDE para um modelo SIR
seja , onde , .
Então o valor esperado de na escala detempo de é: A matriz de covariância de é , ou seja,
A partir dos resultados acima podemos chegar ao seguinte sistema de equações diferenciais estocásticas para o modelo SIR:
onde .
Equações de Kolmogorov
Também conhecidas como "Markov Jump processes", estas equações descrevem um processo markoviano contínuo e diferenciável em um espaço de estados discreto e finito. A equações de Kolmogorov (anterógrada e retrógrada), modelam o problema de uma forma ligeiramente diferente. Nas EDE modelamos um sistema dinâmico estocástico como a soma de um processo médio, , e sua covariância, . Nas equações de Kolmogorov, modelamos a taxa de variação das probabilidaes de transição. Logo sua versão anterógrada é:
onde é a matriz de probabilidades de transição e , é a matriz geradora. De forma similar, a versão retrógrada é dada por:
Os métodos para solução numérica deste tipo de processo estocástico foram originalmente desenvolvidos para modelar reações químicas, mas podem ser aplicados a quaisquer modelos compartimentais cujo espaço de estados seja discreto. Estes métodos se dividem em exatos e aproximados. Dentre os métodos exatos o método "direto" proposto por GIllespie em 1977 é o mais usado. Resumidamente, o método de gillespie é um método iterativo que faz uso de duas variáveis aleatórias: uma representando o tempo até o próximo evento, e a segunda. multinomial, para escolher qual dos evento ocorrerá.
Para descrever esta classe de modelos, é interessante pensar no modelo como um vetor de estados
Onde é a quantidade do -ésimo tipo no tempo .
Existem reacões, envolvendo os tipos existentes, que podem ocorrer alterando o estado do sistema. Cada reação é caracterizada por uma função de propensão e um vetor de alteração de estados .
Implementando processos markovianos em tempo contínuo
Abaixo vamos aprender a simular um modelo SIR estocástico simples usando apenas as bibliotecas numpy e scipy. Vamos simular a versão determinística e também algumas realizações da versão estocástica.
Agora vamos simular uma versão extendida do modelo SIR com demografia, ou seja, com nascimentos e mortes.
Simulando modelos estocásticos em Python
A abordagem acima demonstra como é simples implementar uma simulação estocástica a partir das equações de Kolmogorov. Contudo podemos simplificar ainda mais a nossa vida, usando uma biblioteca de que implementa o algoritmo "direto" de Gillespie, assim como algumas de suas variações: o Stochpy. Para executar o código abaixo, é necessário instalar o stochpy no Sage, uma vez que este não faz parte da distribuição padrão do Sage.
Requirement already satisfied: stochpy in /home/fccoelho/.sage/local/lib/python3.9/site-packages (2.4)
WARNING: You are using pip version 21.0.1; however, version 21.3 is available.
You should consider upgrading via the '/home/fccoelho/Downloads/SageMath/local/bin/python3 -m pip install --upgrade pip' command.
Para escrever um modelo no Pysces, precisamos utilizar a Pysces Modeling language, vejamos como fica um simples modelo SIR
Agora vamos definir o nosso método de solução numérica, e carregar o modelo: