Kapsamlı tarama, koronavirüsün yayılmasına karşı mücadelenin önemli bir parçası. Ama olası bir test ve ekipman eskikliğinin nasıl önüne geçilebilir? Örneklerin karışımlarını test ederek ve matematiğe güvenerek.
COVID-19’un ikinci dalgasını endişeyle beklerken, birçok uzman koronavirüsün yayılımını durdurmak için büyük ölçekli bir tarama planının gerekli olduğu konusunda hemfikir. Popülasyonun temsili örnekleri üzerinde gerçekleştirilen immunolojik, serolojik veya antijenik testler, hastalığın ne kadar yayıldığını tahmin etmeyi, sürü bağışıklığının derecesini değerlendirmeyi ve alınacak önlemleri ona göre belirlemeyi mümkün kılacaktır.
Kapsamlı bir tarama stratejisinin başarıyla uygulanabilmesi, ciddi miktarda personel ve ekipmana erişim gerektiriyor. Dünya çapında artan taleple birlikte, laboratuvar analizi için gerekli maddelerin yetersiz kalma ihtimali gündeme geldi. Kanada’daki ve dünyadaki halk sağlığı yetkililerinin bu konudaki endişesi devam ediyor.
Testlerin çoğunun (bereket versin) negatif çıktığını biliyorsak, matematik kullanarak daha iyisini yapmak mümkün mü? Sorunun cevabı evet, numunelerin dikkatle oluşturulmuş karışımlarını kullanarak grup testleri yapmak yoluyla mümkün.
Grup taraması
Diyelim ki bir laboratuvara test edilmek üzere 100 örnek geliyor. Laboratuvarda, örnekler önce rastgele bir şekilde 20’şer kişilik beş gruba ayırılıyor. Sonra, her grup için, 20 örneğin her birinin yarısını kullanarak testin uygulanacağı bir karışım hazırlanıyor.
Bu karışımın test sonucu negatif çıkarsa, o grupta hiç vaka olmadığı sonucuna varılabilir. Eğer test pozitif çıkarsa ise, o gruptaki her elemanın verdiği örneğin diğer yarısı bu sefer teker teker test ediliyor.
Eğer başlangıçtaki 100 örnek sağlıklı bireylerden geliyorsa, bu prosedür sayesinde 100 test yerine sadece 5 test yapmak yeterli oluyor. Eğer hastalığı taşıyan sadece bir kişi varsa, o kişiyi tespit etmek için 5 + 20 = 25 test yetiyor. Eğer iki hasta varsa, onlar aynı gruba düşerse yine 25 test yeterli oluyor, ayrı gruplarda olurlarsa ise 5 + 20 + 20 = 45 test gerekiyor. Hastalığı taşıyan kişi sayısı 3 veya daha fazla olunca da benzer hesaplar mümkün
Görülebileceği gibi, örneklerin karıştırılması yukarıda da farz ettiğimiz gibi testin duyarlılığı ve özgüllüğünü etkilemiyorsa -pratikte genelde böyle oluyor- grup olarak test etmek çok ciddi tasarruf sağlayabiliyor.
Laboratuvar aynı tarama yöntemini 10 örnekten oluşan 10 gruba da uygulayabilirdi. Tek bir kişinin hastalık taşıması durumunda, o kişiyi belirlemek için için sadece 20 test gerekirdi. Ancak, bu sefer kimsenin hasta olmadığı sonucuna varmak için 10 teste ihtiyaç olurdu.
Bu iki stratejiden hangisi daha iyi? Daha iyi başka stratejiler var mı? Bu sorunun cevabı hast
Bu iki stratejiden hangisi daha iyidir? Ve onlar için daha iyi olan başkaları var mı? Cevap, hastalığın prevalalansına yani hasta sayısının toplam nüfusa oranına bağlı.
The Annals of Mathematical Statistics dergisindeki 1943 tarihli bir yazıda, Robert Dorfman grup taramasının en basit şekliyle zaten İkinci Dünya Savaşı’nda Birleşik Devletlerde askere alınan kişileri frengiye karşı test ederken kullanıldığını belirtti. Günümüzde klasikleşmiş bu yöntemin çok çeşitli varyasyonları kullanılıyor, örneğin Kuzey Amerika’da HIV, zatürre ve Batı Nil Virüsü testlerinde.
Algoritmayı optimize etmek
Algoritmayı optimize etmek
Dorfman hastalığın prevalans seviyesini ($p \in [0, 1]$) göz önüne alarak optimal grup büyüklüğünü nasıl hesaplayacağımızı anlatıyor. Test edilecek kişi sayısını $n ≥ 2$ ile gösterelim ve popülasyonu temsil eden rastgele bir örneklem olduğunu varsayalım.
Hastalığı taşıyan insan sayısını $X$ bilinmeyeni ile gösterirsek, bu durumda $X$ değişkeninin dağılımı aşağıdaki koşulu sağlayan $n$ ve $p$ parametrelerine bağlı binom dağılım 1 ile temsil edilebilir. Buradan
\[\text{Pr}(X=0)=(1–p)^n,\]
olduğunu çıkarabiliriz, zira her bir bireyin sağlıklı olma ihtimali $1-p$ ve
\[\text{Pr}(X>0)=1–\text{Pr}(X=0)=1–(1–p)^n.\]
sağlanıyor.
Eğer $X=0$ ise, sadece $N =1$ test yeterli. Lakin $X >0$ ise, $N=n+1$ teste ihtiyaç var. Yapmamız gerekecek ortalama test sayısına $N$’nin beklentisi diyor ve $E(N)$ ile gösteriyoruz:
\[\begin{array}{r c l}E(N) &=&1×\text{Pr}(X=0)+(n+1)×\text{Pr}(X>0) \\&=& n+1-n(1-p)^n.\end{array}\]
Bu değer $p$ ile doğru orantılı. Eğer $p = 0$ ise $E(N) = 1$ olacağı bariz, kimsenin hasta olmadığını tek bir testle doğrulamak yeterli. Eğer $p=1$ ise, yaptığımız ilk test mutlaka pozitif çıkacağından $E(N)=n+1$ oluyor.
Herhangi bir $p \in [0, 1]$ değeri için, grup olarak test etmenin göreceli maliyetini
\[E(N)/n=1+1/n–(1–p)^n\]
oranının $n$’e bağlı olarak nasıl davrandığını kontrol ederek anlamak mümkün. $E(N)/n$ ne kadar küçükse, grup testi kullanmanın kazancı o kadar fazla oluyor, tabii ki oran $1$’den küçük olduğu sürece. $p = 0$ olunca, $E(N)/n=1/n$ oluyor, yani bu durumda $n$ ne kadar büyükse o kadar iyi. $p = 1$ olduğunda grup testi hep pozitif sonuç verdiği, dolayısıyla yapılacak test sayısını arttırmak dışında bir işe yaramadığı için
\[E(N)/n=1+1/n>1\]
sağlanıyor.
Belirli bir $p$ değeri için, $100 \times E(N)/n$ elimizdeki topluluğun boyutu olan $n$’nin bir fonksiyonu olarak, yapılan test sayısının $n$’nin yüzde kaçına eşit olduğunu veriyor. Şekilde değişik $p$ değerleri için bu fonksiyonun grafiğini görüyoruz, denk geldikleri prevalanslar şöyle: %1 (siyah), %2 (kahverengi), %5 (turuncu), %8 (kırmızı), %10 (mavi), %15 (yeşil). Eğrinin minimumuna denk gelen optimal karışım büyüklüğü, şekilden de anlaşılabileceği gibi, toplumda hastalık taşıyan bireylerin yüzdesi olan $p$’ye bağlı olarak değişiyor.
Dorfman’ın sonuçlarının verildiği aşağıdaki tabloda, bazı $p$ prevalanslarına denk gelen en iyi $n$ değerlerini bulabilirsiniz.
$p$ (%) | $n$ | Relative cost (%) |
1 | 11 | 20 |
2 | 8 | 27 |
5 | 5 | 43 |
8 | 4 | 53 |
10 | 4 | 59 |
15 | 3 | 72 |
Genelleştirilmiş algoritma
Yukarıda tarif edilen test protokolü, iki-aşamalı uyarlanabilir bir algoritma örneği. Uyarlanabilir dememizin sebebi, ikinci turda yapılacak testlerin seçiminin (ve dolayısıyla sayısının) ilk turda alacağımız sonuçlara bağlı olması. Bu tür bir testin performansını arttırmanın çeşitli yolları var. Bilhassa, daha fazla tur kullanarak algoritmayı uzatmak mümkün.
İkili bölüm algoritması olarak adlandırdığımız ve çeşitli yönlerden optimal olan bir algoritma şöyle (bkz. Şekil 2):
a) $n = 2^s$ şeklinde bir $n$ tam sayısı alıp $k ≤s+1$ tur test yapılır.
b) İlk turda, tüm gruptan alınan numunelerin bir karışımı test edilir.
c) Eğer test sonucu pozitif çıkarsa, grup $2^{s-1}$ boyutunda iki alt gruba ayrılıp, her iki alt gruptaki numunelerin karışımı test edilir.
d) Bu işlem, önceki turda testleri pozitif çıkan alt gruplardaki kişilerin tek tek test edildiği $k$. tura kadar devam eder. Eğer $k=s+1$ ise zaten bu alt gruplarda iki kişi kalmış oluyor.
Eğer ekipte sadece bir tane hastalık taşıyan birey varsa, algoritma onu tam $s+1=\log_2(n)+1$ adımda tespit ediyor. Genel olarak, ne kadar fazla tur olursa bu yaklaşımın kazancı o kadar fazla oluyor. Bununla beraber, eğer bir testin sonuçlarının çıkması 24 ile 48 saat arası zaman alıyorsa, tespitlerin yapılması için gereken süre verimi azaltabilir. Dikkat etmemiz gereken bir başka husus, bu kazancı sağlamak için ihtiyacımız olan biyolojik numune miktarının daha fazla olması. Bu çok önemli olmayan bir sorun ve aşağıda bahsedilen tüm algoritmalarda göz ardı edilecek.
Uyarlanabilir olmayan bir algoritma
Sonuç almak için gereken süreyi daha iyi kontrol edebilmek için uyarlanabilir olmayan yöntemler de dikkate alınabilir. Bu tür protokoller sadece tek tur içeriyor, böylece tüm testler aynı anda yapılabiliyor. Eğer elimizde hastalık prevalansı için güvenilir bir tahmin varsa, bu yöntemler hasta bireyleri çok tespit etmede çok etkili oluyor.
Kavramı Rwanda’lı bir grup araştırmacı tarafından COVID-19’la mücadelenin bir parçası için geliştirilen şu örnek üzerinden anlatalım: Önce $n = 3^m$ boyutlu rastgele bir topluluk oluğturuluyor. Sonra elimizdeki $3^m$ birey ve $\{0, 1, 2\}^m$ ayrık hiperküpünün arasında bir eşleşme belirleniyor. $m=3$ durumu için Şekil 3’e göz atabilirsiniz.
Önerilen yöntemde her biri $3^{m-1}$ bireye denk gelen karışımlara $3m$ test uygulanıyor. Bununla beraber, gruplar çok özel bir modüle göre seçiliyor, yani hiperküpün dilimlerine göre. Gerçekten de, eğer hiperküpün koordinat eksenlerini $x_1,\ldots,x_m $ ile gösterirsek, her karışım, bir $i\in \{1,\ldots,m\}$ ve bir $t\in \{0,1,2\}$ için, $x_i=t$ hiperdüzleminde yer alan $3^{m-1}$ bireye denk geliyor.
Şekil 3’teki gibi $m = 3$ olduğunda, $3^2 = 9$ bireye $3\times 3=9$ test yapılıyor. Rwanda’daki uygulamada olduğu gibi $m = 4$ olduğunda, $n = 81$ bireylik rastgele seçilmiş bir topluluğa $12$ test uygulanıyor. Bu da her numunenin dört eşit parçaya bölünüp dört testte kullanıldığı anlamına geliyor. Her test de 27 numunenin karışımına uygulanıyor.
Bu yöntemin temeli kutucukta bahsedilen hata düzelten kod inşa etme tekniği. Karışımların seçiminin bize sağladığı büyük avantajlardan biri, eğer hasta bireylerin sayısı sadece 1’se bu kişinin kim olduğunu kesin olarak tespit edebilmemiz. Eğer birden fazla hasta varsa ise ikinci bir tur teste ihtiyaç oluyor.
$n = 81=3^4$ durumunda Rwanda örneğini inceleyelim. Hasta bireylerin sayısı $X$’in $n = 81$ ve $p$ parametreli binom dağılıma göre dağıldığını hesaba kattığımızda elimize şöyle bir şey geçiyor:
\[\text{Pr}(X ≤1)=(1 – p)^{81}+81p(1-p)^{80}.\]
Bu strateji $X ≤ 1$ olduğunda ilginç oluyor. Ama örneğin, $\text{Pr}(X ≤ 1) ≥ 0.95$ olmasını garantilemek için, $p ≤ 0.44\%$ olması lazım; başka bir deyişle hastalığın prevalansı düşük olmalı. Daha %1 prevalansta $\text{Pr}(X ≤ 1) = 0.806$ oluyor ve olası durumların neredeyse %20’sinde ikinci bir tura ihtiyaç duyuyoruz. Bununla beraber, yine %1 prevalansta,
\[\text{Pr}(X=2)=\pmatrix{81 \\\ 2}p^2(1-p)^{79}=0.146,\]
sağlanıyor, dolayısıyla $\text{Pr}(X ≤ 2) = 0.952$ oluyor.
Eğer ikinci turu nasıl yapacağımızı akıllıca seçersek, maliyetleri kolayca kontrol edebiliriz. Örneğin $X =2$’ye denk gelen her durum için aşağıdaki koşul sağlanır ($m=3$ durumu için test sonucu pozitif olan dilimleri gösterdiğimiz Şekil 4’e bakabilirsiniz):
Her $i \in \{1, \ldots, m\}$ değeri için, test sonucu pozitif olan $x_i = s$ ve $x_i = t$ şekline en fazla iki dilim var ve bu şekilde tam iki pozitif teste denk gelen bir $i$ değeri bulmak her zaman mümkün.
Eğer ${1,\ldots ,m}$ içinde (P)’de tarif ettiğimiz şekilde iki pozitif teste denk gelen $i$ değerlerinin sayısına $k$ dersek, tüm hasta bireyleri tespit etmek için kaç test daha yapılması gerektiği aşağıdaki tabloda veriliyor.
$k$ | Ek test sayısı |
1 | 0 |
2 | 4 |
3 | 8 |
4 | 16 |
Eğer (P) özelliği doğrulanmadıysa, o zaman pozitif sonuç veren dilimlere denk gelen her bireyin test edilmesi gerekiyor, bu da maksimum 81 test daha demek. Bu yüzden, sonuçta elde ettiğimiz göreceli maliyet 100 × 17/81 ≈ 21% değerine küçük eşit oluyor.
Görüşler
Koronavirüsle savaş için uyarlanmış algoritma araştırması bütün hızıyla devam ediyor. Mesela yakın zamanda, İsrailli bir araştırma ekibi bir algoritma geliştirip bir laboratuvarda uygulamaya başladılar. Algoritmada, $8 \times 48 = 384$ boyutunda rastgele bir topluluğa $48$ test uygulanıyor, her bireyin numunesi de altı eşit parçaya ayırılıyor. Her bir testte bu parçalardan $48$ tanesi kullanılıyor, kişi başı bir tane. Böylece her bireyin numunesine altı testte rastlanıyor. Laboratuvarda bir robot bu 48 karışımı hazırlanmak için programlananmış. Algoritma dörde kadar hasta bireyi tespit edebiliyor, bu da tek tek test yapma yöntemine göre sekiz kat daha az teste ihtiyaç olduğu anlamına geliyor. Burada da hasta bireylerin yüzdesi ne kadar az olursa algoritmanın performansı o kadar iyi oluyor.
Elbette, istatistiksel bir test yöntemi geliştirirken başka hususlar da devreye girer. Basitleştirmek için, bu yazıda, kullanılan testin hatasız olduğunu dolaylı olarak varsaydık. Pratikte en iyi yöntemlerde bile hatalı pozitif veya negatiflere rastlanıyor. Testleri tavsiye ederken, Testlerin duyarlılığı ve özgüllüğü, bunların uygulanmasını tavsiye ederken dikkate alınması gereken önemli unsurların yanı sıra, manipülasyonların süresi, maliyeti ve karmaşıklığı açısından fizibiliteleridir.
Tabii ki, istatistik temelli bir test yöntemi tasarlarken başka hususlar da devreye giriyor. Kolaylık açısından, bu yazıda üstü kapalı olarak testlerin hatasız olduğunu kabul ettik. Gerçek hayatta ise, en iyi testlerde bile hatalı pozitif veya negatiflere rastlanıyor. Testleri tavsiye ederken, zaman, maliyet ve karmaşıklık gibi açılardan yapılabilirliklerinin yanı sıra, hassasiyetleri ve özgüllükleri de dikkat etmemiz gereken önemli hususlar.
Uyarlanabilir olmayan bir algoritma inşa etmek
Bir insan topluluğuna test yapmak için uyarlanabilir olmayan bir algoritma inşa etmek istiyoruz. Bu algoritmayı $T$ satır ve $n$ sütundan oluşan bir tablo ile göstereceğiz, bunu girdileri 0 veya 1 olan $T x n$ bir matris olarak da görebiliriz. Matrisin $i$. satırı $i$. testi temsil ediyor. $j$. sütundaki 1’e eşit olan girdilerse $j$. bireyin katıldığı testleri temsil ediyor. Böylece, eğer $j$. birey $i$. teste dahilse $m_{ij} = 1$, değilse ise $0$ oluyor.
Test edeceğimiz grubu temsil eden $n$ uzunluğunda bir $X$ vektörü inşa edelim: $i$. koordinat, $x_i$, $i$. birey hastalık taşıyorsa $1$, değilse ise $0$ olsun. $X$’i $n$ uzunluğunda bir kelime, $1$’e eşit olan az sayıda koordinatını da, tüm koordinatları $0$ olan bir $X_0$ başlangıç kelimesinde olan hatalar olarak görmeyi seçiyoruz. Hata düzelten kod algoritmaları, $X_0$’ın iletiminde oluşabilecek potansiyel hataları düzeltmeye yarıyor, yani $X$’in hangi $x_i$ koordinatlarının $1$’e eşit olduğunu tespit etmeye. Bu tam da bizim yapmak istediğimiz şey. Örnekten de görülebileceği gibi, hata düzelten bir algoritma, en fazla o algoritmayı inşa ederken seçtiğimiz belli bir $k$ sayısında hata düzeltebilir.
Buradaki matris $M$ kod matrisi. Kodun $k$ hatayı düzeltmesi için yeterli bir özellik matrisin $k$-ayrık olması. Bu kavramı tanımlayalım. $j_1, \ldots, j_k$ bireyleri hastalık taşıdığında (illa farklı bireyler olmaları gerekmiyor) $j_{k+1}$. hastalık taşıyan bireyi gözden kaçırmak istemiyoruz. Bir $j$ sütunu (yani $j$. birey), 1’e eşit girdilere baktığımızda, bir $A_j \subset \{1, \ldots , T\}$ kümesine denk geliyor ($j$. bireyin dahil olduğu testlerin kümesi). Eğer $j_1, \ldots , j_k$ bireyleri hastalık taşıyorsa, o zaman $A_{j_1} \cup \cup A_{j_k}$’e denk gelen tüm testlerin sonucu pozitif olacak. $j_{k+1}$. Hasta bireyin gözden kaçmaması için, $A_{j_{k +1}}$ kümesi $A_{j_1} \cup \cdots \cup A_{j_k}$’nin alt kümesi olmamalı. Eğer bu tüm $j_1, \ldots , j_k$ seçimleri ve $j_1, \ldots ,j_k$’den farklı tüm $j_{k+1}$ bireyleri için sağlanıyorsa, $M$ matrisine $k$-ayrık diyoruz. Yukarıdaki Rwanda’da kullanılan örnekteki $12 \times 81$ matris 1-ayrık bir matris.
$k$-ayrık matrisler inşa etmek için iki yöntem var. İlki olasılık temelli: matrisin her girdisini $q$ olasılıkla $1$, yoksa $0$ olacak şekilde rastgele seçiyoruz. İyi seçilmiz $n$, $T$ ve $k$ değerleri için, elde ettiğimiz matrisin $k$-ayrık olma ihtimali sıfırdan farklı; deneme-yanılma yoluyla $k$-ayrık bir matris elde ediyoruz.
Cebirsel olan ikinci yöntem Reed-Solomon hata düzelten kod teorisinden geliyor. Bu teoriyi kullanarak, her satırda $m$, her sütunda ise $c$ sıfırdan farklı girdi olacak $M$ matrisleri inşa edebiliyoruz. Böylece tüm testler $m$ boyutlu alt gruplara yapılıyor, her numune de $c$ farklı testte kullanılmak üzere $c$ parçaya bölünüyor.
- Bu dağılım popülasyonun boyutunun örneklemin boyutuna oranla büyük olması şartıyla iyi bir seçim ↩