Отказ от ответственности : Целью этой статьи является разъяснение того, что предоставленный код не является универсальным решением для всех аспектов математического моделирования. Вместо этого он служит образовательным инструментом, освещая конкретный этап процесса математического моделирования и используя Python для иллюстративных целей, с основной целью повышения осведомленности в этой области.
Также важно помнить, что существуют определенные меры, которые вы должны принять при подаче/предложении проекта математической модели, например, связанного с областью биоматематики.
Эти шаги включают, помимо прочего: определение проблемы, выбор модельного подхода (в этой статье будут обсуждаться две модели), формулирование уравнений, оценку параметров — часто на основе исторических данных, реализацию численного моделирования путем аналитического решения дифференциальных уравнений или использование вычислительных инструментов, таких как Python и MATLAB, проверки и анализ чувствительности, тестирование сценариев, интерпретация результатов и т. д.
Как я уже говорил ранее, это лишь подчеркивает конкретный этап процесса математического моделирования и использования Python в иллюстративных целях.
Понимание того, как распространяются инфекционные заболевания, имеет важное значение для поддержания здоровья населения, поскольку они существовали на протяжении всей истории человечества на протяжении веков. Мощным инструментом для моделирования и понимания динамики распространения заболеваний являются математические модели. В этой статье будут обсуждаться модели SIR (Susceptible-Infectious-Recovered) и SEIR (Susceptible-Expose-Infectious-Recovered), а также способы их моделирования с помощью Python.
Для специалистов общественного здравоохранения и эпидемиологов моделирование похоже на хрустальный шар. Это позволяет нам предвидеть потенциальное распространение заболеваний при различных обстоятельствах и вариантах лечения. Эти модели помогают принимать решения, эффективно распределять ресурсы и понимать потенциальные эффекты различных методов. Давайте рассмотрим две основные модели, а именно; Модель SIR и модель SEIR.
Модель «Восприимчивые, инфекционные и выздоровевшие» (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/ , чтобы вы наглядно увидели предположения о формуле/уравнении ниже. :
где :
Параметры β и γ определяют скорость передачи и восстановления соответственно. Отрицательный знак (т.е. -β) указывает на то, что число восприимчивых людей (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, описанную выше, вы можете увидеть результат/результат на графике ниже:
Оценка вмешательств: изменяя параметры, вы можете моделировать последствия таких вмешательств, как
социальная изоляция или иммунизация.
Добавляя «открытый» отсек, модель 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.
Простота и надежные библиотеки Python, такие как SciPy, делают его идеальным языком для моделирования заболеваний. И, выполняя с его помощью эти симуляции, вы узнаете больше о динамике инфекционных заболеваний. Это может дать вам вердикты и мастерство, которые помогут принимать обоснованные решения и улучшить ваши собственные способности оценивать эпидемии в реальном мире.
За моделями SIR и SEIR еще многое предстоит сделать. Существуют и другие сложные модели, такие как модель SEIRS (восприимчивость-экспозиция-инфекция-удаление-восприимчивость), пространственные модели, сетевые модели и т. д. Исследование сложных моделей, а также данных реального мира, таких как геопространственные данные, эпидемиологические данные, поведенческие данные. и т. д., а также тщательно изучая последствия вмешательств, таких как стратегии вакцинации, доступность лечения, меры социального дистанцирования, вы еще больше разовьете свои способности к моделированию.
Ваши знания об этих инструментах моделирования могут существенно повлиять на защиту общественного здравоохранения в будущем, когда понимание передачи инфекционных заболеваний будет иметь жизненно важное значение.
Это уже слишком долго, но я надеюсь, что смог показать вам, как моделировать модели SIR и SEIR в математической модели с использованием Python.