Estendere i test COVID-19 a tutta la popolazione? Si, ma attenzione a Bayes

Come suggerito dall’OMS, molte strategie di uscita dalla situazione di emergenza pandemia prevedono l’accessibilità a test per diagnosticare COVID-19, potenzialmente test rapidi estesi a tutta la popolazione.

Due parametri fondamentali da considerare nella valutazione di un test diagnostico sono la sensibilità e la specificità. La sensibilità misura la percentuale di veri positivi identificati dal test. In altre parole, di 100 persone realmente malate, quante vengono identificate dal test?
La specificità indica invece la capacità del test di identificare correttamente le persone sane. In altre parole, di 100 persone sane, quante staranno effettivamente identificate come sane dal test?

Entrambi i parametri sono molto importanti. È tuttavia molto raro che un test rapido possa avere sensibilità e specificità pari a 100%. Nel caso dei test diagnostici per COVID-19, due test approvati e sul mercato in Europa (vedi qui) hanno sensibilità 88.7% e 95,2% rispettivamente, mentre la loro specificità è di 90,6% e 98%.

Credo sia però interessante sapere che – anche con valori alti di questi parametri (99% ad esempio) – estendere un test diagnostico ad una intera popolazione nel caso di una malattia poco prevalente nella popolazione può portare a risultati controintuitivi. Infatti, sebbene intuitivamente si potrebbe immaginare che un test con sensibilità 99% identifichi ciascun caso positivo con una probabilità del 99%, la risposta corretta è molto diversa per malattie poco prevalenti, ossia con una bassa proporzione di malati nella popolazione.

Nulla di nuovo o complicato, ma certamente controintuitivo. Questo effetto – che risulta evidente in virtù del teorema di Bayes – si può visualizzare in modo efficace con una semplice tabella con:
– una popolazione di 350’000 persone (simile a quella ticinese)
– immaginando una prevalenza 10 volte l’attuale tasso di casi positivi COVID-19, quindi 3500 casi per 100’000
– ipotizzando un test con sensibilità e specificità al 99%

MalatiSaniTotale
Test +12’1273’37815’505
Test –123334’372334’495
Totale12’250337’750350’000

Nello scenario rappresentato nella tabella, la probabilità di essere malati dato un test positivo è 12’127/15’505=78%. L’alta percentuale di falsi positivi è data dallo squilibrio tra persone malate (poche) e sane (molte).

L’entità dell’effetto è proporzionale alla prevalenza della malattia. Attualmente, circa 30’000 persone sono risultate positive a COVID-19 in Svizzera. Non tutti i malati sono però stati identificati, perciò la vera prevalenza potrà risultare fino a 15 volte superiore agli attuali 350 casi per 100’000 abitanti. Ipotizzando un test con 99% sensibilità e specificità, la probabilità di essere malati dato un test positivo potrebbe essere nel migliore dei casi di circa 80%. Questo significa che 20% dei casi identificati sarebbero “falsi positivi”. Grazie ad alcune linee di codice R, si può generare questo grafico che mostra il legame tra falsi positivi e vera prevalenza della malattia nella popolazione (le linee blu indicano 5, 10 e 15 volte la “prevalenza” attuale che sappiamo essere sottostimata) per un test sensibile e specifico al 99%.

La percentuale di falsi positivi si legge calcolando la differenza tra 100% e il dato indicato dalla linea rossa.

Nel caso in cui utilizzassimo un test sensibile all’88.7% e specifico al 90.6%, la situazione sarebbe invece la seguente.

La percentuale di falsi positivi si legge calcolando la differenza tra 100% e il dato indicato dalla linea rossa.

Proporre un test all’intera popolazione ha ovviamente delle implicazioni finanziarie per il sistema sanitario. Nel fare le loro scelte, uno dei fattori che le autorità dovranno soppesare è proprio questa alta probabilità di falsi positivi che potrebbe portare a decisioni dannose per la società e l’economia.

Codice R per i grafici

testing=function(sens,spec, prev){
data.frame(cbind(c(sens*prev+(1-spec)*(1-prev)),
                         c((sens*prev)/(sens*prev+(1-spec)*(1-prev))))
                   )
}

prevalence=seq(0.0035,0.0525,0.001)
test99=testing(0.99,0.99,prevalence)
test80=testing(0.887,0.906,prevalence)

png(file="testing_80.png")
par(mfrow=c(1,1))
plot(prevalence*100000,test80$X2*100,main="Veramente malato, dato un test positivo", xlab="Casi per 100'000 pop.",ylab="Prob.",type="l",col="red")
abline(h=0,v=0.0035*100000,col="blue")
abline(h=0,v=0.0176*100000,col="blue")
abline(h=0,v=0.035*100000,col="blue")
abline(h=0,v=0.0525*100000,col="blue")
text(0.0035*100000,20,"Casi attuali",pos=4)
text(0.0176*100000,30,"5x",pos=2)
text(0.035*100000,30, "10x",pos=2)
text(0.0525*100000,30, "15x",pos=2)
dev.off()

png(file="testing_99.png")
par(mfrow=c(1,1))
plot(prevalence*100000,test99$X2*100,main="Veramente malato, dato un test positivo", xlab="Casi per 100'000 pop.",ylab="Prob.",type="l",col="red")
abline(h=0,v=0.0035*100000,col="blue")
abline(h=0,v=0.0176*100000,col="blue")
abline(h=0,v=0.035*100000,col="blue")
abline(h=0,v=0.0525*100000,col="blue")
text(0.0035*100000,70,"Casi attuali",pos=4)
text(0.0176*100000,30,"5x",pos=2)
text(0.035*100000,30, "10x",pos=2)
text(0.0525*100000,30, "15x",pos=2)
dev.off()

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: