paint-brush
Python ile Bulaşıcı Hastalık Yayılımının Simülasyonu: SIR ve SEIR Modelleriile@olaoluwa
5,164 okumalar
5,164 okumalar

Python ile Bulaşıcı Hastalık Yayılımının Simülasyonu: SIR ve SEIR Modelleri

ile Olaoluwa Afolabi7m2023/10/13
Read on Terminal Reader

Çok uzun; Okumak

Python kullanarak bulaşıcı hastalık modellemeyi derinlemesine inceleyin. SIR ve SEIR modellerinin gücünü keşfedin, Python koduyla gerçek dünya senaryolarını keşfedin ve epidemiyolojik içgörüler için becerilerinizi genişletmeyi öğrenin. Halk sağlığında hastalık modelleme konusunda uzmanlaşmak için mutlaka okunması gereken bir kitap.
featured image - Python ile Bulaşıcı Hastalık Yayılımının Simülasyonu: SIR ve SEIR Modelleri
Olaoluwa Afolabi HackerNoon profile picture
0-item


Yasal Uyarı : Bu makale, sağlanan kodun matematiksel modellemenin tüm yönleri için evrensel bir çözüm olmadığını açıklığa kavuşturmayı amaçlamaktadır. Bunun yerine, matematiksel modelleme sürecindeki belirli bir adımı vurgulayan ve bu alandaki farkındalığı artırma temel hedefiyle Python'u açıklama amacıyla kullanan bir eğitim aracı olarak hizmet eder.


Biyomatematik alanıyla ilgili bir matematiksel model projesi sunarken/önerirken almanız gereken belirli önlemlerin olduğunu unutmamak da önemlidir.


Bu adımlar aşağıdakileri içerir, ancak bunlarla sınırlı değildir: konunun tanımlanması, bir model yaklaşımının seçilmesi (bu makalede iki model tartışılacaktır), denklemlerin formüle edilmesi, parametre tahmini (genellikle geçmiş verilere dayalı olarak), diferansiyel denklemleri analitik olarak çözerek sayısal simülasyonların uygulanması veya Python ve MATLAB gibi hesaplama araçlarının kullanılması, doğrulamalar ve duyarlılık analizi, senaryo testi, sonuç yorumlama vb.


Daha önce de söylediğim gibi, bu yalnızca matematiksel modelleme sürecindeki belirli bir adımı ve Python'un açıklama amacıyla kullanılmasını vurgulamaktadır.


İçeriğe Genel Bakış

  1. giriiş
    • Simülasyonun Amacı
  2. SIR Modeli
    • Ne İşe Yarar / SIR Python Kod Simülasyon Örneği
    • Ne Öğrenebilirsin?
      • Hastalık Yayılımını Anlayın
      • Parametre Hassasiyetini Keşfedin
      • Müdahaleleri Değerlendirin
  3. SEIR Modeli
    • Ne İşe Yarar / SEIR Python Kod Simülasyon Örneği
    • Ne Öğrenebilirsin?
      • Model Gizli Dönemler
      • Erken Müdahaleleri Değerlendirin
      • Karmaşık Salgınları İnceleyin
  4. Çözüm



1. Giriş

Bulaşıcı hastalıkların nasıl yayıldığını anlamak halk sağlığının korunması açısından önemlidir çünkü bu hastalıklar insanlık tarihi boyunca yüzyıllardır mevcuttur. Hastalık yayılımının dinamiklerini simüle etmek ve anlamak için güçlü bir araç matematiksel modellerdir. Bu makalede SIR (Susceptible-Infectious-Recovered) ve SEIR (Susceptible-Exposed-Infectious-Recovered) modelleri ve bunların Python kullanılarak nasıl simüle edileceği tartışılacaktır.


Simülasyonlar Ne İçindir?

Halk sağlığı profesyonelleri ve epidemiyologlar için simülasyon kristal bir küre gibidir. Çeşitli koşullar altında hastalıkların yayılma potansiyelini ve tedavi seçeneklerini öngörmemizi sağlar. Bu modeller karar vermeye, etkili kaynak tahsisine ve çeşitli tekniklerin potansiyel etkilerinin anlaşılmasına yardımcı olur. İki temel modeli inceleyelim; SIR Modeli ve SEIR Modeli.


2. SIR Modeli

Ne İşe Yarar / SIR Python Kod Simülasyon Örneği

Duyarlı, Bulaşıcı ve Kurtarılan (SIR) modeli, bir popülasyonu bu üç kategoriye ayırır. İletim hızı ( β ) ve iyileşme hızı ( γ ) gibi değişkenlere dayanarak, bu bölmelerin zamanla nasıl değiştiğini simüle eder.


Python kullanarak bir simülasyonu örneklendirmeden önce, matematiksel modeller üzerinde çalışırken “model varsayımları” yapmak gerekir.


Varsayımımızda LaTeX formülünü veya kodunu kullanarak model oluşturacağız:


 \begin{align*} \frac{dS}{dt} &= -\beta \cdot S \cdot I \\ \frac{dI}{dt} &= \beta \cdot S \cdot I - \gamma \cdot I \\ \frac{dR}{dt} &= \gamma \cdot I \end{align*}


Not: Bu formülü Python kullanarak lateksleştirebilirsiniz. Bir örneği https://github.com/google/latexify_py/blob/main/examples/examples.ipynb adresinde bulabilirsiniz.


Bu makale, LaTeX'i uygun bir matematiksel gösterime/denkleme dönüştürmek için Python kodunu yazma zahmetine girmeyecektir, ancak aşağıdaki formül/denklem varsayımlarını göz kamaştırıcı bir şekilde görebilmeniz için https://latexeditor.lagrida.com/ gibi çevrimiçi düzenleyiciyi kullandım. :



Şekil 1: Model Denklemi


nerede :


  • S duyarlı bireyleri temsil eder,
  • Enfekte olmuş bireyleri temsil ediyorum,
  • R iyileşmiş bireyleri temsil eder.


β ve γ parametreleri sırasıyla iletim ve iyileşme oranlarını yönetir. Negatif işaret (yani −β), duyarlı bireylerin (S) sayısının zamanla azaldığını gösterir. Nokta gösterimi “çarpmayı” gösterir.


Özetle, bu denklemler, hastalığa yakalandıkça duyarlı kişilerin sayısının azaldığı (yani dS/dt), yeni enfeksiyonlar sonucunda bulaşıcı kişilerin sayısının arttığı ve iyileştikçe bulaşıcı kişilerin sayısının azaldığı SIR modelinin dinamiklerini tanımlamaktadır ( yani dI/dt) ve hastalık tedavi edildikçe iyileşenlerin sayısı da artar (yani dR/dt). Her bölmedeki değişiklik ilgili bileşenlerin çarpımına bağlı olduğundan, çarpmayı belirtmek için noktalar (.) kullanılır.


Tüm varsayımlar belirlendiğinden, SIR Modeli için Python'u kullanarak bir simülasyon çalıştırabilir ve ardından dinamikleri görselleştirebiliriz:


 import numpy as np from scipy.integrate import odeint import matplotlib.pyplot as plt # SIR model equations def SIR_model(y, t, beta, gamma): S, I, R = y dSdt = -beta * S * I dIdt = beta * S * I - gamma * I dRdt = gamma * I return [dSdt, dIdt, dRdt] """ Initial conditions (such as S0, I0, and R0) are not to be random but I hardcoded them with specific values. These choices are typically made based on the characteristics of the disease being modeled and the context of the simulation. Initial condition are set such that S0 = 99%, which indicates the proportion of susceptible individuals when the simulation starts. I0 is set to 1%, which indicates proportion of infected individuals to be 1% when the simulation starts. R0 is set to 0% which is expected that there are are no recovered individuals when the simulations start. """ S0 = 0.99 I0 = 0.01 R0 = 0.00 y0 = [S0, I0, R0] # Parameters # β (beta) is transmission rate and I chose 30%. γ (gamma) is set to 1% beta = 0.3 gamma = 0.1 # Time vector t = np.linspace(0, 200, 200) # Simulate for 200 days # Solve the SIR model equations using odeint() solution = odeint(SIR_model, y0, t, args=(beta, gamma)) # Extract results S, I, R = solution.T # Plot the results plt.figure(figsize=(10, 6)) plt.plot(t, S, label='Susceptible') plt.plot(t, I, label='Infected') plt.plot(t, R, label='Recovered') plt.xlabel('Time (days)') plt.ylabel('Proportion of Population') plt.title('SIR Model Simulation') plt.legend() plt.grid(True) plt.show()


scipy.integrate.ode ve scipy.integrate.odeint arasındaki farklar için, daha iyi anlamanız için sizi odeint ve ode'ye yönlendirmek isterim.


Neleri Keşfedebilirsiniz?


SIR modelini Python'da çalıştırmak şunları yapmanızı sağlar:

  • Hastalık Yayılımını Anlayın : Salgın eğrisini gözlemleyin ve bir hastalığın bir toplulukta nasıl yayıldığını gözünüzde canlandırın. Yukarıdaki Python SIR Modelini çalıştırdığınızda sonucu/sonucu aşağıdaki grafikte görebilirsiniz:



Yüksek iyileşme oranlarıyla birlikte azaltılmış duyarlılık ve enfeksiyon oranını gösteren simülasyonumuzun sonucu.



  • Parametre Hassasiyetini Keşfedin: Salgının uzunluğunu ve zirvesini nasıl etkilediğini gözlemlemek için çeşitli beta ve gama değerlerini test etmeyi deneyin.


  • Müdahaleleri Değerlendirin: Parametreleri değiştirerek, aşağıdaki gibi müdahalelerin sonuçlarını simüle edebilirsiniz:

    sosyal izolasyon veya aşılama.


3. SEIR Modeli

Ne İşe Yarar / SEIR Python Kod Simülasyon Örneği

Bir "Açık" bölmenin eklenmesiyle SEIR modeli, SIR modelini genişletir. İnsanların maruz kaldığı ancak henüz bulaşıcı olmadığı kuluçka dönemini hesaba katıyor. Python'da nasıl taklit edileceği burada gösterilmektedir.


 import numpy as np from scipy.integrate import odeint import matplotlib.pyplot as plt # SEIR model equations def SEIR_model(y, t, beta, sigma, gamma): S, E, I, R = y dSdt = -beta * S * I dEdt = beta * S * I - sigma * E dIdt = sigma * E - gamma * I dRdt = gamma * I return [dSdt, dEdt, dIdt, dRdt] # Initial conditions S0 = 0.99 E0 = 0.01 I0 = 0.00 R0 = 0.00 y0 = [S0, E0, I0, R0] # Parameters beta = 0.3 sigma = 0.1 gamma = 0.05 # Time vector t = np.linspace(0, 200, 200) # Solve the SEIR model equations solution = odeint(SEIR_model, y0, t, args=(beta, sigma, gamma)) # Extract results S, E, I, R = solution.T # Plot the results plt.figure(figsize=(10, 6)) plt.plot(t, S, label='Susceptible') plt.plot(t, E, label='Exposed') plt.plot(t, I, label='Infected') plt.plot(t, R, label='Recovered') plt.xlabel('Time (days)') plt.ylabel('Proportion of Population') plt.title('SEIR Model Simulation') plt.legend() plt.grid(True) plt.show()


Bu durumdaki tek fark, farklı senaryoları araştırmak ve bulaşıcı hastalıkların dinamiklerini "maruz kalma" dönemiyle anlamak için latent period rate (σ) getirilmesidir. Bireylerin bulaşıcı hale gelmesinden önceki kuluçka dönemini nasıl açıkladığını gösteriyor.


Ne Öğrenebilirsin?


SEIR modelini çalıştırmak için Python'u kullandığınızda şunları yapabilirsiniz:


  • Model Gizli Dönemler

    Ani bulaşıcı hastalıklar ile kuluçka dönemleri olan hastalıkların davranışları arasındaki farkları tanır.


  • Erken Müdahaleleri Değerlendirin

    İzolasyonun ve erken tespit stratejilerinin etkilerini analiz edin.


  • Karmaşık Salgınları İnceleyin

    Maruz kalan kişilerin bulaşmada önemli bir faktör olduğu COVID-19 gibi hastalıklar için SEIR kullanın.



4. Sonuç

Python'un SciPy gibi basitliği ve sağlam kütüphaneleri onu hastalıkları modellemek için mükemmel bir dil haline getiriyor. Ve bu simülasyonları onunla gerçekleştirerek bulaşıcı hastalıkların dinamikleri hakkında daha fazla şey öğreniyorsunuz. Bu sizi, iyi bilgiye dayalı kararlar vermenize ve gerçek dünyadaki salgınları değerlendirme yeteneğinizi geliştirmenize yardımcı olabilecek kararlar ve yeteneklerle donatabilir.


SIR ve SEIR modellerinden sonra gelecek çok daha fazlası var. SEIRS (Susceptible-Exposed-Infectious-Removed-Susceptible) Modeli, Uzamsal Modeller, Ağ Modelleri vb. gibi başka karmaşık modeller de vardır. Karmaşık modellerin yanı sıra jeouzaysal veriler, epidemiyolojik veriler, davranışsal veriler gibi gerçek dünya verilerinin araştırılması vb. aşı stratejileri, tedavinin kullanılabilirliği, sosyal mesafe önlemleri gibi müdahalelerin etkilerini dikkatlice inceleyerek modelleme becerilerinizi daha da geliştireceksiniz.


Bu modelleme araçlarına ilişkin bilgileriniz, bulaşıcı hastalıkların bulaşmasını anlamanın hayati önem taşıdığı bir gelecekte halk sağlığının korunmasını önemli ölçüde etkileyebilir.


Bu zaten çok uzun, ama umarım size Python kullanarak SIR ve SEIR Modellerini matematiksel modelde nasıl simüle edeceğinizi gösterebilmişimdir.