paint-brush
Моделирование распространения инфекционных заболеваний с помощью Python: модели SIR и SEIRк@olaoluwa
5,164 чтения
5,164 чтения

Моделирование распространения инфекционных заболеваний с помощью Python: модели SIR и SEIR

к Olaoluwa Afolabi7m2023/10/13
Read on Terminal Reader

Слишком долго; Читать

Погрузитесь в моделирование инфекционных заболеваний с помощью Python. Откройте для себя возможности моделей SIR и SEIR, изучите реальные сценарии с помощью кода Python и научитесь расширять свои навыки для получения эпидемиологической информации. Обязательно к прочтению для овладения навыками моделирования заболеваний в общественном здравоохранении.
featured image - Моделирование распространения инфекционных заболеваний с помощью Python: модели SIR и SEIR
Olaoluwa Afolabi HackerNoon profile picture
0-item


Отказ от ответственности : Целью этой статьи является разъяснение того, что предоставленный код не является универсальным решением для всех аспектов математического моделирования. Вместо этого он служит образовательным инструментом, освещая конкретный этап процесса математического моделирования и используя Python для иллюстративных целей, с основной целью повышения осведомленности в этой области.


Также важно помнить, что существуют определенные меры, которые вы должны принять при подаче/предложении проекта математической модели, например, связанного с областью биоматематики.


Эти шаги включают, помимо прочего: определение проблемы, выбор модельного подхода (в этой статье будут обсуждаться две модели), формулирование уравнений, оценку параметров — часто на основе исторических данных, реализацию численного моделирования путем аналитического решения дифференциальных уравнений или использование вычислительных инструментов, таких как Python и MATLAB, проверки и анализ чувствительности, тестирование сценариев, интерпретация результатов и т. д.


Как я уже говорил ранее, это лишь подчеркивает конкретный этап процесса математического моделирования и использования Python в иллюстративных целях.


Обзор контента

  1. Введение
    • Цель моделирования
  2. Модель SIR
    • Что он делает / Пример моделирования кода SIR Python
    • Чему вы можете научиться
      • Понимание распространения болезней
      • Изучите чувствительность параметров
      • Оценка вмешательств
  3. Модель SEIR
    • Что он делает / Пример моделирования кода SEIR на Python
    • Чему вы можете научиться
      • Модель латентных периодов
      • Оцените ранние вмешательства
      • Изучите сложные вспышки
  4. Заключение



1. Введение

Понимание того, как распространяются инфекционные заболевания, имеет важное значение для поддержания здоровья населения, поскольку они существовали на протяжении всей истории человечества на протяжении веков. Мощным инструментом для моделирования и понимания динамики распространения заболеваний являются математические модели. В этой статье будут обсуждаться модели SIR (Susceptible-Infectious-Recovered) и SEIR (Susceptible-Expose-Infectious-Recovered), а также способы их моделирования с помощью Python.


Для чего нужны симуляции

Для специалистов общественного здравоохранения и эпидемиологов моделирование похоже на хрустальный шар. Это позволяет нам предвидеть потенциальное распространение заболеваний при различных обстоятельствах и вариантах лечения. Эти модели помогают принимать решения, эффективно распределять ресурсы и понимать потенциальные эффекты различных методов. Давайте рассмотрим две основные модели, а именно; Модель SIR и модель SEIR.


2. Модель SIR

Что он делает / Пример моделирования кода SIR Python

Модель «Восприимчивые, инфекционные и выздоровевшие» (SIR) разделяет население на эти три категории. На основе таких переменных, как скорость передачи ( β ) и скорость восстановления ( γ ), он моделирует, как эти отсеки изменяются со временем.


Прежде чем мы проиллюстрируем моделирование с использованием Python, при работе над математическими моделями необходимо сделать «модельные предположения».


В нашем предположении мы создадим модель, используя формулу или код LaTeX:


 \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*}


Примечание. Вы можете латексифицировать эту формулу с помощью Python. Пример можно найти на https://github.com/google/latexify_py/blob/main/examples/examples.ipynb .


В этой статье не будет писать код Python для преобразования LaTeX в правильную математическую запись/уравнение, но я использовал онлайн-редактор, такой как https://latexeditor.lagrida.com/ , чтобы вы наглядно увидели предположения о формуле/уравнении ниже. :



Рис. 1. Уравнение модели.


где :


  • S представляет восприимчивых людей,
  • Я представляю инфицированных лиц,
  • R представляет собой выздоровевших людей.


Параметры β и γ определяют скорость передачи и восстановления соответственно. Отрицательный знак (т.е. -β) указывает на то, что число восприимчивых людей (S) со временем уменьшается. Запись через точку означает «умножение».


Таким образом, эти уравнения описывают динамику модели SIR, где количество восприимчивых людей уменьшается по мере заражения болезнью (т.е. dS/dt), число заразных людей увеличивается в результате новых инфекций и падает по мере их выздоровления (т.е. dS/dt). т.е. dI/dt), а число выздоровевших людей увеличивается по мере лечения заболевания (т.е. dR/dt). Поскольку изменение в каждом отсеке зависит от умножения соответствующих компонентов, для обозначения умножения используются точки (.).


Поскольку все предположения сделаны, мы можем запустить моделирование с использованием Python для модели SIR, а затем визуализировать динамику:


 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 и scipy.integrate.odeint , я хотел бы указать вам на odeint и ode , чтобы вы могли разобраться в этом дальше.


Что вы можете обнаружить


Запуск модели SIR в Python позволяет:

  • Понимание распространения болезни : наблюдайте за эпидемической кривой и визуализируйте, как болезнь распространяется в сообществе. Запустив модель Python SIR, описанную выше, вы можете увидеть результат/результат на графике ниже:



Результат нашего моделирования, показывающий снижение восприимчивости и уровня заражения при высоких показателях выздоровления.



  • Изучите чувствительность параметров: попробуйте протестировать различные значения бета и гамма, чтобы увидеть, как они влияют на продолжительность и пик вспышки.


  • Оценка вмешательств: изменяя параметры, вы можете моделировать последствия таких вмешательств, как

    социальная изоляция или иммунизация.


3. Модель SEIR

Что он делает / Пример моделирования кода SEIR на Python

Добавляя «открытый» отсек, модель SEIR расширяет модель SIR. Он учитывает инкубационный период, в течение которого люди были заражены, но еще не заразны. Как эмулировать это в Python, показано здесь.


 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()


Единственным отличием в данном случае является введение latent period rate (σ) для изучения различных сценариев и понимания динамики инфекционных заболеваний с «экспонированным» периодом. Это демонстрирует, как учитывается инкубационный период, прежде чем люди становятся заразными.


Чему вы можете научиться


Используя Python для запуска модели SEIR, вы можете:


  • Модель латентных периодов

    Осознать различия между поведением непосредственно заразных заболеваний и заболеваний с инкубационным периодом.


  • Оцените ранние вмешательства

    Проанализируйте последствия изоляции и стратегии раннего выявления.


  • Изучите сложные вспышки

    Для таких заболеваний, как COVID-19, основным фактором передачи которых являются люди, подвергшиеся воздействию, используйте SEIR.



4. Вывод

Простота и надежные библиотеки Python, такие как SciPy, делают его идеальным языком для моделирования заболеваний. И, выполняя с его помощью эти симуляции, вы узнаете больше о динамике инфекционных заболеваний. Это может дать вам вердикты и мастерство, которые помогут принимать обоснованные решения и улучшить ваши собственные способности оценивать эпидемии в реальном мире.


За моделями SIR и SEIR еще многое предстоит сделать. Существуют и другие сложные модели, такие как модель SEIRS (восприимчивость-экспозиция-инфекция-удаление-восприимчивость), пространственные модели, сетевые модели и т. д. Исследование сложных моделей, а также данных реального мира, таких как геопространственные данные, эпидемиологические данные, поведенческие данные. и т. д., а также тщательно изучая последствия вмешательств, таких как стратегии вакцинации, доступность лечения, меры социального дистанцирования, вы еще больше разовьете свои способности к моделированию.


Ваши знания об этих инструментах моделирования могут существенно повлиять на защиту общественного здравоохранения в будущем, когда понимание передачи инфекционных заболеваний будет иметь жизненно важное значение.


Это уже слишком долго, но я надеюсь, что смог показать вам, как моделировать модели SIR и SEIR в математической модели с использованием Python.