;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

Esse conteúdo é antigo

Covid: modelo matemático projeta datas finais da vacinação no Brasil

Vacina da Pfizer e BioNTech é aplicada em posto vacinação contra a covid-19 em São Paulo - Roberto Casimiro/Fotoarena/Estadão Conteúdo
Vacina da Pfizer e BioNTech é aplicada em posto vacinação contra a covid-19 em São Paulo Imagem: Roberto Casimiro/Fotoarena/Estadão Conteúdo

Leonardo Zacarin

da Agência USP

25/05/2021 10h31

Uma plataforma criada por um consórcio de universidades brasileiras faz uma projeção de quando a vacinação contra a covid-19 será concluída no Brasil. Considerando os dados de até a segunda quinzena de maio, a previsão é de que a imunização em todo o País seja finalizada em 25 de dezembro de 2022. O sistema utilizou dados disponibilizados pelo governo federal para obter o ritmo da vacinação em cada cidade e, com isso, projetar quando toda a população já terá recebido todas as doses necessárias do imunizante.

Nos cálculos, foi considerado o ritmo de vacinação dos últimos 30 dias (sempre que ocorre uma nova atualização, o sistema leva em conta os últimos 30 dias ados). Essa previsão é atualizada de acordo com a chegada de novas vacinas, com o aumento ou a diminuição do ritmo de vacinação, além de outros critérios que impactam a aplicação do imunizante, como a falta de insumos (IFA - insumo farmacêutico ativo) para produção de vacinas, número de postos de vacinação e o desejo da população em se vacinar.

O de Vacinação da Covid-19 (e aqui) é aberto e está disponível para toda a população. O usuário consegue obter dados regionais ou totais do Brasil. Para isto, basta selecionar o Estado e a cidade desejados e verá, além da projeção para o fim da vacinação, detalhes sobre doses aplicadas por dia, doses em atraso, demanda diária, vacinação precoce, abandono do esquema vacinal, dentre outros.

Ilustração do site mostra projeção de vacinação - Reprodução/Jornal da USP - Reprodução/Jornal da USP
Ilustração do site mostra projeção de vacinação
Imagem: Reprodução/Jornal da USP

Segundo o professor Krerley Oliveira, coordenador do Laboratório de Estatística e Ciência dos Dados, da Universidade Federal de Alagoas (UFAL), antes dos pesquisadores disponibilizarem essas informações na plataforma, foi preciso remover inconsistências nos dados oficiais. "Na base fornecida pelo governo, existem milhões de dados com problemas. Há dados de vacinados que teriam nascido no século 19, recebido a segunda dose em uma data anterior à primeira, recebido mais de uma dose no mesmo dia, recebido apenas a segunda dose, recebido vacinas diferentes e recebido a vacina antes de 2021", explica. "Com a limpeza, as informações disponibilizadas na plataforma possuem menos erros e são mais próximas da realidade do que as oficiais", explica.

O governo federal disponibiliza os dados separados por Estado. O estudo se debruçou sobre todos eles e, a partir do arquivo relativo a cada unidade da federação, indicou as inconsistências existentes em cada um. Os detalhes dessas anomalias também estão publicados na plataforma.

"Embora os dados oficiais estejam apresentados de forma clara e transparente, há inconsistências que precisam ser corrigidas para não gerar dúvida e insegurança em quem as utiliza e nem afetar o planejamento de regiões ou instituições no combate à pandemia", explica Tiago Pereira da Silva, professor do Instituto de Ciências Matemáticas e de Computação de São Carlos (ICMC) da USP e pesquisador do Centro de Ciências Matemáticas Aplicadas à Indústria (CeMEAI). A proposta do projeto foi aumentar a transparência dos dados governamentais e dar o à informação, de forma que a plataforma seja uma ferramenta que auxilie municípios, mesmo os de menor porte, no planejamento da campanha de vacinação.

Com os dados limpos e apresentados de forma didática, o pesquisador acredita que Estados e municípios possam utilizá-los para tomadas de decisões em políticas públicas e combate à pandemia de forma mais adequada. "Imagine que o governo de uma determinada cidade perceba que muitas pessoas não tomaram a segunda dose, por exemplo. Com essa informação em mãos, é possível realizar campanhas de conscientização. A ferramenta pode ser importante também para moradores de cidades pequenas, por exemplo, que não têm muitas informações sobre a vacinação", diz.

Intervalo entre as doses das vacinas

Os intervalos entre a primeira e segunda dose das vacinas contra covid-19 variam de uma para a outra. "No nosso de vacinação, utilizamos espaços de tempos de segurança fornecidos pelas fabricantes das vacinas. No caso da Pfizer, o intervalo ideal indicado pela empresa é de 21 a 25 dias", diz o professor Krerley. Para os outros dois imunizantes disponíveis para a vacinação dos brasileiros, os intervalos são de 56 a 84 dias para a AstraZeneca, e de 14 a 28 dias, para a CoronaVac.

O projeto de modelo estatístico foi desenvolvido pela equipe de pesquisadores do consórcio de universidades ModCovid19, do qual a USP mantém a liderança. O grupo é formado pelo ICMC, pelo Instituto de Matemática, Estatística e Computação Científica da Universidade de Campinas (Unicamp), pelo Instituto de Matemática Pura e Aplicada do Rio de Janeiro (IMPA), pela Universidade Federal de Alagoas (UFAL) e pela Fundação Getúlio Vargas (FGV-Rio). O Laboratório de Estatística e Ciência dos Dados da UFAL desenvolveu a plataforma, a estrutura foi do CeMEAI e o apoio, do Ministério da Ciência, Tecnologia, Inovações e Comunicações (MCTI).