Visualizzare l’evoluzione dei casi COVID-19 con R

In questo post uso R per importare i dati raccolti giornalmente qui e genero un piccolo quadro epidemiologico dei casi di COVID-19 in Ticino e nel resto della Svizzera. La Lombardia è stata il primo epicentro Europeo. Il Ticino è particolarmente integrato alla regione del Norditalia, sia dal punto di vista economico sia dal punto di vista sociale. In tempi normali, oltre 60’000 frontalieri giornalmente attraversano il confine ticinese per contribuire in modo cruciale alla sua economia e al suo sistema sanitario. Perciò, è naturale comparare la dinamica della pandemia in Ticino e Svizzera con la Lombardia.

#1 Un’ottima library per importare dati strutturati dal web con R è data.table . Qui la uso per importare il file .csv che mantengo sulla pagina con i dati COVID-19 aggiornati.

#Import data
library(data.table)
covid19<-fread('https://drive.switch.ch/index.php/s/JuacAj3U6Iit3hs/download')

#2 Il tasso di crescita dei casi è rilevante perché il numero di nuovi casi cresce naturalmente assieme al numero di casi totali, che indicano maggiori possibilità di contagio. Tutto questo naturalmente assume che il numero di test – e quindi la probabilità di essere testati positivi se si è effettivamente positivi – rimane più o meno stabile nel tempo. Naturalmente, le persone positive al test sono solo una parte di tutte le persone che hanno contratto la malattia causata dal virus SARS-CoV-2. Calcolare il tasso di crescita con questi dati è semplice: nuovi casi giorno t / (casi totali giorno t – nuovi casi al giorno t )

#Generate growth rate
covid19$TI_crescita<-covid19$TI_nuovicasi/(covid19$TI_casi-covid19$TI_nuovicasi)
covid19$restoCH_crescita<-covid19$restoCH_nuovicasi/(covid19$restoCH_casi-covid19$restoCH_nuovicasi)
covid19$LO_crescita<-covid19$LO_nuovicasi/(covid19$LO_casi-covid19$LO_nuovicasi)
covid19[covid19=="NaN"]<-0
covid19[covid19=="Inf"]<-0

#3 Decido di generare l’immagine con un layout 3×3. Tre righe (Lombardia, Ticino e resto della Svizzera) e tre colonne (tasso di crescita casi, nuovi casi e casi totali). Con questo comando imposto il layout e i parametri legati ai margini, che sono ben spiegati qui. In questo blocco di codice attivo anche il device driver che genera un PDF di quello che voglio rappresentare.

#Set graphical parameters
pdf(file="covid19.pdf")
par(mfrow=c(3,3),oma=c(1,1,3,1),mar=c(4,4,4,2) + 0.1)

#4 Infine popolo l’immagine 3×3 con i grafici. Ogni colonna mostra i dati menzionati all’inizio della riga per una regione/paese, facilitando la comparazione. I grafici mostrano l’evoluzione delle variabili dal giorno del primo caso confermato in Ticino (25.02.2020). Ho scelto colori diversi per differenziare le regioni e inserito il titolo solo sulla prima riga e prima colonna allo scopo di non appesantire la parte centrale dell’immagine con del testo ridondante.

#Plot data
plot(0,0,xlim=c(1,nrow(covid19)),ylim = c(0,max(covid19$LO_crescita, na.rm=T)),xlab = "",ylab="Lombardia", font.lab=2 , type = "n", main="Tasso di crescita")
lines(1:nrow(covid19),covid19$LO_crescita, type='l',col='dark green')
plot(0,0,xlim=c(1,nrow(covid19)),ylim = c(0,max(covid19$LO_nuovicasi, na.rm=T)),xlab = "Giorni dopo primo caso in Ticino",type = "n", ylab="", font.lab=2, main="Nuovi casi")
lines(1:nrow(covid19),covid19$LO_nuovicasi, type='l',col='dark green')
plot(0,0,xlim=c(1,nrow(covid19)),ylim = c(0,max(covid19$LO_casi, na.rm=T)),xlab = "",type = "n", ylab="", font.lab=2, main="Casi totali")
lines(1:nrow(covid19),covid19$LO_casi, type='l',col='dark green')

plot(0,0,xlim=c(1,nrow(covid19)),ylim = c(0,max(covid19$TI_crescita, na.rm=T)),xlab = "",ylab="Ticino",type = "n",font.lab=2)
lines(1:nrow(covid19),covid19$TI_crescita, type='l',col='blue')
plot(0,0,xlim=c(1,nrow(covid19)),ylim = c(0,max(covid19$TI_nuovicasi, na.rm=T)),xlab = "Giorni dopo primo caso in Ticino",ylab="",type = "n",font.lab=2)
lines(1:nrow(covid19),covid19$TI_nuovicasi, type='l',col='blue')
plot(0,0,xlim=c(1,nrow(covid19)),ylim = c(0,max(covid19$TI_casi, na.rm=T)),xlab = "",ylab="",type = "n",font.lab=2)
lines(1:nrow(covid19),covid19$TI_casi, type='l',col='blue')

plot(0,0,xlim=c(1,nrow(covid19)),ylim = c(0,max(covid19$restoCH_crescita,na.rm=T)),xlab = "",ylab="Resto della Svizzera",type = "n",font.lab=2)
lines(1:nrow(covid19),covid19$restoCH_crescita, type='l',col='red')
plot(0,0,xlim=c(1,nrow(covid19)),ylim = c(0,max(covid19$restoCH_nuovicasi,na.rm=T)),xlab = "Giorni dopo primo caso in Ticino",ylab="",type = "n", font.lab=2)
lines(1:nrow(covid19),covid19$restoCH_nuovicasi, type='l',col='red')
plot(0,0,xlim=c(1,nrow(covid19)),ylim = c(0,max(covid19$restoCH_casi,na.rm=T)),xlab = "",ylab="",type = "n", font.lab=2)
lines(1:nrow(covid19),covid19$restoCH_casi, type='l',col='red')
mtext(c("Evoluzione casi COVID-19, situazione al 31.03.2020"),cex=1,outer=T)
dev.off()

# 5 Il risultato finale in formato PDF è disponibile qui! Cosa si può dire al 31.03.2020?

  1. In Lombardia e Ticino il trend di rallentamento del tasso di crescita dei casi è evidente da circa 3 settimane. In Lombardia l’isolamento fisico è stato istituito il giorno 8 marzo, perciò questa tempistica è consistente con un periodo di incubazione di alcuni giorni. Il Ticino ha reagito con alcuni giorni di ritardo (6 per quanto riguarda misure più incisive simili a quelle lombarde) ma – per i motivi menzionati sopra legati all’integrazione tra i due territori – l’evoluzione di casi in Ticino ha probabilmente beneficiato delle misure Lombarde soprattutto nei primi giorni. Per la Svizzera un trend di rallentamento è visibile solo negli ultimi 10 giorni circa. Questo si può spiegare con una reazione un po’ ritardata (o come annunciato “commisurata alle circostanze”) da parte degli altri Cantoni e della Confederazione. Il resto della Svizzera ha istituito misure analoghe al Ticino il giorno 16 marzo, ma ha reagito piuttosto passivamente prima di quella data. Le altre regioni di confine (Basilea, Zurigo, Ginevra, Vaud, ecc.) sono a loro volta integrate con Germania e Francia, paesi che hanno pure reagito con qualche settimana di ritardo rispetto all’Italia, epicentro iniziale della pandemia in Europa.
    È importante notare che il tasso di crescita dei casi dipende da alcuni fattori, tra cui: (1) il famoso R0, numero di riproduzione di base, che indica la contagiosità della malattia; (2) le misure di salute pubblica messe in atto (questo vale anche per R0); (3) la popolazione esposta e la popolazione contagiata totale (quando tutti sono infetti la crescita sarà strutturalmente nulla); (4) il tasso di recupero dalla malattia e lo sviluppo di immunità.
  2. Come anticipato, il numero assoluto di nuovi casi è legato al numero totale di casi. Questo perché più persone positive possono potenzialmente contagiare molte più persone. In Italia da circa 10 giorni sembra emergere un trend di diminuzione del numero assoluto di nuovi casi. Questo depone a favore delle misure prese dal Governo italiano, sebbene non sia ancora possibile trarre conclusioni definitive. I dati per Ticino e Svizzera non delineano ancora in modo chiaro una diminuzione del numero assoluto di nuovi casi. I dati ticinesi sono particolarmente “rumorosi”, con diversi momenti di falso ottimismo generati da quei picchi bassi di nuovi casi che sembrano essere più semplicemente irregolarità nei dati (orario di pubblicazione, ritardi nella raccolta dei dati e quindi nella trasmissione degli stessi alle autorità, ecc.).
  3. In nessuna regione si osserva una diminuzione dei casi totali. Nessuno ha insomma scollinato nella curva epidemiologica. Quando potremo osservare questa curva decrescere, potremo festeggiare (ma non ancora allentare tutte le misure e pensare di aver sconfitto il virus). Esattamente come dopo aver scalato una montagna, bisogna ancora scendere in sicurezza e tornare a casa.

Cosa ne pensate? Commenti benvenuti sotto.

IF, 01.04.2020

One thought on “Visualizzare l’evoluzione dei casi COVID-19 con R

  1. Leggera e macabra aggiunta alla formula:
    ATTUALMENTE malati = totale infetti – (totale guariti + totale morti).
    Eh si, purtroppo guariti e morti contano lo stesso nella statistica.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: