segunda-feira, março 30, 2020

Região do Norte.

Editado a 31 de Março: Os números publicados no dia 30 estavam engatados. Contaram muitos casos em duplicado quando integraram dados das autarquias com os do sistema de vigilância epidemiológica (2). Por isso, vou ignorar os dados de dia 30 e acrescentar algumas correcções ao post, em itálico

A Câmara do Porto «deixa de reconhecer autoridade à senhora directora-geral da Saúde» se declarar medidas mais extremas para conter a propagação do SARS-CoV-2. Politiquices à parte, eu queria ver se havia alguma razão para preocupação com o aumento de casos confirmados de COVID-19 na Região do Norte. Um problema de olhar para os dados em mais detalhe, em vez de considerar o agregado, é que aumenta o peso relativo de factores estranhos ao que procuramos. Por exemplo, entre os dias 26 e 27 de Março não houve novos casos confirmados na região de Lisboa. Isto não foi por folga do vírus. Entre o vírus e os dados de que dispomos interpõem-se sempre atrasos nos testes, problemas nos registos e outros factores alheios à epidemia. Nos valores agregados estes desvios pontuais tendem a cancelar-se e o total de casos confirmados em Portugal varia de dia para dia de forma bastante estável. Mas visto de perto o ruído é maior. Os gráficos abaixo mostram a proporção de casos novos e casos acumulados somando por região NUTS-II os dados dos concelhos.

Substituí o gráfico original por este, que omite o dia 30.



No gráfico da esquerda nota-se bem a grande variação diária. É um exemplo visual do perigo de fazer análises com grão mais fino que o do ruído. Mas o gráfico da direita, com os valores acumulados, é mais estável. Pode-se ver que, realmente, a Região do Norte tem um peso maior no total de casos confirmados mas, por outro lado, a proporção de casos no Norte não parece estar a aumentar muito. Talvez um pouco mas com oscilações tão grandes de dia para dia não é claro se é por tendência se é por acaso. Ainda assim, parece que nos três últimos dias o Norte tem sido responsável por uma fracção crescente dos casos novos.

Uma forma de tentar perceber porquê seria olhar em detalhe para os dados dos concelhos e procurar padrões que sugerissem uma explicação. Este método de data mining tem uma longa tradição, desde o tempo em que se fazia com folhas de chá ou entranhas de animais. O problema disto, além do ruído, é que o número de padrões possíveis explode combinatoriamente com a quantidade de factores considerados, praticamente garantindo à partida que vamos encontrar explicações para todos os gostos. O mais prudente é fazer o contrário: formular hipóteses que se possa testar com os dados e depois procurar especificamente o que nos permita testar essas hipóteses. O que vier a mais pode ser admitido como hipótese a testar com novos dados mas não mais do que isso.

Assim, decidi considerar três possibilidades. A primeira é a de que na região Norte a taxa de crescimento está maior por toda a região. A segunda é a de que o crescimento se deve mais à contribuição de muitos concelhos pequenos. E a terceira é que o problema principal está no concelho do Porto. Só esta última é que daria razão à directora-geral da Saúde. Para ver isto, represento abaixo a proporção de casos novos em cada dia distribuídos pelos vários concelhos. Cada concelho está marcado no eixo das abcissas em função do (logaritmo) do número total de casos. O Porto é o ponto mais à direita. As linhas mostram a distribuição de casos novos em cada dia.

Conclusão original, baseada nos dados errados: Até ontem, o Porto estava a contribuir uma fracção modesta, com o grosso dos casos provindo, em agregado, de concelhos no meio da distribuição. Mas hoje o cenário mudou radicalmente, com o Porto açambarcando a maior parte da área debaixo da curva. A menos que isto se deva a algum problema contabilístico (ou erro da minha parte), penso que a directora-geral da Saúde tem razão.

Na verdade, não se nota nada de particularmente grave no Porto. É o concelho com mais casos no total na Região do Norte mas o problema parece ser generalizado, com o grosso dos casos desta região contribuídos agora pelo agregado da vários concelhos. Não se justifica por isso tentar isolar um concelho em particular.



Como da minha opinião não dependem milhares de vidas, posso encarar esta conclusão como provisória e aguardar uns dias até ter mais dados para reavaliar estas hipóteses. Na DGS não têm esse luxo. Não lhes invejo a responsabilidade de decidir já o que fazer, ou não fazer, sabendo que qualquer opção poderá ter consequências trágicas.

Principalmente porque não é trivial recolher estes dados em tempo real, com muito pouca possibilidade de controlar os números atempadamente e dependendo de pessoas que estão, ao mesmo tempo, a resolver problemas sérios com os doentes.

Actualizei novamente o código e os dados na pasta pasta partilhada, já com as alterações com que corrigi o post.

1- Público, Câmara do Porto critica cerco sanitário ao Porto. E questiona “autoridade” da directora-geral da Saúde
2- JN, Cerco sanitário no Porto "não faz qualquer sentido", diz secretário de Estado

sábado, março 28, 2020

Nós e os outros.

Este gráfico mostra a evolução da taxa de crescimento dos casos confirmados para este grupo de países, contando o dia 0 como sendo o dia em que o número de casos confirmados passou os 100. Para cada período de 5 dias, começando nos dias 0 a 4, calculo a taxa de crescimento exponencial. Com base nessa, calculo uma dispersão de valores para a taxa de crescimento por bootstrapping residual (1). A linha mais grossa representa a mediana desses valores e as linhas mais finas os percentis 10% e 90%.



Em todos estes países houve uma fase inicial em que as curvas se afastaram da exponencial, o que julgo ser por causa da transição conforme tomavam medidas de mitigação. Isto nota-se pela maior dispersão dos valores. A Suécia parece ser excepção, talvez por não ter tomado medidas excepcionais. Apesar disso, a taxa de propagação do vírus na Suécia diminuiu e parece ser relativamente baixa. Mas mais sobre isso adiante. O maior crescimento nesta fase inicial foi na China, o que não é estranho porque foi o primeiro país afectado. Os outros já sabiam o que por aí vinha. Portugal parece ter aplicado bem a lição. Manteve a taxa de crescimento comparativamente baixa no início e agora tem estado a diminuir. Mas por cá a procissão ainda vai no adro. Metaforicamente, que procissões nesta altura é má ideia.

Na fase intermédia podemos ver que a Alemanha, Itália e EUA tiveram mais dificuldade do que a China a travar a propagação. A Alemanha agora está como a Itália estava há uns dez dias mas os EUA estão bem pior. As coisas nos EUA parecem estar a melhorar mas aquele tempo perdido pode ter resultados trágicos. Com crescimento exponencial não se brinca. E um exemplo disso é a Itália. Há quase duas semanas que a Itália tem conseguido manter a taxa de propagação relativamente baixa, entre 1.2 e 1.1. Mas isso não chega, e serviu para ultrapassar a China, porque um crescimento exponencial a 1.1 por dia duplica os casos a cada semana. É uma lição importante para a Alemanha, os EUA e para nós também. O nosso gráfico vai bem encaminhado mas não podemos adiar muito a chegada ao 1.0.

O que me traz à Suécia. Apesar das medidas na Suécia terem sido mais suaves do que nos outros países, a taxa de propagação tem-se mantido baixa. Não faço ideia porquê. Pode ser por factores culturais, pelo clima ou outra coisa qualquer. Mas o que se vê no caso da Itália é que baixo não chega. Se se mantiver em 1.1 eventualmente vai dar em tragédia.

Há quem critique as medidas tomadas em Portugal como extremas. Eu discordo. Portugal tem um avanço em relação à China por ter tomado medidas eficazes mais cedo e está melhor do que a Alemanha e os EUA estavam nesta fase. Mas o factor de crescimento não está muito abaixo do que estava na Itália há vinte dias atrás. É muito importante que o nosso percurso daqui em diante seja mais favorável, mesmo que isso exija sacrifícios.

Actualizei o código na pasta partilhada. Incluí o código que uso para recolher informação desta página do Ministério da Saúde, Ponto de Situação Atual em Portugal. Mas como recorro a API usadas pela página mas não documentadas, recomendo que usem essas funções com moderação não vá alguém chatear-se e mudar a API. Já perdi tempo que chegue com a porcaria dos boletins em pdf, cada um com um formato ligeiramente diferente.

1- Mais sobre isso no post anterior.

quarta-feira, março 25, 2020

Os testes.

Tenho encontrado alegações de uma suposta ocultação de casos de COVID-19 por limitações no número de testes. É claro que os 2362 casos confirmados são uma fracção dos casos em Portugal. Há doentes ainda sem sintomas, outros cujos sintomas serão leves demais para irem ao médico e assim por diante. Seria bom testar toda a gente para encontrar os focos de infecção mas não é viável. Por isso, em valor absoluto, estamos a subestimar o número de casos. Mas, se os testes forem feitos de forma consistente, a variação diária será um bom indicador de como a infecção se está a propagar pela população e do efeito das medidas tomadas. O mesmo para os casos suspeitos. Basta que os critérios de diagnóstico sejam aplicados de forma consistente.

Antes de explicar por que me parece ser esse o caso, queria apontar que quando dizem que o número de testes está a diminuir estão a especular. Até dia 15 de Março, os boletins da DGS indicavam os casos confirmados, infirmados, e aguardando resultados. Havia também um gráfico com confirmados e excluídos por data de início de sintomas. A partir de dia 16 de Março passou a haver “não confirmados” e o os excluídos desapareceram do gráfico dia 17. Isto sugere que, a partir desta data, estão a incluir testes negativos e casos não testados na mesma categoria. Por isso, neste momento, não conseguimos saber pelos boletins quantos casos foram testados. Não vejo nada de sinistro nisto. Com o aumento do número de casos aumenta também a probabilidade de haver falhas pontuais, demoras e outros problemas. Se bem que me agradasse ver isso tudo discriminado, compreendo que a prioridade na DGS não seja satisfazer os epidemiologistas de Facebook. Portanto, se virem alguém dizer que olhou para o boletim e viu que ontem houve menos testes que anteontem, sejam cépticos. Não está lá essa informação.

O que parece preocupar algumas pessoas é ainda mais estranho. Assumindo que todos os suspeitos são testados (o que, a ser verdade, será bom), contam o número de novos casos suspeitos e concluem que há menos testes porque há menos casos suspeitos. Não percebo onde é que isso é má notícia. É precisamente o que esperamos resultar das medidas de mitigação. Olhando para os dados desde dia 16*, parece-me não haver qualquer crise ou rotura. O boneco abaixo mostra isto, à esquerda com os valores diários de casos novos e à direita com os valores acumulados até cada data. Os casos a aguardar resultados parecem estar a acumular-se, com mais peso em cada dia, mas isso não parece ter grande efeito na detecção dos casos confirmados e, quando comparados com o total, o problema não é significativo. Até porque reduzir o número de testes pode ter um impacto pequeno no número de casos confirmados porque os testes não são aleatórios. As prioridades tenderão a dar precedência aos casos mais prováveis e quanto mais para baixo na lista menos casos reais se perde.



Mas há outra forma de testarmos se o processo decorre com normalidade. Como a percentagem de infectados na população é ainda pequena, o aumento de casos é aproximadamente exponencial. O que varia com as medidas tomadas será a taxa de crescimento, que deverá ir diminuindo gradualmente, mas o tipo de curva deve manter-se em cada janela de tempo. Excepto se houver perturbações na recolha de dados. Se deixa de haver testes ou se mudam protocolos há um salto súbito nos números e, nesse período, a exponencial já não se ajusta bem. Podemos medir isso pelo erro residual de cada ponto à curva ajustada, e podemos usar depois esses erros, distribuindo-os aleatoriamente pela curva, para gerar curvas hipotéticas que teríamos se a perturbação tivesse calhado noutro lado. Este é o método de residual bootstrapping, que ilustro na figura abaixo.


Os pontos da esquerda fazem um “cotovelo” que não encaixa numa curva exponencial e por isso têm um desvio considerável da curva ajustada. Se distribuirmos esses desvios aleatoriamente pela curva podemos gerar pontos que darão curvas diferentes, representadas pela mancha de linhas laranja. À direita isso não acontece. A curva ajusta-se bem aos pontos, os residuais são pequenos e a família de curvas fica numa gama mais estreita. Foi assim que calculei famílias de valores para a taxa de crescimento em janelas de 5 dias terminando nas datas indicadas na figura abaixo, quer para casos suspeitos quer para casos confirmados. Cada pontinho é um valor calculado para a taxa de crescimento, e as nuvens dão uma ideia da dispersão desses valores em cada dia, com as “barrigas” indicando maior densidade de valores.


Podemos ver que a taxa inicial de crescimento dos casos confirmados era muito grande, provavelmente pelo aumento inicial no número de testes, mas depois aproximou-se da taxa de crescimento dos casos suspeitos. Entre 13 e 16 de Março houve um desvio grande em relação à curva exponencial, que se pode ver pela maior dispersão dos valores, que indica que o ajuste não é bom. Isto sugere uma alteração brusca, seja nos protocolos seja no comportamento dos suspeitos, o que não é de estranhar nessa altura. Mas a partir de dia 16 as coisas estabilizaram e, com uma taxa de crescimento a diminuir, os dados ajustam-se bem às curvas exponenciais. Além disso, nota-se que os suspeitos estão cerca de dois dias à frente dos confirmados, o que se explica pelo atraso relativo nos resultados dos testes. Este perfil não me parece consistente com uma rotura na capacidade de fazer testes ou outro problema súbito qualquer. Mais ainda, mesmo que houvesse uma conspiração da DGS para nos ocultar estes números, julgo que era preciso um esforço considerável para os falsificar tão bem. Portanto, neste momento, não partilho da opinião de quem diz que os números não valem nada porque não se está a testar. Mas será interessante ver o que acontece nos próximos dias, porque penso que haverá uma revisão dos protocolos de teste e diagnóstico. E isso poderá dar outro safanão nos números e demorar uns dias a estabilizar novamente.

* Porque é uma chatice extrair aqueles dados; o boletim parece ser uma coisa feita em Powerpoint e depois exportado para pdf, e mudaram várias vezes o formato...

Nota: actualizei o código na pasta partilhada. Seguindo a sugestão do Raúl Fernandes (obrigado, Raúl) incluí um ficheiro com a lista de bibliotecas que é necessário para correr isto. Já agora, se algum aluno meu olhar para este código, saliento que estamos a viver uma emergência e isto foi tudo feito à pressa.

domingo, março 22, 2020

Modelos

O modelo mais básico da epidemiologia é o dos susceptíveis (S), dos infectados (I) e dos recuperados (R), aos quais chamarei removidos por incluirem não só os que já não apanham a doença por terem ganhado imunidade mas também os que ficaram imunes por óbito. A ideia deste modelo é que pessoas infectadas contagiam os susceptíveis com uma certa taxa mas depois, no final do curso da doença, já não voltarão a contraí-la e, por isso, são removidos da população em risco. Assim, inicialmente o número de infectados vai crescendo exponencialmente em função da taxa de contágio mas, como o número de susceptíveis começa a diminuir, eventualmente a taxa de crescimento dos infectados é ultrapassada pela taxa de remoção (por recobro ou óbito) e o número de infectados começa a cair. O gráfico abaixo mostra uma comparação das curvas obtidas aplicando este modelo a uma gripe normal e à COVID-19 para uma população de 10 milhões de habitantes (1).


Tenho encontrado pessoas a criticar o alegado exagero das medidas que se está a tomar. Curiosamente, fogem de especificar a que medidas se referem. Lavar as mãos? Proibir missas e jogos de futebol? O que fazem é alegar vagamente que este novo vírus não é muito diferente da gripe normal. Mas é. É muito mais contagioso. A taxa de contágio dos vírus da gripe é aproximadamente 1.15, o número médio de pessoas que um doente infecta antes de recuperar. Para o vírus da COVID-19 as estimativas variam entre 2 e 2.5, ou mais se não houver sequer precauções elementares. Parece pouca diferença mas o que conta é o que está acima de 1, que é o que faz a epidemia crescer. Por isso podemos pensar na COVID-19 como sendo dez vezes mais contagiosa do que a gripe. E isto nota-se nas curvas simuladas assumindo estes parâmetros. Enquanto que um surto de gripe infecta, no pico, oitenta mil pessoas em Portugal, se deixarmos a COVID-19 à vontade ultrapassa os dois milhões. Isto é o número de pessoas doentes em simultâneo. Além disso, a doença é mais grave e prolongada. Em cada 10 pessoas, uma precisa de cuidados hospitalares, o que daria duzentos mil portugueses gravemente doentes para 35 mil camas e 1500 ventiladores disponíveis em Portugal. E isto assumindo que todos os outros doentes se curavam milagrosamente neste período para vagar lugares e equipamento. Eu simpatizo com quem questiona a autoridade e sou sempre a favor do cepticismo. Mas antes de dizerem asneiras façam as contas. Isto não é uma gripe.

Outra linha de argumentação que tem surgido é a comparação com o número de pessoas que morre em Portugal de pneumonia, de gripe e assim por diante. As contas são fáceis de fazer. A esperança média de vida em Portugal é 81 anos o que, com cerca de 10 milhões de habitantes, dá 10 mil mortes por mês. Morre por mês em Portugal quase tanta gente quanto as 13 mil pessoas que morreram em todo o mundo por causa do novo coronavírus desde o início do ano. Mas isto não são boas notícias. Primeiro, porque morreram 13 mil pessoas mesmo apesar de se tentar tomar as tais medidas que alguns acham exageradas. E, em segundo lugar, isto é apenas o início. O gráfico abaixo mostra a posição dos vários países contando as semanas passadas desde o primeiro caso reportado e se a corrida até ao pico fosse em Portugal (2).



Devo apontar que isto não são previsões. Pelo menos por cá, é provável que se consiga retardar a epidemia durante cerca de um ano até haver vacina. Com uma vacina a taxa de contágio fica muito reduzida (3) e a epidemia fica controlada. Infelizmente, as medidas de higiene e distanciamento social só funcionam onde há água canalizada e não é preciso reunir pessoas diariamente à volta do poço. Temo que muitos países farão a trágica escalada até ao cume daquele pico. Mas por cá as medidas que estamos a adoptar parecem fazer efeito e o aumento em proporção ao número de casos está a diminuir. O painel da esquerda mostra o número de casos em cada dia em proporção ao dia anterior a partir de 11 de Março (antes disso há muita flutuação porque os números são pequenos), a recta ajustada aos pontos e a mancha que dá ideia da incerteza no declive(4). Como esta redução faz os pontos desviarem-se da exponencial, podemos (pelo menos quem sofra do mesmo que eu) sentir-nos tentados a usar o modelo SIR. Isto é um erro porque o SIR pressupõe uma taxa constante de contágio e o que trava a infecção é a redução na fracção de indivíduos susceptíveis. Não é o que se passa agora e, como mostra o gráfico da direita, se formos ajustando o SIR aos dados que vêm vamos subestimar muito o perigo que ainda há por o modelo confundir o abrandamento causado pelas medidas tomadas com o ponto de inflexão na curva. Por exemplo, o modelo com os dados até hoje prevê um factor de contágio de 1.2 e um tempo de recuperação de cerca de um dia.



É por isso que eu prefiro ir seguindo o que acontece usando curvas exponenciais ajustadas ao período mais recente, conforme os dados vão chegando. Por um lado, isto dá uma ideia visual do impacto futuro das medidas que vamos tomando, algo que não é perceptível no gráfico do declive. Mas, por outro lado, não comete o erro de presumir que nos estamos a afastar da fase de crescimento exponencial. Enquanto apenas uma fracção pequena de pessoas estiver infectada, e é crítico que assim se mantenha, o crescimento será exponencial. O que muda é o factor de multiplicação. Aqui fica então o boneco para hoje:


Nota: Se alguém quiser experimentar isto, pus o código e os dados nesta pasta partilhada. Precisam de Python 3.x e algumas bibliotecas; o mais prático será instalar a distribuição Anaconda (https://www.anaconda.com/distribution/). Se notarem erros, agradeço que me digam, de preferência depois de os corrigirem :)

1- Os parâmetros para a gripe tirei desta apresentação e para a COVID-19 usei um r0 de 2.2 e uma duração média de duas semanas.
2- Segundo dados do ECDC, aqui, e considerando apenas países com mais de 200 casos confirmados num só dia.
3- Muita gente julga que a vacina serve para nos protegermos individualmente. Em geral, a eficácia para isso é pouca, reduzindo apenas a probabilidade de ser infectado. Mas, colectivamente, se toda a gente se vacinar reduz-se o tal factor de propagação e a doença não arranca sequer. A protecção vem de não haver gente doente para nos contagiar.
4- A mancha e o desvio padrão no declive foram calculados por bootstrapping residual usando 1000 réplicas.