疫情模型基于matlab SEIR模型疫情分析预测含Matlab源码 666期

Posted 海神之光

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了疫情模型基于matlab SEIR模型疫情分析预测含Matlab源码 666期相关的知识,希望对你有一定的参考价值。

一、SEIR模型简介

1 SEIR模型简介

如果所研究的传染病有一定的潜伏期,与病人接触过的健康人并不马上患病,而是成为病原体的携带者,归入 E 类。此时有:

仍有守恒关系 S(t) + E(t) + I(t) + R(t) = 常数,病死者可归入 R 类。潜伏期康复率 γ1 和患者康复率 γ2 一般不同。潜伏期发展为患者的速率为 α。与 SIR 模型相比,SEIR 模型进一步考虑了与患者接触过的人中仅一部分具有传染性的因素,使疾病的传播周期更长。疾病最终的未影响人数 S∞ 和影响人数 R∞ 可通过数值模拟得到。

2 SEIR模型中的S\\E\\I\\R分别表示什么


SEIR模型是传染病模型的一种,一般将传染病流行范围内的人群分为以下几类:
(1)S 类,易感者 (Susceptible),指未得病者,但缺乏免疫能力,与感染者接触后容易受到感染;
(2)E 类,暴露者 (Exposed),指接触过感染者,但暂无能力传染给其他人的人,对潜伏期长的传染病适用;
(3)I 类,感病者 (Infectious),指染上传染病的人,可以传播给 S 类成员,将其变为 E 类或 I 类成员;
(4)R 类,康复者 (Recovered),指被隔离或因病愈而具有免疫力的人。如免疫期有限,R 类成员可以重新变为 S 类。

3 为什么在“新冠”疫情模拟过程中选择SEIR模型作为基础模型
(1)原因一:SEIR模型相较于其他的几个传染病模型,多了几项内容。结合本次疫情分析,我们可以知道,“新冠”疫情是由为期14天的潜伏期的,而且当感染者经过治愈或是自身免疫成为治愈者后,体内产生抗体,不会再成为易感人群被感染者感染。所以在模型中E项是必须存在的。SEIR模型符合新冠疫情的传染特征。

(2)原因二:同时根现有的一些资料显示,可知,很多专业的研究团队都在使用该模型研究疫情的发展情况。例如:钟南山院士团队在Journal of Thoracic Disease《胸部疾病杂志》发表了题为“Modified SEIR and AI prediction of the epidemics trend ofCOVID-19 in China under public
health interventions”(基于SEIR优化模型和AI对在公共卫生干预下的中国COVID-19发展趋势预测)的文章。

4 使用该模型过程中的数据从何而来
通过上网搜索,我们小组找到了有关本次新冠疫情的数据(治愈率、死亡率)。以下内容引用自新京报网《关于新冠病毒的传播性,这五篇顶级论文都说了什么?》
(1)新冠病毒具有较低的致病性和中等传播性
此次的新冠病毒,是过去20年中新出现的第三种能够跨物种感染人的冠状病毒。此前两种分别是2003年的SARS冠状病毒和2014年的中东呼吸综合征冠状病毒(MERS)。
根据一篇发表在《Microbes and Infection》(《微生物与感染》)期刊上的论文《Pathogenicity and Transmissibility of 2019-nCoV—A Quick Overview and
Comparison with Other Emerging Viruses》(《2019-nCoV的致病性和传播性——快速概述和与其他新兴病毒的比较》)进行的分析对比,我们可以知道,新冠病毒无论是从病毒率或是R0均没有SARS病毒强。
但与2009年的甲型流感、2014年的中东呼吸综合症比,则有更强的感染性(即R0值更大)。这反映在感染的人数上,即是新冠肺炎的确诊病例更多。但整体来说,当前的新冠病毒似乎只是具有相对较低的致病性和中等传播性。

(2)其他城市疫情相对武汉具有1-2周的滞后性
根据另一篇于1月31日发表在《柳叶刀》上的论文《Nowcasting and forecasting the potential domestic and international spread of the 2019-nCoV outbreak originating in Wuhan, China: a modelling study》(《对源自中国武汉的2019-nCoV暴发的潜在国内和国际传播的预测和预测:一项模型研究》)认为,中国多个主要城市的疫情已经呈指数增长,但大概滞后于武汉暴发的大约1-2周。

5 该“新冠”疫情模拟小游戏中使用该SEIR模型的流程

二、部分源代码

clear;clc;
[data,~]=xlsread('data.xls');%读取data中的数据放入data中
%声明全局变量
global g;           %潜伏着发病率
global t;           %发病者隔离率
global mu;          %治愈概率
global S;           %易感者人数
global E;           %潜伏者数量
global Ii;          %发病但未隔离数量
global Iu;          %发病且隔离数量
global D;           %死亡人数
global R;           %退出者

now_confirmed=data(45,:);       %现存确诊
sofar_confirmed=data(46,:);     %累计确诊
death=data(47,:);               %累计死亡
cured=data(48,:);               %累计治愈
N=5917e4;                       %总人口数
[testdata,~]=xlsread('test.xlsx');%读取test中的数据放入testdata中
Iu_new=testdata(1,:);
R_new=testdata(4,:);
D_new=testdata(3,:);
%---------------------------------------------------


D=[death(25:end) D_new];
R=[cured(25:end) R_new];
Iu=[now_confirmed(25:end) Iu_new];
sofar_confirmed=[sofar_confirmed(25:end) testdata(2,:)];
figure
plot(R,'g');
hold on;
plot(D,'r');
hold on;
plot(Iu,'b');


%estimate mu---------------------------------------------------------------
figure ('name','治愈率');
plot(diff(R)./Iu(2:end),'r');hold on;
p=polyfit(1:length((diff(R))./Iu(2:end)),diff(R)./Iu(2:end),1);
plot(1:length(diff(R)./Iu(2:end)),polyval(p,1:length(diff(R)./Iu(2:end))),'b');
mu=polyval(p,1:length(diff(R)./Iu(2:end)));
legend('实际','拟合');

%estimate E----------------------------------------------------------------
figure('name','潜伏者数量');
E=[];
for i=1:28
    E(end+1)=sofar_confirmed(i+12)-sofar_confirmed(i);
end
plot(E,'b');hold on
f=@(x,xdata)(x(1)*exp(-1*(x(2)*xdata+x(3))));
coeff=lsqcurvefit(f,[16000,1,0],1:length(E),E);
plot(f(coeff,1:length(E)),'r');
title('E estiamte');
legend('实际','拟合');
E=f(coeff,1:40);E=E(1:end-2);


%estimate Ii---------------------------------------------------------------
Ii=[];
for i=1:38
    Ii(end+1)=sofar_confirmed(i+2)-sofar_confirmed(i);
end


%--------------------------------------------------------------------------
D=D(1:end-2);
R=R(1:end-2);
Iu=Iu(1:end-2);
S=N-D-R-Ii-Iu-E;
t=1;
g=0.1;
global start;
start=[S(1),E(1),Ii(1),Iu(1),R(1),D(1)];            %定义初始状态
[x fval]=fmincon('ff',[0.05 0.05 1e-7 1e-7],[],[],[],[],[0 0 0 0],[5 5 0.1 0.1]);       %求解非线性多元函数最小值
mu=polyval(p,1:100);
y=SEIR_discrete(start,t,g,mu,x(1),x(2),x(3),x(4),54);

三、运行结果




四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
[3]周品.MATLAB 神经网络设计与应用[M].清华大学出版社,2013.
[4]陈明.MATLAB神经网络原理与实例精解[M].清华大学出版社,2013.
[5]方清城.MATLAB R2016a神经网络设计与应用28个案例分析[M].清华大学出版社,2018.
[6]数学思想——1.SEIR模型

以上是关于疫情模型基于matlab SEIR模型疫情分析预测含Matlab源码 666期的主要内容,如果未能解决你的问题,请参考以下文章

数学建模基于matlab模拟疫情SEIRS模型含Matlab源码 2214期

Python小白的数学建模课-B6. 新冠疫情 SEIR 改进模型

Python小白的数学建模课-B5. 新冠疫情 SEIR模型

Python小白的数学建模课-B5. 新冠疫情 SEIR模型

数学建模累计确诊怎么计算的

拐点何时出现?这是北大面向新冠疫情的数据可视化分析与模拟预测