quinta-feira, 1 de abril de 2021

O Rt

Toda a gente fala no Rt, no "famoso" Rt, nesse personagem obscuro que trata do nosso destino, que nos atiram para a frente para nos prender em casa, que não nos explicam o que é, em que unidades se mede, se é um número abstracto, se é uma percentagem, mas que agora vive no eixo horizontal de um mapa de risco recentemente inventado.

Mapa de risco em 29 de Março

O mapa de risco é um plano com dois eixos, no eixo horizontal, o tal Rt, e no eixo vertical a incidência acumulada nas duas últimas semanas, por cem mil habitantes, outro número que a comunicação social, e não só, ainda não percebeu muito bem. Segundo os "especialistas", estamos mais ou menos bem se o indicador de incidência estiver abaixo de 120 e o valor de Rt abaixo de 1.
O indicador de incidência tem tido uma evolução acidentada. Andou muitos meses abaixo de 120, começou a crescer acentuadamente por volta de Outubro, decresceu um pouco em Dezembro, mas voltou a crescer e atingiu um terceiro pico violentíssimo em Fevereiro de 2021.

Indicador nacional de incidências

É um indicador com memória de duas semanas, esquecendo completamente os casos verificados há mais de duas:
       i(d) = [t(d) - t(d-14)]/pop
em que i(d) é o indicador no dia d, t(d) é o total de casos no dia d e pop a população em centenas de milhar de habitantes. Hoje, por exemplo,
       t(hoje) = 822314
       t(hoje-14) = 816055
       pop = 103 (10.3 milhões de portugueses)
       i(hoje) = 60.8.
Se decrescer, estamos a ficar melhor que há duas semanas, se crescer, estamos a ficar pior!
Se decrescer, o vírus está a perder terreno, se crescer, o vírus está a ganhar terreno.
Na mecânica, usam-se as variáveis (posição, velocidade) ou (posição, quantidade de movimento) para se caracterizar a fase de um sistema dinâmico.
Numa população de milhões de pessoas diferentes, uns já infectados e eventualmente imunizados, outros eventualmente infectados e assintomáticos, uns para quem o vírus é uma "gripezinha", outros para quem a infecção significa internamento em UCI e perda da vida, alguns já vacinados, a maioria sem qualquer contacto com o vírus, usa-se o índice Rt para indicar se o vírus está a ganhar ou a perder terreno.
O que se sabe é que a infecção se adquire por transmissão entre indivíduos infectados e não infectados, que os sintomas, se ocorrerem, ocorrem entre 3 a 10 dias após o contágio, que a probabilidade de um individuo infectado transmitir o vírus a um não infectado depende de os dois indivíduos terem estado próximos um do outro durante tempo suficiente, da estirpe do vírus, e factores ambientais, etc.
O que se sabe é que, por exemplo, os 592 infectados de hoje estiveram em contacto com outros infectados ainda não detectados na altura do contacto, pois de outro modo estariam já isolados.
O Rt dá-nos essa indicação de uma forma global, através de uma estimativa de quantos contágios um conjunto de indivíduos infectados pode produzir.
Quanto mais se souber sobre o funcionamento do vírus e sobre como se processa o contágio,  quanto mais completos e rigorosos forem os dados disponíveis, mais rigorosa será a estimativa.
Deixo aqui o resultado de um trabalho de Fernando Batista que compara os valores de Rt obtidos por diversos métodos, entre os quais uma aproximação que eu costumo utilizar.

Estimativas de Rt

O "meu" método consiste em pensar que uma estimativa dos casos no dia d será a média de casos nos últimos 7 dias, e admitir que em média a infecção ocorre 5 dias após o contágio, o que conduz a pensar que
       mm7(d) = Rt.mm7(d-5)
ou seja, que uma aproximação para Rt será
       Rt = mm7(d)/mm7(d-5).
O problema é que o cálculo do Rt se faz com 5 dias de atraso, e, se somarmos os dias que o governo espera para tomar decisões, podemos ter nova catástrofe...
Assunto a revisitar.

sexta-feira, 12 de março de 2021

Métricas CoVid 101

Somos todos os dias bombardeados por números ligados à pandemia, por toda a gente, deste os mais altos magistrados da Nação aos mais reles comentadores, páginas nas redes sociais, posts como este, etc.
Os números, por si só, não têm normalmente significado. Devem estar associados a uma grandeza e a uma unidade de medida.
Este é um slide da apresentação realizada ontem pelo primeiro ministro sobre as regras de desconfinamento:

Comunicação do PM de 11 de Março de 2021

Uma imagem deve apelar à memória visual daqueles a quem é dirigida. Aqui, fica-se com a ideia de que há um número, 120, e quatro caixa, numeradas de 1 a 4, de baixo para cima, e um X numa delas, a verde.
O mais preocupante será aquele 120... 120 casos por cem mil habitantes, a 14 dias, como foi dito repetidamente...
Façamos as contas. Se são 120 casos por cem mil habitantes, então por dez milhões de serão 100 vezes mais, ou seja, 12000, a 14 dias... E isto que quer dizer?... 
Quantos casos foram anunciados ontem? 627. Então, estamos bem, estamos mal, muito longe, muito perto? Já vi tanta gente com dúvidas nesta percepção, que me interrogo da eficácia deste debitar de números à toa, quando estes indicadores deveriam ser claramente explicados e ser referências seguras do comportamento de cada um e de todos.
Vamos a isso!
Os casos podem ser simplesmente contados, tantos por dia, ou apresentados como médias, tantos por dia em média, nos últimos 7 dias, por exemplo. O mesmo com os óbitos.

Casos e óbitos dia a dia e médias de 7 dias

As médias de 7 dias absorvem (filtram) os efeitos de fim de semana, já que cada valor é obtido somando os valores de todos os dias da última semana, e dividindo por 7, e têm uma evolução mais assertiva.
Quando comparamos territórios diferentes, estes valores absolutos não devem ser utilizados, apesar de ouvirmos constantemente quantos óbitos ocorreram no Brasil ou nos Estados Unidos, sem se ter em conta a respectiva população.
Retirei agora mesmo do Worldometers esta tabela dos 10 países com mais casos acumulados por milhão de habitantes

10 países com mais casos por milhão de habitantes

Notam-se aqui vários efeitos que devem ser tidos em conta, nomeadamente, por uma lado, os países pequenos, mais homogéneos, como Andorra, Gibraltar ou San Marino, por exemplo, em que o vírus atinge mais facilmente mais população, e por outro lado, a consideração de todos os casos, desde o primeiro dia.
Será que isso interessa para efeito da determinação do estado sanitário num dado momento?
Tendo em conta o período de incubação do vírus, o ECDC considera como principal indicador o número de casos acumulados nas duas últimas semanas, por cem mil habitantes.
Hoje, 12 de Março, se tomarmos o número de casos registados nas duas últimas semanas, subtraindo do número de casos registado hoje (813512) o número de casos registado há duas semanas (802773), encontramos 10739, e dividindo por 103 (10.3 milhões de habitantes) obtemos 104.3, que será o indicador nacional de hoje, e portanto dentro do limite de 120 a que se referia o quadro inicial. Este gráfico mostra a evolução do nosso indicador de incidências durante toda a pandemia, e que ainda recentemente esteve acima de 1600. Realmente, entre 10 de Outubro do ano passado e 9 de Março estivemos sempre acima de 120!

Incidências acumuladas nos últimos 14 dias / 100k habitantes

Este valor, por sí só, não caracteriza a situação dinâmica, e, no mínimo, convém associar outro valor, que nos indique se o indicador de incidências está em fase de crescimento ou de decrescimento. Os engenheiros e os matemáticos chamam a isso derivada da função. Os epidemiologistas gostam de falar do índice de transmissibilidade Rt, que tenta traduzir isso mesmo através da ideia de quantos infectados um infectado contagia em média. Se Rt for maior que um, o indicador de incidências está em crescimento, e se for menor que 1, está em decrescimento.
Chegamos assim aos quatro quadrantes da figura inicial: do lado esquerdo, Rt menor que 1 e do lado direito Rt maior que 1.

sexta-feira, 1 de janeiro de 2021

2021

Gosto de olhar para os números...
2021 = 43x47,
ou seja, podemos arrumar os 2021 anos da nossa era, convertidos em azulejos, num painel de 43x47, dois números primos, e não há outra possibilidade de decomposição não trivial em dois factores.

2021 azulejos

A decomposição de um inteiro em factores sempre intrigou e intriga muita gente. Enquanto que 2021 só pode ser escrito da forma atrás indicada, 2020, o ano que terminou, pode ser escrito como
2020 = 2x1010
2020 = 4x505
2020 = 5x404
2020 = 10x202
2020 = 20x101,
enquanto que 2019 só pode ser escrito como
2019 = 3x673.
Estes rectângulos têm todos dois lados de dimensões muito diferentes uma da outra, isto é, não se aproximam de um quadrado, como acontece com 2021, ou
2024 = 44x46
2025 = 45x45, este um quadrado perfeito.
O anterior quadrado perfeito foi 
1936 = 44x44
e o próximo será
2116 = 46x46.
O último ano número primo foi 2017 e o próximo será 2027.
Uma coisa é certa... os anos não são todos iguais...
PS: 43 e 47 são dois números primos consecutivos. O último ano produto de dois números primos consecutivos foi 
1763 = 41x43
e a 2021 segue-se
2491 = 47x53.

sábado, 8 de agosto de 2020

Variáveis

(Nota: recomenda-se a leitura da gota anterior e nomeadamente a familiarização com a plataforma Google Colab).
Variáveis são entidades, com nome, e cujo valor pode variar durante a execução de um programa. Em Python, o sinal = significa a atribuição de um valor a uma variável.
Os valores podem ser de diversos tipos, como, por exemplo, booleano, numérico, texto, ou alguns tipos compostos, como conjuntos, listas, etc.

Experiência com variáveis

A variável y foi inicialmente criada como um número, mas posteriormente o programador atribuiu o mesmo nome a uma variável do tipo texto, perdendo-se a atribuição anterior.
Os mais curiosos, poderão espreitar em w3schools.com para aprofundar um pouco estes conceitos.
As listas são um tipo de variável muito poderoso em Python. Uma lista é uma colecção de entidades, que podem ser repetidas, e que têm posição na lista. São declaradas entre parênteses rectos e com os nomes das entidades separados por vírgulas. A primeira entidade da lista está na posição 0.

 
Experiência com listas

Neste exemplo, há uma variável, com o nome x e duas listas, com os nomes y e z. Um dos elementos da lista z é a lista y e outro é uma lista em que um dos elementos é x e o outro é a lista y.
Usa-se a função type para saber o tipo de uma variável, e com esta experiência pretende-se contribuir para ajudar a reconhecer a diferença absolutamente essencial entre o nome e o valor de uma variável.
Exemplos aqui.

sábado, 25 de julho de 2020

Saber programar

Programar é comunicar com uma máquina, e basicamente, usa-se uma linguagem, e partilham-se conceitos. Tudo normal. Como na comunicação entre humanos, só que mais simples...
Nos últimos 50 anos, com a evolução dos computadores, apareceram milhares de linguagens de programação, todas com as suas características distintivas, e a maioria em rápido desuso.
Na minha opinião, deve-se começar por aprender uma só, que seja muito usada, e para a qual existam bastantes ajudas.
Actualmente, eu recomendo Python, pela sua simplicidade,
Os mais treinados nestas artes serão capazes de instalar a linguagem Python no seu computador, visitando o seu sítio oficial, mas eu recomendo a utilização da plataforma Google Colab, que simplifica muito a vida aos iniciados. Tudo acontece numa página Web.
Antes disso, dois ou três conceitos muito simples, e numa linguagem que todos entendam.
Na conversa com um computador, podemos referir entidades, pelos seus nomes, e invocar operações. Por exemplo, aqui

Um programa!

definiu-se uma entidade (um número) com um nome (x), e um valor (4) e invocou-se a operação imprimir (print). E isto é um programa! Basta premir o botão de executar.
Está na altura de experimentar!... isto é, entrar na plataforma, começar uma página nova, escrever aquelas duas linhas de código, e carregar no botão... (ou usar a caixa de comentários em caso de dificuldade)
Aprender a programar é como aprender a falar, não é preciso saber as palavras todas antes de começar, aprende-se falando, perguntando, ouvindo, descobrindo.
Mas há uma questão essencial, que consiste na definição do problema que pretendemos que o computador resolva. Sem essa definição rigorosa, pode-se eventualmente produzir um programa, mas será muito possivelmente uma "solução à procura de um problema"...
O que caracteriza um programa, ou um programador, é o rigor no enunciado do problema. É esse o seu maior valor. Depois, o programador terá de escolher uma linguagem de programação que utilize conceitos adequados a esse enunciado.
A título de exemplo, imagine-se que o nosso problema é mostrar que existe uma relação entre a potência de um automóvel e o seu consumo de combustível.
Se tivermos acesso a uma tabela com estas características para um grande número de automóveis, e soubermos extrair valores dessa tabela e mostrá-los sob a forma gráfica, talvez tenhamos o problema resolvido.
A linguagem Python entende-se perfeitamente com tabelas, com os cabeçalhos, com os conteúdos de cada célula, e com gráficos. Alguém que estude Python sabe que o seu maior poder está nas packages desenvolvidas por terceiros e que são especializadoa em problemas específicos, que podem ir da matemática às redes, aos gráficos, à inteligência artificial, à aprendizagem automática, ao processamento de linguagem natural, etc.
Há uma package chamada Altair: Declarative Visualization in Python que nos pode dar uma grande ajuda e transformar um problema aparentemente complexo em meia dúzia de linhas de código, como se vê neste pequeno programa, que explora uma tabela de características de carros à venda nos Estados Unidos e faz um gráfico dos consumos (milhas por galão) em função da potência de cada um

Experimentar não custa...

E assim, de repente, chegamos à Ciência de Dados, em que utilizamos dados disponíveis para suportar as nossas teorias, etc.
Todos podem ver, experimentar ou copiar o código aqui.

terça-feira, 17 de maio de 2016

Bem vindos

Gotas de aprendizagem são pequenos contributos que pretendem ajudar a criar situações em que um leitor eventualmente aprende qualquer coisa de interessante para a sua curiosidade.
Estas gotas concentram-se em cinco áreas de interesse, e poderão dar origem a intervenções mais estruturadas em alguma ou algumas dessas áreas.
As áreas de interesse que consideramos são sucintamente
  • Viver e trabalhar na Sociedade de Informação
  • Ferramentas TIC
  • Redes e Visualização de Informação
  • Pensamento Computacional
  • Programar a Brincar.
Em breve, serão publicadas as primeiras gotas.
Entretanto, podem os leitores visitar outros blogues do autor, listados ao lado.