sexta-feira, 20 de março de 2020

Simulando uma epidemia em um ambiente isolado

Exemplo de uma curva de epidêmica.

Conceitos básicos.

* Surto: é o aumento pouco comum no número de casos relacionados epidemiologicamente, de aparecimento súbito e disseminação localizada num espaço específico.

* Epidemia: é a ocorrência de casos de doença ou outros eventos de saúde com uma incidência maior que a esperada para uma área geográfica e períodos determinados. O número de casos que indicam a presença de uma epidemia varia conforme o agente, o tamanho e o tipo de população exposta, sua experiência prévia ou ausência de exposição à doença, e o lugar e tempo de ocorrência.

A duração de um surto ou epidemia depende, basicamente, dos seguintes fatores:

  • a velocidade do surto, em relação à infectividade do agente e modo de transmissão;
  • o tamanho da população suscetível;
  • a intensidade de exposição da população suscetível;
  • o período de incubação da doença;
  • a efetividade das medidas de controle imediato.

Problema.

Considere uma comunidade isolada, talvez os habitantes de uma ilha pequena e completamente inacessível pelo "resto do mundo". O que aconteceria com essa população se um único indivíduo fosse atacado por um agente infeccioso com um período de incubação longo e baixa mortalidade? Quanto tempo seria necessário para toda a população ser atingida? Como seria a curva de crescimento do número de indivíduos doentes nessa população se contágio fosse pelo contato físico próximo entre uma pessoa infectada e uma pessoa sã? Eventualmente todos os habitantes seriam infectados?

Parâmetros básicos da simulação: população de 300 indivíduos, com um infectado inicialmente, taxa de mortalidade de 10%. Ao final de um certo período de tempo o indivíduo doente fica curado ou morre. Enquanto ele está doente, pode continuar infectando outros. A população se move dentro de uma ilha de 100 x 100, o contágio se dá pelo contato próximo de 2 indivíduos, sendo que um deles está infectado e o outro não.

Segue abaixo um código Scilab que simula essa situação hipotética desse surto. Claro que eu não sou um epidemiologista ou médico sanitarista, mas sei fazer simulações no computador e o resultado, eu acredito, não ficou inteiramente distante da realidade. Naturalmente, a motivação desta publicação é a pandemia que o mundo todo está enfrentando esses dias. Esperamos que as medidas que estão sendo adotadas alcancem os objetivos e o número de mortos não seja tão grande quanto está sendo na Itália ou China.

Pelas simulações percebemos que se a distância entre as pessoas for maior (menor contato), a taxa de contágio será consequentemente menor e pico de contágio reduzido e o número de mortes também. A curva do surto (ou de uma epidemia) fica mais achatada.

Descolamento da população pela região geográfica.
Evolução do surto - caso 01.
Evolução do surto - caso 02. Maior afastamento entre os indivíduos.

Curva do surto - maior distância entre as pessoas.


Código Scilab:

////// Simula Epidemia
/// Prof. Dr. Francisco José A. de Aquino

/// Constantes de inícialização do código
xdel(winsid());
clear; clc;

/// População, velocidade e posição inicial.
N = 300;  // individuos
vx = 0.3*rand(1,N,'n');
vy = 0.3*rand(1,N,'n');
px = 100*rand(1,N,'u');
py = 100*rand(1,N,'u');

/// Estatus dos indivíduos
Et = zeros(1,N);
Et(30) = 1;  //0: suscetivel; 1: doente; 2: curada; 3: morta.
Dt = zeros(1,N);  // instante de contágio
Dt(30) = 1;  // indivíduo no. 30 inicialmente doente
ps = N - 1;  // suscetível
pd = 1; // pessoa doente
pc = 0; //pessoa curada
pm = 0; //pessoa morta
tempo = 1100; // tempo de simulação
vt = zeros(1,tempo);
vc = vt;
winH=waitbar('Simulando ...');
for k=1:tempo
    waitbar(k/tempo,winH);
    //plot(px,py,'w.');
    for p=1:N
        px(p) = px(p) + vx(p);
        py(p) = py(p) + vy(p);
        if px(p) > 100 then vx(p) = - vx(p); end;
        if py(p) > 100 then vy(p) = - vy(p); end;       
        if px(p) < 0 then vx(p) = - vx(p); end;
        if py(p) < 0 then vy(p) = - vy(p); end;       
    end
    vt(k) = ps;
    vc(k) = pc;
    vm(k) = pm;
    vd(k) = pd;
    //plot(px,py,'.'); title([string(k),' * ',string(sum(Et))]);
    for c1=1:N
        if ((k-Dt(c1)) > 300)&(Et(c1) == 1) then
               Et(c1) = 2; /// curada
               pc = pc + 1;
               pd = pd - 1;
               xx = rand(1,1,'u');
               if xx>0.95 then
                   Et(c1) = 3;  /// morte
                   vx(c1) = 0;
                   vy(c1) = 0;
                   pm = pm + 1;
                   pc = pc - 1;
               end;             
            end;
        for c2=(c1+1):N
            dx = px(c1)-px(c2);
            dy = py(c1)-py(c2);
            d2 = dx*dx + dy*dy;
            if d2<0 .10="" nbsp="" p="" then="">//                plot(px(c1),py(c1),'ro');
//                disp([k, px(c1),py(c1),c1,c2,d2]);
                vx(c1) = -vx(c1);
                vy(c2) = -vy(c2);
                if (Et(c1) == 0)&(Et(c2) == 1) then Et(c1) = 1; Dt(c1) = k; ps = ps - 1; pd = pd + 1; end;
                if (Et(c1) == 1)&(Et(c2) == 0) then Et(c2) = 1; Dt(c2) = k; ps = ps - 1; pd = pd + 1; end;
            end;
        end;
    end;
end
close(winH);
figure; plot(vt);
plot(vc,'m');
plot(vm,'r');
plot(vd,'k');
legend('s - suscetíveis','c - curadas','m - mortas','d - doentes');

Nenhum comentário:

Postar um comentário