pcm-dpc / COVID-19

COVID-19 Italia - Monitoraggio situazione
Other
3.86k stars 2.24k forks source link

Stima R0 "semplificata" #587

Open alessandroNa opened 4 years ago

alessandroNa commented 4 years ago

Buongiorno a tutti,

mi chiedevo se calcolare il parametro R0 come rapporto tra i casi positivi in un dato istante (n) e i casi positivi all'istante (n-x) [con x ad esempio 7 o 14 giorni] sia un modo abbastanza preciso per avere una misura del parametro...

Cosa ne pensate?

Riccardocominotti commented 4 years ago

Secondo me sarebbe più corretto fare la stima rispetto al totale dei casi positivi. La stima di R0 dovrebbe rappresentare solamente la contagiosità del virus, quindi il fatto che un malato guarisca o muoia non dovrebbe incidere su questa stima.

Forse si potrebbe fare il rapporto tra la variazione del totale dei casi in due istanti temporali (es. a distanza di 7 giorni) ed il numero totale di casi nell'istante iniziale.

(P(tn+x) - P(tn)) / P(tn).

Praticamente però sarebbe come calcolare un incremento percentuale, temo che sia troppo semplicistico… Speriamo che qualcuno esperto ci possa aiutare.

pog87 commented 4 years ago

https://it.wikipedia.org/wiki/Numero_di_riproduzione_di_base#Variabilit%C3%A0_e_incertezze_del_R0

non vedo per ora modi semplici

LucaZeta commented 4 years ago

Adotto dall'inizio dell'epidemia il metodo indicato da DataEnthusiast84 sulla serie (tc) "totale_casi" con x=7 secondo la formula: R-n = (tc - tc-x) / (tc-x - tc-2x)

Applicando questa formula ad una serie geometrica calcolata per un dato R-0 restituisce valori coerenti. Al 1° mi restituisce il valore R-n = 0,70

alessandroNa commented 4 years ago

Ringrazio tutti quelli che hanno risposto...in particolare a @LucaZeta: mi potresti spiegare bene la tua formula? Perchè usi i (tc) "totale_casi" invece dei "casi attualmente positivi"?

Io sarei più spinto a considerare gli attualmente positivi in quanto misura dei effettiva dei positivi nel periodo in esame...in sostanza:

R0 = "attualmente positivi"(x) / "attualmente positivi" (x-n) dove n lo considero come periodo di incubazione e quindi 14 giorni...

LucaZeta commented 4 years ago

La formula in questione è un rapporto tra differenziali e prevede di essere applicata ad una serie incrementale (che cresce sempre).

la serie degli "attualmente positivi" che ora si chiama totale_positivi non è una serie incrementale, ma oscilla tra zero ad inizio epidemia, raggiunge un massimo, e quindi decresce fino a tornare nuovamente a zero.

Applicando a questa serie la formula ci si devono aspettare valori negativi quando si passa al ramo discendente della curva, il che in termini di R-n non ha senso.

alessandroNa commented 4 years ago

@LucaZeta ti ringrazio per la risposta.

In realtà i miei dubbi rimangono...nel senso che mi è chiaro il tuo procedimento, ma non non lo condivido molto dal punto di vista metodologico.

Schermata 2020-05-05 alle 18 38 37

Mi spiego meglio, facendo riferimento all'immagine spudoratamente ripresa da Wikipedia. Io calcolerei R0 considerando i positivi del giorno (x) / positivi del giorno (x-n) dove per positivi considero i pazienti in isolamento domiciliare + ricoverati con sintomi + terapia intensiva (l'immagine riporta "infected"). A onor del vero, in data odierna, in questo modo calcolo R0 (Italia) = 0,91 contro in realtà il dato riportato dal Corriere della Sera online di 0,80.

LucaZeta commented 4 years ago

Se costruiamo con Excel la serie di un ipotetica propagazione virale con R-0=1,4, possiamo poi applicare la formula che suggerisco ed ottenere così l'R-n nel punto che vogliamo, per il lasso ti tempo che vogliamo. immagine Con questo metodo si ottiene in data odierna, per le ultime 24 ore, un R-n = 0,88.

brunocaniglia commented 4 years ago

Dal momento che i dati puntuali giornalieri sono altalenanti, a causa della rilevazione del numero dei tamponi irregolare, piuttosto che determinare il rapporto tra due giornate (distanziate da un certo numero di giorni prefissato) penso sia meglio fare il calcolo sulla media di un dato numero di giorni. In tal modo si ottiene una curva più in linea con il reale andamento. Ad esempio, considerando una media mobile a 6 giorni e un periodo della stessa durata su cui determinare R0 ho ottenuto il seguente grafico relativamente ai dati Italia

immagine

E le seguenti rispettivamente per il Veneto e la Lombardia

immagine

immagine

Che ne pensate? Ciao Bruno

Sim98B commented 4 years ago

Salve a tutti, anche io sto da tempo cercando di stimare R0 e dopo aver letto questi commenti sto usando la formula proposta da LucaZeta facendo però la media, invece della differenza, tra due giornate come suggerito da brunocaniglia. Vorrei pero sapere la formula usata da brunocaniglia per calcolare l’indice gentilmente. Grazie a tutti

vi-enne commented 4 years ago

Nell'ultimo bollettino ISS, viene citato questo paper (preprint) per informazioni sul calcolo di Rt.

Non è un metodo "semplice", ma magari può essere utile.

Pivone commented 4 years ago

Salute a tutti, Seguo anch'io l'evolversi della epidemia. Ho sviluppato una serie di "indicatori" basati sui dati pubblicati dall protezione civile. Per quanto riguarda R0 seguo un metodo abbastanza semplice che mi permette di seguire e visualizzare l'andamento della curva sulla base dei dati reali (assumendo ovviamente che i dati pubblicati siano corretti e completi). Per seguire lo sviluppo dell'epidemia in ogni caso associo altre misurazioni/elaborazioni sempre dai dati della Protezione.

Nella tabella qui sotto Immagine1, il numero in ciascuna delle celle altro non e che la Ratio dei dati dei casi attivi (quindi con capacita' di contagiare) della giornata con i casi attivi di X giorni prima (X e' riportato in cima alle varie colonne e si va da un rapporto oggi/due giorni fa fino a oggi/14 giorni fa). La ratio nella cellula e' il moltiplicatore che ci dice, in media, quanti nuovi casi oggi sono stati stati contagiati dai casi di X giorni fa in poi. I colori della tabella servono a dare una misura visiva immediata di quello che sta succedendo. In rosso sono le cellule che evidenziano quando in media un caso ha portato al raddoppio o piu dei contagi in un numero X di giorni. Esempio R0 di 10.06 del giorno 20 Marzo ci dice che in media i contagiati di 14 giorni fa (ma in realta anche dopo) hanno portato ad aumentare di 10.06 volte il numero dei contagiati. Ovviamente su periodi piu' brevi (per esempio di 6-8 giorni) il valore R0 diminuisce.
In verde sono evidenziati le ratio inferiori ad 1 che indicano quando i nuovi contagi di oggi sono inferiori ai contagiati di X giorni fa e fino ad oggi. In giallo i valori tra 1 e 2. Migliorando la conoscenza della malattia (sapendo per esempio quale e' il periodo in cui un individuo e piu' contagioso uno puo tarare meglio le proprie tabelle - sno infatti recentemente studi che indicano che i periodi di maggior contagiosita sono quelli asintomatici prima o immediatamente dopo inizio sintomi).
Oggi 1 giugno i valori R0 per i periodi su cui io faccio il monitoraggio con questa tabella sono tutti negativi, quindi verdi, da moltissimi giorni. La colonna Slope 12 che vedete nella 5 colonna dell'immagine1 rappresenta l'inclinazione della retta di regressione lineare a 12 periodi. Valori negativi sono in verde ed indicano un trend in discesa degli ultimi 12 giorni (ma ovviamente potete usare qualsiasi altro periodo). Oltre a queste ratio dirette (oggi/X giorni fa) utilizzo anche al posto dei dati giornalieri una loro media mobile (3 o 5 o 7 giorni) per smussare picchi e poter cosi assorbire eventuali ritardi od imprecisioni dei dati. Ovviamente l'indicatore R0 cosi costruito si puo applicare anche ai dati regionali. il che e probilmente la maniera migliore per seguire e capire l'epidemia. Per seguire le province su cui sono purtroppo divulgati solo i dati cumulativi di positivita', io calcolo il valore assoluto di incremento giornaliero (valore di oggi meno il valore di ieri) e su questi dati calcolo la Slope come gia indicato sopra (vedi immagine 3).

Immagine1 image

Per facilitare la comprensione le formule della tabella sono visibili nella immagine2 qui sotto. Immagine2 image Immagine3 image

Sim98B commented 4 years ago

Grazie mille Pivone, mi sembra una delle formule più complete, ma purtroppo dalle foto che hai caricato non si riescono a leggere le formule, potresti gentilmente caricarne altre o scrivere direttamente le formule? Grazie mille

Pivone commented 4 years ago

Grazie Sim98B. Ti rimando una immagine assieme alle formule excel. Puoi copiare direttamente le formule su un foglio partendo dalla cellula A1. Le prime due colonne le devi ovviamente collegare con i dati scaricati: In colonna A la data; in colonna B i valori dei totali positivi. Come dicevo ieri puoi usare queste formule identiche anche per le regioni. Puoi inoltre completarle come ho fatto io usando medie mobili a tre periodi invece dei dati bruti (non ti copio la tabella credo sia facile da impostare). Con altri grafici faccio il monitoraggio anche di altri parametri dell'epidemia. Importante secondo me anche per una comparazione internazionale usare i dati della John Hopkins che sono ben piu limitati ma ci fanno vedere come altri paesi stanno facendo rispetto all'italia. E devo dire che facendo affidamento ai dati pubblici solo Austria Germania e Svizzera fanno come o meglio di noi. E nonostante le difficolta' ad aprire le nostre frontiere e far venire i turisti l'italia ha la meta dei casi attivi della Francia, lo stesso numero di casi attivi dell'olanda, meno casi attivi della Spagna etc.

Immagine2A image

Formule della immagine 2A

data ='download ITA'!F6 SMA3                              
='download ITA'!A7 ='download ITA'!F7                                
='download ITA'!A8 ='download ITA'!F8     Slope 12 Nuovi Positivi                          
='download ITA'!A9 ='download ITA'!F9 =AVERAGE(B2:B4)               Ratio of SMA3        
='download ITA'!A10 ='download ITA'!F10 =AVERAGE(B3:B5)           =W5 =X5 =Y5 =Z5 =AA5 =AB5 =AC5 =AD5 =AE5
='download ITA'!A11 ='download ITA'!F11 =AVERAGE(B4:B6)                              
='download ITA'!A12 ='download ITA'!F12 =AVERAGE(B5:B7)         =A7 =$C7/$C6-1 =$C7/OFFSET($C7,-W$5,0) =$C7/OFFSET($C7,-X$5,0) =$C7/OFFSET($C7,-Y$5,0) =$C7/OFFSET($C7,-Z$5,0) =$C7/OFFSET($C7,-AA$5,0) =$C7/OFFSET($C7,-AB$5,0) =$C7/OFFSET($C7,-AC$5,0) =$C7/OFFSET($C7,-AD$5,0) =$C7/OFFSET($C7,-AE$5,0)
='download ITA'!A13 ='download ITA'!F13 =AVERAGE(B6:B8)         =A8 =$C8/$C7-1 =$C8/OFFSET($C8,-W$5,0) =$C8/OFFSET($C8,-X$5,0) =$C8/OFFSET($C8,-Y$5,0) =$C8/OFFSET($C8,-Z$5,0) =$C8/OFFSET($C8,-AA$5,0) =$C8/OFFSET($C8,-AB$5,0) =$C8/OFFSET($C8,-AC$5,0) =$C8/OFFSET($C8,-AD$5,0) =$C8/OFFSET($C8,-AE$5,0)
='download ITA'!A14 ='download ITA'!F14 =AVERAGE(B7:B9)         =A9 =$C9/$C8-1 =$C9/OFFSET($C9,-W$5,0) =$C9/OFFSET($C9,-X$5,0) =$C9/OFFSET($C9,-Y$5,0) =$C9/OFFSET($C9,-Z$5,0) =$C9/OFFSET($C9,-AA$5,0) =$C9/OFFSET($C9,-AB$5,0) =$C9/OFFSET($C9,-AC$5,0) =$C9/OFFSET($C9,-AD$5,0) =$C9/OFFSET($C9,-AE$5,0)
='download ITA'!A15 ='download ITA'!F15 =AVERAGE(B8:B10)         =A10 =$C10/$C9-1 =$C10/OFFSET($C10,-W$5,0) =$C10/OFFSET($C10,-X$5,0) =$C10/OFFSET($C10,-Y$5,0) =$C10/OFFSET($C10,-Z$5,0) =$C10/OFFSET($C10,-AA$5,0) =$C10/OFFSET($C10,-AB$5,0) =$C10/OFFSET($C10,-AC$5,0) =$C10/OFFSET($C10,-AD$5,0) =$C10/OFFSET($C10,-AE$5,0)
='download ITA'!A16 ='download ITA'!F16 =AVERAGE(B9:B11)         =A11 =$C11/$C10-1 =$C11/OFFSET($C11,-W$5,0) =$C11/OFFSET($C11,-X$5,0) =$C11/OFFSET($C11,-Y$5,0) =$C11/OFFSET($C11,-Z$5,0) =$C11/OFFSET($C11,-AA$5,0) =$C11/OFFSET($C11,-AB$5,0) =$C11/OFFSET($C11,-AC$5,0) =$C11/OFFSET($C11,-AD$5,0) =$C11/OFFSET($C11,-AE$5,0)
='download ITA'!A17 ='download ITA'!F17 =AVERAGE(B10:B12)         =A12 =$C12/$C11-1 =$C12/OFFSET($C12,-W$5,0) =$C12/OFFSET($C12,-X$5,0) =$C12/OFFSET($C12,-Y$5,0) =$C12/OFFSET($C12,-Z$5,0) =$C12/OFFSET($C12,-AA$5,0) =$C12/OFFSET($C12,-AB$5,0) =$C12/OFFSET($C12,-AC$5,0) =$C12/OFFSET($C12,-AD$5,0) =$C12/OFFSET($C12,-AE$5,0)
='download ITA'!A18 ='download ITA'!F18 =AVERAGE(B11:B13)         =A13 =$C13/$C12-1 =$C13/OFFSET($C13,-W$5,0) =$C13/OFFSET($C13,-X$5,0) =$C13/OFFSET($C13,-Y$5,0) =$C13/OFFSET($C13,-Z$5,0) =$C13/OFFSET($C13,-AA$5,0) =$C13/OFFSET($C13,-AB$5,0) =$C13/OFFSET($C13,-AC$5,0) =$C13/OFFSET($C13,-AD$5,0) =$C13/OFFSET($C13,-AE$5,0)
='download ITA'!A19 ='download ITA'!F19 =AVERAGE(B12:B14)         =A14 =$C14/$C13-1 =$C14/OFFSET($C14,-W$5,0) =$C14/OFFSET($C14,-X$5,0) =$C14/OFFSET($C14,-Y$5,0) =$C14/OFFSET($C14,-Z$5,0) =$C14/OFFSET($C14,-AA$5,0) =$C14/OFFSET($C14,-AB$5,0) =$C14/OFFSET($C14,-AC$5,0) =$C14/OFFSET($C14,-AD$5,0) =$C14/OFFSET($C14,-AE$5,0)
='download ITA'!A20 ='download ITA'!F20 =AVERAGE(B13:B15)         =A15 =$C15/$C14-1 =$C15/OFFSET($C15,-W$5,0) =$C15/OFFSET($C15,-X$5,0) =$C15/OFFSET($C15,-Y$5,0) =$C15/OFFSET($C15,-Z$5,0) =$C15/OFFSET($C15,-AA$5,0) =$C15/OFFSET($C15,-AB$5,0) =$C15/OFFSET($C15,-AC$5,0) =$C15/OFFSET($C15,-AD$5,0) =$C15/OFFSET($C15,-AE$5,0)
='download ITA'!A21 ='download ITA'!F21 =AVERAGE(B14:B16)         =A16 =$C16/$C15-1 =$C16/OFFSET($C16,-W$5,0) =$C16/OFFSET($C16,-X$5,0) =$C16/OFFSET($C16,-Y$5,0) =$C16/OFFSET($C16,-Z$5,0) =$C16/OFFSET($C16,-AA$5,0) =$C16/OFFSET($C16,-AB$5,0) =$C16/OFFSET($C16,-AC$5,0) =$C16/OFFSET($C16,-AD$5,0) =$C16/OFFSET($C16,-AE$5,0)
='download ITA'!A22 ='download ITA'!F22 =AVERAGE(B15:B17)   Slope 12 Nuovi Positivi     =A17 =$C17/$C16-1 =$C17/OFFSET($C17,-W$5,0) =$C17/OFFSET($C17,-X$5,0) =$C17/OFFSET($C17,-Y$5,0) =$C17/OFFSET($C17,-Z$5,0) =$C17/OFFSET($C17,-AA$5,0) =$C17/OFFSET($C17,-AB$5,0) =$C17/OFFSET($C17,-AC$5,0) =$C17/OFFSET($C17,-AD$5,0) =$C17/OFFSET($C17,-AE$5,0)
='download ITA'!A23 ='download ITA'!F23 =AVERAGE(B16:B18)   =SLOPE(B7:B18,twelve)     =A18 =$C18/$C17-1 =$C18/OFFSET($C18,-W$5,0) =$C18/OFFSET($C18,-X$5,0) =$C18/OFFSET($C18,-Y$5,0) =$C18/OFFSET($C18,-Z$5,0) =$C18/OFFSET($C18,-AA$5,0) =$C18/OFFSET($C18,-AB$5,0) =$C18/OFFSET($C18,-AC$5,0) =$C18/OFFSET($C18,-AD$5,0) =$C18/OFFSET($C18,-AE$5,0)
='download ITA'!A24 ='download ITA'!F24 =AVERAGE(B17:B19)   =SLOPE(B8:B19,twelve)     =A19 =$C19/$C18-1 =$C19/OFFSET($C19,-W$5,0) =$C19/OFFSET($C19,-X$5,0) =$C19/OFFSET($C19,-Y$5,0) =$C19/OFFSET($C19,-Z$5,0) =$C19/OFFSET($C19,-AA$5,0) =$C19/OFFSET($C19,-AB$5,0) =$C19/OFFSET($C19,-AC$5,0) =$C19/OFFSET($C19,-AD$5,0) =$C19/OFFSET($C19,-AE$5,0)
='download ITA'!A25 ='download ITA'!F25 =AVERAGE(B18:B20)   =SLOPE(B9:B20,twelve)     =A20 =$C20/$C19-1 =$C20/OFFSET($C20,-W$5,0) =$C20/OFFSET($C20,-X$5,0) =$C20/OFFSET($C20,-Y$5,0) =$C20/OFFSET($C20,-Z$5,0) =$C20/OFFSET($C20,-AA$5,0) =$C20/OFFSET($C20,-AB$5,0) =$C20/OFFSET($C20,-AC$5,0) =$C20/OFFSET($C20,-AD$5,0) =$C20/OFFSET($C20,-AE$5,0)
='download ITA'!A26 ='download ITA'!F26 =AVERAGE(B19:B21)   =SLOPE(B10:B21,twelve)     =A21 =$C21/$C20-1 =$C21/OFFSET($C21,-W$5,0) =$C21/OFFSET($C21,-X$5,0) =$C21/OFFSET($C21,-Y$5,0) =$C21/OFFSET($C21,-Z$5,0) =$C21/OFFSET($C21,-AA$5,0) =$C21/OFFSET($C21,-AB$5,0) =$C21/OFFSET($C21,-AC$5,0) =$C21/OFFSET($C21,-AD$5,0) =$C21/OFFSET($C21,-AE$5,0)
='download ITA'!A27 ='download ITA'!F27 =AVERAGE(B20:B22)   =SLOPE(B11:B22,twelve)     =A22 =$C22/$C21-1 =$C22/OFFSET($C22,-W$5,0) =$C22/OFFSET($C22,-X$5,0) =$C22/OFFSET($C22,-Y$5,0) =$C22/OFFSET($C22,-Z$5,0) =$C22/OFFSET($C22,-AA$5,0) =$C22/OFFSET($C22,-AB$5,0) =$C22/OFFSET($C22,-AC$5,0) =$C22/OFFSET($C22,-AD$5,0) =$C22/OFFSET($C22,-AE$5,0)
='download ITA'!A28 ='download ITA'!F28 =AVERAGE(B21:B23)   =SLOPE(B12:B23,twelve)     =A23 =$C23/$C22-1 =$C23/OFFSET($C23,-W$5,0) =$C23/OFFSET($C23,-X$5,0) =$C23/OFFSET($C23,-Y$5,0) =$C23/OFFSET($C23,-Z$5,0) =$C23/OFFSET($C23,-AA$5,0) =$C23/OFFSET($C23,-AB$5,0) =$C23/OFFSET($C23,-AC$5,0) =$C23/OFFSET($C23,-AD$5,0) =$C23/OFFSET($C23,-AE$5,0)
='download ITA'!A29 ='download ITA'!F29 =AVERAGE(B22:B24)   =SLOPE(B13:B24,twelve)     =A24 =$C24/$C23-1 =$C24/OFFSET($C24,-W$5,0) =$C24/OFFSET($C24,-X$5,0) =$C24/OFFSET($C24,-Y$5,0) =$C24/OFFSET($C24,-Z$5,0) =$C24/OFFSET($C24,-AA$5,0) =$C24/OFFSET($C24,-AB$5,0) =$C24/OFFSET($C24,-AC$5,0) =$C24/OFFSET($C24,-AD$5,0) =$C24/OFFSET($C24,-AE$5,0)
='download ITA'!A30 ='download ITA'!F30 =AVERAGE(B23:B25)   =SLOPE(B14:B25,twelve)     =A25 =$C25/$C24-1 =$C25/OFFSET($C25,-W$5,0) =$C25/OFFSET($C25,-X$5,0) =$C25/OFFSET($C25,-Y$5,0) =$C25/OFFSET($C25,-Z$5,0) =$C25/OFFSET($C25,-AA$5,0) =$C25/OFFSET($C25,-AB$5,0) =$C25/OFFSET($C25,-AC$5,0) =$C25/OFFSET($C25,-AD$5,0) =$C25/OFFSET($C25,-AE$5,0)
='download ITA'!A31 ='download ITA'!F31 =AVERAGE(B24:B26)   =SLOPE(B15:B26,twelve)     =A26 =$C26/$C25-1 =$C26/OFFSET($C26,-W$5,0) =$C26/OFFSET($C26,-X$5,0) =$C26/OFFSET($C26,-Y$5,0) =$C26/OFFSET($C26,-Z$5,0) =$C26/OFFSET($C26,-AA$5,0) =$C26/OFFSET($C26,-AB$5,0) =$C26/OFFSET($C26,-AC$5,0) =$C26/OFFSET($C26,-AD$5,0) =$C26/OFFSET($C26,-AE$5,0)
='download ITA'!A32 ='download ITA'!F32 =AVERAGE(B25:B27)   =SLOPE(B16:B27,twelve)     =A27 =$C27/$C26-1 =$C27/OFFSET($C27,-W$5,0) =$C27/OFFSET($C27,-X$5,0) =$C27/OFFSET($C27,-Y$5,0) =$C27/OFFSET($C27,-Z$5,0) =$C27/OFFSET($C27,-AA$5,0) =$C27/OFFSET($C27,-AB$5,0) =$C27/OFFSET($C27,-AC$5,0) =$C27/OFFSET($C27,-AD$5,0) =$C27/OFFSET($C27,-AE$5,0)
='download ITA'!A33 ='download ITA'!F33 =AVERAGE(B26:B28)   =SLOPE(B17:B28,twelve)     =A28 =$C28/$C27-1 =$C28/OFFSET($C28,-W$5,0) =$C28/OFFSET($C28,-X$5,0) =$C28/OFFSET($C28,-Y$5,0) =$C28/OFFSET($C28,-Z$5,0) =$C28/OFFSET($C28,-AA$5,0) =$C28/OFFSET($C28,-AB$5,0) =$C28/OFFSET($C28,-AC$5,0) =$C28/OFFSET($C28,-AD$5,0) =$C28/OFFSET($C28,-AE$5,0)
='download ITA'!A34 ='download ITA'!F34 =AVERAGE(B27:B29)   =SLOPE(B18:B29,twelve)     =A29 =$C29/$C28-1 =$C29/OFFSET($C29,-W$5,0) =$C29/OFFSET($C29,-X$5,0) =$C29/OFFSET($C29,-Y$5,0) =$C29/OFFSET($C29,-Z$5,0) =$C29/OFFSET($C29,-AA$5,0) =$C29/OFFSET($C29,-AB$5,0) =$C29/OFFSET($C29,-AC$5,0) =$C29/OFFSET($C29,-AD$5,0) =$C29/OFFSET($C29,-AE$5,0)
='download ITA'!A35 ='download ITA'!F35 =AVERAGE(B28:B30)   =SLOPE(B19:B30,twelve)     =A30 =$C30/$C29-1 =$C30/OFFSET($C30,-W$5,0) =$C30/OFFSET($C30,-X$5,0) =$C30/OFFSET($C30,-Y$5,0) =$C30/OFFSET($C30,-Z$5,0) =$C30/OFFSET($C30,-AA$5,0) =$C30/OFFSET($C30,-AB$5,0) =$C30/OFFSET($C30,-AC$5,0) =$C30/OFFSET($C30,-AD$5,0) =$C30/OFFSET($C30,-AE$5,0)
Riccardocominotti commented 4 years ago

Il metodo di Pivone mi sembra molto interessante, tant'è che l'ho integrato nella mia statistica. Non credo però che si tratti del calcolo di R0 (o RT), che deriva dal modello SERT...

Pivone commented 4 years ago

Le formule postate non servono certamente a calcolare R0 o RT come descritti in letteratura. Per la metodologia ci sono vari articoli in linea - vi rimando ad un paper recente in proposito sul Swiss Medical Weekly - https://smw.ch/article/doi/smw.2020.20271 - che e' interessante ed abbastanza chiaro metodologicamente. Tra l'altro, se non ricordo male usano dei tools disponibili su github per i calcoli. Le formule del post precedente sono pero' molto piu pratiche, utili e a parte la limitazione dei dati dal punto epidemiologico dicono cose non dissimili e danno risultati molto compatibili con quelli ufficiali. Dopo aver postato il messaggio precedente mi sono imbattuto in questo articolo (scritto ben dopo che io avevo impostato le mie formule) che spiega molto bene il rationale di usare la ratio come descritta sopra. La sola differenza e' che in realta' io uso periodi diversi dai 4 giorni indicati nell'articolo - più lunghi oltre che variabili. https://medium.com/@ekohlberg_47501/a-simple-score-to-tell-if-we-are-beating-the-virus-49e74b707e35. Non concordo su tutto quello scritto e ritengo che misure tipo F nell'articolo non siano strettamente necessari in pratica. Ma non e certo utile entrare in una discussione a proposito in questa sede. Inizio qui sotto una sbrodolata su come uso manipolo i dati e cosa leggo nei numeri della protezione. Se avete da condividere analisi ulteriori a quelle che descrivo nella __sbrodolatave ne sarò certamente grato. Quando ho iniziato ad interessarmi della epidemia, cercavo solamente di mettere insieme dei tools che mi permettessero di "leggere" i numeri al di fuori del rumore delle notizie e con dati facilmente disponibili - anche se inevitabilmente approssimativi come sempre si hanno in queste situazioni. I dati postati dalla Protezione Civile sono sotto questo punto di vista perfetti allo scopo nella loro imperfezione da mondo reale. E dopo un po di prove ho scoperto che i dati con gli indicatori che da questi possono generare permettono di comprendere molto sull'evoluzione del contagio e su come la sanita' pubblica si e' mossa, anche in maniera differente in varie regioni di Italia. Osservo i soliti indicatori di trend dei contagi e del numero di casi attivi dei morti etc per lo più con le inclinazioni delle regressioni su periodi diversi (dai 5 ai 7 ai 10 e 14 gg) e che mi permettono comparazioni numeriche tra per esempio regioni o paesi diversi, molto più facilmente che le medie mobili.
Faccio anche un monitoraggio giornaliero della ratio tra i pazienti ricoverati (sia ospedale che in ICU) ed i pazienti totali positivi. Mi da informazioni interessanti: per esempio la lombardia solo recentemente ha superato il valore di 5 e solo al 20 aprile e arrivata sopra 2. Il che significa che in lombardia per molto tempo hanno fatto i tests (e quindi riportavano i casi) praticamente solo ai paziento tanto gravi da dovere essere ospedalizzati oltre che, immagino, agli operatori critici come i medici ed infermieri, polizia etc. Che questa sia stata una situazione disastrosa lo vediamo ancora oggi. Per sapere se si fosse potuto far di meglio image Si può comparare la stessa ratio di altre regioni - veneto o friuli - dove le curve sono ben diverse. Non esistono targets fissi per queste ratio. Sulla base dei dati cinesi avevo calcolato che, circa, tra il 15% ed il 20% o poco più dei pazienti abbisogna di una ospedalizzazione: di qui una ratio minima tra il 5 ed il 6.6 con punte ben più elevate in altre regioni. Queste curve hanno, empiricamente ed a prima vista una apparente correlazione con la mortalita' (case fatality rate) che varia da regione a regione - ma non ho ancora fatto delle analisi un più serie: potrebbe quindi essere solo una mia impressione. image Assieme alla ratio pazienti totali/pazienti ospedalizzati seguo anche la ratio tra il numero dei casi in isolamento in una certa data rapportato con lo stesso dato n giorni indietro nel tempo (uso per lo piu' un periodo di 14 giorni che corrisponde alla quarantena). Ovviamente non appena la ratio scende sotto 1 significa che il numero ufficiale di individui in quarantena sta scendendo rispett n giorni prima. Ma ovviamente questa ratio scende anche se si riduce il numero di tests. Quindi considero "buono" un valore inferiore ad 1 solo se contemporaneamente la ratio pazienti totali/pazienti ospedalizzati e' superiore a 5 ed in ogni caso visivamente in crescita (ma si potrebbe calcolare la slope anche su questa ratio). Con l'aiuto di Eureqa (si può ancora scaricare e si può usare in prova per un mese) ho cercato dei modelli matematici sulle mortalità per cercare di capire almeno da che gruppo di pazienti provenissero (ricoverati a casa, ospedalizzati regolari oppure in cure intensive) ed alcuni dei modelli che il software mi ritornava corrispondevano in maniera sorprendete alle analisi di mortalità pubblicate dall'ISS, almeno per quanto i tempi di ricovero nei tre gruppi. Non ho avuto tempo recentemente di rilanciare questa analisi/ricerca con i dati piu recenti ma spero di riuscire a riprovarci a breve. Ci sono altri indicatori che sarebbe interessante seguire (le ratio ospedalizzati o in terapie intensiva vs il totale dei pazienti diagnosticati - comparate ai tassi di mortalità - vedi esempio germania che ha fatto diagnosi a tappeto sin dall'inizio con identificazione ed isolamento dei contagiati e che riesce a seguire giornalmente i pazienti sin dai primi sintomi e ad intervenire tempestivamente in caso di deterioramento avendo alla fine tassi di mortalità bassissimi in confronto a quelli italiani). Ora mi fermo, ma credo che questo set di dati aggregati (a cui mi riprometto da tempo di aggiungere i dati sui tamponi da wikipedia) permetta un bel po di analisi interessanti anche senza avere accesso a dati individuali tipo cartelle pazienti. E soprattutto permetta di fare uno screening ragionato e serio delle notizie e di rigettare le molte cose fuorvianti che sono state dette e scritte in proposito.
Come detto sopra fatemi sapere se ci sono analisi importanti che ho mancato e che volete condividere

mpreitano commented 4 years ago

Buongiorno, non conoscevo l'esistenza di questa discussione. Seguo l'evolversi dall'epidemia dal suo inizio e ho elaborato un metodo abbastanza rozzo ma, credo, piuttosto efficace nel calcolare l'indice RT. Io mi baso unicamente sull'analisi dei casi ICU, basandomi sull'assunto che, come effetto secondario, il conteggio dei casi in terapia intensiva sia un formidabile indicatore dell'andamento del contagio nel suo complesso. Un'evidenza che mi sembrerebbe plasticamente rappresentata dal confronto dei grafici della curva ICU con quella dei casi positivi:

image

Cio che ho fatto non è altro che ricalcare l'andamento dei casi in terapia intensiva con spezzoni di curve gaussiane in modo da ottenere dei dati più regolari e potermi spingere a ipotizzare un indice rt in modo predittivo.

Questo è il risultato del mio lavoro su alcune delle regioni:

Schermata 2020-06-17 alle 08 36 25 Schermata 2020-06-17 alle 08 36 38 Schermata 2020-06-17 alle 08 36 54 Schermata 2020-06-17 alle 08 37 12

E questo è il risultato finale a livello di paese:

Schermata 2020-06-17 alle 08 38 11

Per quanto riguarda il metodo elaborato, non faccio altro che una media delle ratio tra le differenze di casi ICU a 3, 5 e 7 giorni e successivamente una media di queste medie calcolata sugli ultimi 7 giorni

Questo è il risultato della mia stima dell'andamento Rt dall'inizio dell'epidemia al giorno stimato del suo spegnimento:

Schermata 2020-06-17 alle 08 44 52

Dall'analisi dei dati mi risulta che l'ultima regione ad uscire dall'epidemia sarà il Lazio e non la Lombardia. Per essere più precisi, i casi in terapia intensiva delle due regioni dovrebbero equipararsi all'inizio di luglio e, successivamente, calare non una diversa tendenza indice, presumo, di un diverso tasso di diffusione del contagio.

Per chiunque avesse voglia di approfondire i mio lavoro ho pubblicato un report Powerbi interattivo Inoltre ho pubblicato considerazioni sparse su alcuni articoli su LinkedIn (ho linkato l'ultimo in ordine di tempo.

migius commented 4 years ago

L'andamento del Lazio è davvero particolare, anche il rapporto tra numero di contagiati ufficiale e numero di ricoverati in terapia intensiva è molto diverso da quello delle altre regioni (perlomeno quelle con dei numeri significativi). A cosa può essere dovuto: una diversa politica nel fare tamponi o un approccio diverso al ricovero i terapia intensiva?

mpreitano commented 4 years ago

Una diversa politica nei tamponi mi sembra probabile. Qualcosa sembra essere cambiato sicuramente dall'inizio di Aprile. Guardando il grafico si può notare un repentino crollo nonostante l'andamento sia sempre lo stesso. Per inciso un crollo analogo esattamente nello stesso periodo l'ho notato in altre regioni dell'Italia centrale come Toscana e Umbria.

Schermata 2020-06-18 alle 09 02 02

Sul diverso approccio della terapia intensiva me lo sono chiesto anch'io, e qualcosa avevo sentito in proposito da Garattini mi pare, ma non sarebbe una spiegazione sufficiente secondo me.

Banalmente credo che i tamponi non stiano fotografando la situazione. Più in generale mi chiedo se i tamponi possano essere considerati un valido strumento di indagine su larga scala. Credo che la loro efficacia in questo senso sia massima solo su focolai individuati, come è stato il caso dello screening di Crisanti su Vo' Euganeo. In tutti gli altri casi è come cercare un ago nel pagliaio

LucaZeta commented 4 years ago

Una evoluzione del metodo già presentato e che viene, ce ne fosse stato bisogno, confermato. immagine

vi-enne commented 4 years ago

Aggiungo carne al fuoco: qualche tempo fa abbiamo sviluppato un'applicazione in Shiny per la stima di Rt. La trovate qui:

https://vienne.shinyapps.io/rt_estimation/

Ci sono dei dati di prova estratti dai Report ISS, ma l'idea e' permettere all'utente di stimare Rt in modo semplice con dati proprio, senza avere una conoscenza avanzata di codice :)

angeloriccardi commented 3 years ago

Buongiono, c'è cortesemente qualcuno che riesce a calcolarmi il fattore RT per la Puglia, la Provincia di Foggia e il Comune di Manfredonia, ve ne sarei grato. Grazie. Angelo Riccardi

LucaZeta commented 3 years ago

c'è cortesemente qualcuno che riesce a calcolarmi il fattore RT per la Puglia

Buongiorno Angelo, se ti può essere utile qui trovi il grafico che riporta l'incidenza giornaliera della regione puglia, l'interpolazione dei singoli punti e l'Rt su base giornaliera calcolato sulla curva di interpolazione.

Ale4224 commented 3 years ago

Ciao,

Ho provato a comprendere ed implementare la formula di calcolo di Rt definita su Wikipedia che riporto:

image

Dove It è il numero di infetti al momento t e Ws è una funzione di Distribuzione Gamma

Se non ho capito male quindi Rt corrisponde al rapporto tra gli infetti al momento t e la sommatoria degli infetti al momento t-s proporzionati alla probabilità che essi siano la causa degli infetti di t, con s che va da 1 a t. Quindi se il denominatore, cioè il numero di infetti stimato al momento t secondo la Distribuzione Gamma, è minore del numeratore, il numero effettivo di infetti al momento t, si ha un Rt maggiore di 1. La probabilità sopra citata, definita nella formula come Ws, è una Distribuzione Gamma con parametri di shape α = 1.87 e rate β = 0.28, stimata su dati della Regione Lombardia (parametri recuperati sempre da Wikipedia)

Da questa formula si può scrivere l'algoritmo di calcolo di Rt ad ogni giorno da febbraio

//shape della Distribuzione Gamma
const A = 1.87
//rate della Distribuzione Gamma
const B = 0.28
//Inizializzo la Distribuzione Gamma per 1000 giorni
const gammaResults = libR.Gamma().dgamma([...Array(1000).keys()], A, B)
let calcoloRT = function(lista_infetti) {
    let result = []
    //ciclo sulla lista degli infetti
    for (t in lista_infetti) {
        //Il primo giorno do per scontato che Rt sia 0
        if (t == 0) {
            result.push(0)
            continue
        }
        let sum = 0
        //ciclo di nuovo sulla lista degli infetti con indice s=1 fino a s=t
        for (let s = 1; s <= t; s++) {
            //moltiplico il numero degli infetti al momento t-s con la probabilità risultante dalla Distribuzione Gamma
            //e sommo il tutto
            sum += gammaResults[s] * lista_infetti[t - s]
        }
        //Rt = proporzione tra infetti al momento t e somma
        result.push(lista_infetti[t] / sum)
    }
    return result.map(x => Number(x.toFixed(2)));
}

Nell'algoritmo il calcolo della distribuzione Gamma è eseguito con la libreria lib-r-math.js per la quale ho dovuto usare browserify per farla andare sul browser

Questo algoritmo mi restituisce una lista di Rt per ogni giorno da febbraio Data la lista posso mostrare i dati graficamente, utilizzando la lista degli infetti mediata a 15 giorni e rimuovento i primi mesi perchè non veritieri, dato che ci sono pochi dati e come sopra detto Rt si calcola in base agli infetti dei giorni passati

image

Detto ciò, i risultati che mi ritrovo a livello nazionale sembrano verosimili confrontandoli con i dati di Rt recuperati da varie testate giornalistiche, dato che davano un Rt nazionale che scendeva da 1.7 a 1.4 a cavallo tra ottobre e novembre e i miei calcoli mostrano pressochè gli stessi valori, ma calcolando l'Rt regionale i dati non tornano, dato che qui si parla di 2.9 e 2.16 per Lombardia e Piemonte al 30 di ottobre mentre dai miei calcoli esce rispettivamente 1.9 e 1.8

image

Qualcuno ha provato a fare qualcosa di simile? Sapete dirmi se sto sbagliando qualcosa?

Se siete interessati vi lascio il link al sito dove ho implementato l'algoritmo. Il codice della pagina lo trovate sul mio profilo github

SimoPert commented 3 years ago

Ciao, anche io stavo cercando di calcolare l'indice Rt. Sul sito dell'ISS ho trovato questo articolo: "Cori A, Ferguson NM, Fraser C, Cauchemez S. A new framework and software to estimate time-varying reproduction numbers during epidemics. Am J Epidemiol. 2013;178(9):1505-1512. doi:10.1093/aje/kwt133" Che rimanda ad un software scritto in R e un foglio Excel( http://tools.epidemiology.net/EpiEstim.xls)per il calcolo di Rt. Non avendo mai utilizzato il linguaggio di programmazione R mi sono buttato sul foglio Excel che sembra ben fatto e chiaro. Tuttavia si incappa presto in un problema. Appena si lancia la Macro per il calcolo dell'Rt il foglio va in overflow. Il problema è causato dal fatto che si possono utilizzare numeri di tipo integer non più grandi di circa 36000. Essendo il numero di nuovi positivi, in alcuni giorni, maggiore di questo limite, si ha il suddetto problema di overflow. Una possibile soluzione sarebbe quella di convertire il tipo di numero da "integer" a "long". Purtroppo non sono così esperto di Excel per poter modificare la Macro (che tralaltro probabilmente è protetta da scrittura).

Se qualcuno è più esperto di me potrebbe provare a lavorarci.

Il mer 18 nov 2020, 18:02 Alessandro Tassinari notifications@github.com ha scritto:

Ciao,

Ho provato a comprendere ed implementare la formula di calcolo di Rt definita su Wikipedia https://it.wikipedia.org/wiki/Numero_di_riproduzione_di_base#Numero_di_riproduzione_netto_al_tempo_t che riporto:

[image: image] https://user-images.githubusercontent.com/71638599/99554531-975ed900-29bf-11eb-8d07-9fe84b0d4c06.png

Dove It è il numero di infetti al momento t e Ws è una funzione di Distribuzione Gamma

Se non ho capito male quindi Rt corrisponde al rapporto tra gli infetti al momento t e la sommatoria degli infetti al momento t-s proporzionati alla probabilità che essi siano la causa degli infetti di t, con s che va da 1 a t. Quindi se il denominatore, cioè il numero di infetti stimato al momento t secondo la Distribuzione Gamma, è minore del numeratore, il numero effettivo di infetti al momento t, si ha un Rt maggiore di 1. La probabilità sopra citata, definita nella formula come Ws, è una Distribuzione Gamma https://it.wikipedia.org/wiki/Distribuzione_Gamma con parametri di shape α = 1.87 e rate β = 0.28, stimata su dati della Regione Lombardia (parametri recuperati sempre da Wikipedia)

Da questa formula si può scrivere l'algoritmo di calcolo di Rt ad ogni giorno da febbraio

//shape della Distribuzione Gamma

const A = 1.87

//rate della Distribuzione Gamma

const B = 0.28

//Inizializzo la Distribuzione Gamma per 1000 giorni

const gammaResults = libR.Gamma().dgamma([...Array(1000).keys()], A, B)

let calcoloRT = function(lista_infetti) {

let result = []

//ciclo sulla lista degli infetti

for (t in lista_infetti) {

    //Il primo giorno do per scontato che Rt sia 0

    if (t == 0) {

        result.push(0)

        continue

    }

    let sum = 0

    //ciclo di nuovo sulla lista degli infetti con indice s=1 fino a s=t

    for (let s = 1; s <= t; s++) {

        //moltiplico il numero degli infetti al momento t-s con la probabilità risultante dalla Distribuzione Gamma

        //e sommo il tutto

        sum += gammaResults[s] * lista_infetti[t - s]

    }

    //Rt = proporzione tra infetti al momento t e somma

    result.push(lista_infetti[t] / sum)

}

return result.map(x => Number(x.toFixed(2)));

}

Nell'algoritmo il calcolo della distribuzione Gamma è eseguito con la libreria lib-r-math.js https://github.com/R-js/libRmath.js?files=1 per la quale ho dovuto usare browserify http://browserify.org/ per farla andare sul browser

Questo algoritmo mi restituisce una lista di Rt per ogni giorno da febbraio Data la lista posso mostrare i dati graficamente, utilizzando la lista degli infetti mediata a 15 giorni e rimuovento i primi mesi perchè non veritieri, dato che ci sono pochi dati e come sopra detto Rt si calcola in base agli infetti dei giorni passati

[image: image] https://user-images.githubusercontent.com/71638599/99558356-eeff4380-29c3-11eb-86fd-89a5d3eba7ea.png

Detto ciò, i risultati che mi ritrovo a livello nazionale sembrano verosimili confrontandoli con i dati di Rt recuperati da varie testate giornalistiche, dato che davano un Rt nazionale che scendeva da 1.7 a 1.4 a cavallo tra ottobre e novembre e i miei calcoli mostrano pressochè gli stessi valori, ma calcolando l'Rt regionale i dati non tornano, dato che qui https://www.tgcom24.mediaset.it/cronaca/covid-iss-lindice-rt-in-italia-sale-a-1-7-cinque-regioni-sono-gi-in-scenario-4_24853225-202002a.shtml si parla di 2.9 e 2.16 per Lombardia e Piemonte al 30 di ottobre mentre dai miei calcoli esce rispettivamente 1.9 e 1.8

[image: image] https://user-images.githubusercontent.com/71638599/99559376-05f26580-29c5-11eb-9d35-7b6b072078de.png

Qualcuno ha provato a fare qualcosa di simile? Sapete dirmi se sto sbagliando qualcosa?

Se siete interessati vi lascio il link al sito https://ale4224.github.io/coviditalia/ dove ho implementato l'algoritmo. Il codice della pagina lo trovate sul mio profilo github

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/pcm-dpc/COVID-19/issues/587#issuecomment-729815522, or unsubscribe https://github.com/notifications/unsubscribe-auth/ARKJKCM4KKYACUXWRR2WF2LSQP4Z7ANCNFSM4MO6YQVQ .

vi-enne commented 3 years ago

Aggiungo carne al fuoco: qualche tempo fa abbiamo sviluppato un'applicazione in Shiny per la stima di Rt. La trovate qui:

https://vienne.shinyapps.io/rt_estimation/

Ci sono dei dati di prova estratti dai Report ISS, ma l'idea e' permettere all'utente di stimare Rt in modo semplice con dati proprio, senza avere una conoscenza avanzata di codice :)

Ciao, per il modello di Cori vi segnalo questa applicazione che abbiamo sviluppato tempo fa usando il pacchetto EpiEstim. Attenzione perché, come con tutti i modelli matematici, Garbage In = Garbage Out.

In particolare, attenzione e non usare i casi per data di notifica: usare piuttosto i dati dei sintomatici per data di inizio sintomi. Al momento questi dati sono disponibili dalla dashboard di ISS solo per l'Italia al completo. Quelli per ciascuna regione possono essere estratti, con molta difficoltà, dai grafici dei bollettini settimanali regionali.

Ale4224 commented 3 years ago

@SimoPert Molto interessante l'excel che hai linkato (ps. il link è scritto male) Ho fatto diverse prove mettendo il numero dei casi giornalieri diviso 10, in modo tale da non superare il limite massimo dell'Integer che è di 32767 (scalando i numeri la proporzione non varia, se non del decimale che si perde ma direi che è trascurabile), così facendo la simulazione funziona senza dare errori e abbastanza veritiera, soprattutto sui grandi numeri. Mi sono messo poi a giocare con il Serial Interval dell'excel e mettendo la distribuzione che ho calcolato nel mio algoritmo con la libreria js il risultato degli Rt è lo stesso calcolato da me, almeno ho una conferma che l'algoritmo sia corretto. La questione diventa quindi, qual è il Serial Interval da utilizzare? Wikipedia, come dicevo nel commento precedente, dice di utilizzare una Distribuzione Gamma con parametri di shape α = 1.87 e rate β = 0.28 e così facendo mi escono numeri ad occhio veritieri rispetto a quelli che trovo sui giornali solamente per il numero di casi nazionali, ma il Rt regionale non mi torna