Vaka Sayılarına Fazla Teknik Bir Bakış

Pandemiden sadece insanlar değil, YZ modelleri de zarar gördü. Pandemi paradigmasını yakalayabilmek için artık pek çok tahmin modelinin içerisine pandemi değişkenleri de giriyor. Ama bu değişkenler neler olmalı, ve bunlara ne kadar güvenebiliriz sorularına cevap bulmak pek kolay değil. Bugün vaka sayıları üzerine biraz çalıştım, gelin anlatayım.

Günde ortalama $\lambda$ kere görülen bir olayın bugün tam olarak $k$ defa gerçekleşmesi ihtimalini açık seçik hesaplayabiliriz. Poisson dağılımı, bu ihtimallerin dağılımıdır. Pandemide vaka sayılarını modellemek için Poisson pek iyi bir model değildir çünkü vakaların görülme sıklığı sabit kalmaz, her bir vaka üreme katsayısına bağlı olarak yeni vakalara yol açar, alınan ya da alınmayan önlemlerden dolayı görülme sıklığı sürekli değişir. Bunları gözardı eder, süreci Poisson dağılımıyla modellemeye çalışırsanız, gerçek vaka sayılarının varyansı sizin tahmin ettiğiniz varyanstan çok uzakta olur. Pandemilerde vaka sayıları Poisson’a göre fazla dağınık (overdispersed) olma eğilimindedir.

Aşağıda paylaşacağım kodda, global pandemi verilerinden çeşitli ülkelerin vaka sayılarının Poisson modeline göre ne kadar “overdispersed” olduğunu inceledim. 7 günlük hareketli ortalamaları kullanarak, her bir 7 günlük zaman dilimini Poisson dağılımıyla modellersek gerçek varyansın Poisson dağılımından gelen bir varyanstan %99 ihtimalle daha büyük olduğu günleri saydım. Aşağıda ülkeler bazında toplam günlerin yüzde kaçında vaka sayılarının “overdispersed” olduğunu görüyorsunuz.

== Overdispersion Percentage ==
Turkey              83.05555555555556
Spain               96.4735516372796
Italy               96.5
Germany             94.32098765432099
United Kingdom      93.26683291770573
France              94.23558897243107
Denmark             94.91978609625669
Sweden              97.75
Norway              90.93333333333334
Greece              91.46666666666667
Bulgaria            91.48351648351648
Russia              85.03740648379052
Albania             59.50413223140496
Azerbaijan          80.3234501347709
Iran                92.93193717277487
Iraq                95.75596816976127
Egypt               61.49870801033591
China               68.87254901960785
Japan               88.26405867970661

Beklediğimiz gibi, gerçek vaka sayıları çok büyük oranda dağınık (overdispersed). Fakat kimi ülkeler diğerlerinden daha dağınık, bizim vaka sayıları bir yanda İspanya, İtalya, Almanya bir yanda. Bu sayıları alıp olduğu gibi YZ modellerine beslemek pek makul görünmüyor.

import numpy as np
import pandas as pd

def poissonsamplevar(mu, n, perc=99, nrep=100):
    v = np.zeros(nrep)
    if np.isnan(mu):
        return np.nan
    else: 
        for i in range(nrep):
            x = np.random.poisson(mu, size=n)
            v[i] = np.var(x)
        return np.percentile(v, perc)

df = pd.read_csv('https://covid.ourworldindata.org/data/owid-covid-data.csv?raw=true')

countries = ['Turkey', 'Spain', 'Italy', 
             'Germany', 'United Kingdom', 'France', 'Denmark', 'Sweden', 'Norway', 
             'Greece', 'Bulgaria', 'Russia', 'Albania', 'Azerbaijan', 'Iran', 'Iraq', 'Egypt', 'China', 'Japan']
win = 7
nrep = 100
np.random.seed(42)


print('== Overdispersion Percentage ==')
for country in countries:
    
    t = df[df['location']==country][['date', 'new_cases']]
    t = t[t['new_cases']>=0].copy()
    t['Roll_Mean'] = t['new_cases'].rolling(win).mean()
    t['Roll_Var'] = t['new_cases'].rolling(win).var(ddof=0)
    t['Poisson_99'] = t['Roll_Mean'].apply(poissonsamplevar, args=(win, 99, nrep))
    t['Overdispersed'] = 0
    t.loc[t['Roll_Var'] > t['Poisson_99'],'Overdispersed'] = 1
     
    print(f'{country[:20]:20}', end='')
    print(t['Overdispersed'].sum()/len(t)*100)

** Bu yazıyı ve kodu, https://github.com/dkobak/excess-mortality adresinde bulabileceğiniz bir çalışmadan esinlenerek yazdım.

İlk yorum yapan olun

Bir yanıt bırakın

E-posta hesabınız yayımlanmayacak.


*