数学建模社区-数学中国

标题: 数学建模之传染病SIR模型(新冠真实数据) [打印本页]

作者: 杨利霞    时间: 2021-6-22 15:35
标题: 数学建模之传染病SIR模型(新冠真实数据)
$ g! C1 D3 X3 w& y+ `( Z# B
数学建模之传染病SIR模型(新冠真实数据)2 i" {2 G6 k% z% Z1 f' o7 z
传染病模型的基本问题
+ r2 l( y" D) ~描述传染病的传播过程
, ]4 r& \6 P0 @, k1 C/ K7 B分析受感染人数的变化规律! v* Y  ^- J1 A, q3 o) Z
预报传染病高潮到来的时刻
1 T2 m% a1 p+ g3 x预防传染病蔓延的手段
2 G$ c3 \3 x6 V# L按照传播过程的一般规律用机理分析方法建立模型, G* {  ?% ?1 Z+ g5 L! k
注:我们这里是介绍数学医学领域中基本的传染病模型。不从医学角度分析各种传染病的特殊机理,按照传播过程的规律建立微分方程模型.# g/ P) M* A2 [& X4 ~
! N1 b- [5 z" X, ?& B6 t# a

) C- W  k( B; l$ T' ], o2 E8 v建立模型8 P! w: I$ _; C
模型一- E, v- I& O: D% b, f2 n
假设:
; O% a6 n6 l$ a6 o( `! D3 C  V+ w- Z5 y! g  |

( }6 q1 k/ l4 q0 T' r设已知感染人数为i ( t ) i(t)i(t)(病人数量随时间变化)8 i! ~* f2 D- r/ a' r/ F
设每个病人(单位时间)每天有效接触(足以使人治病)人数为λ \lambdaλ
9 H' n( H1 a  H: J2 n: Y模型:
. b  u( F1 ~5 t/ T单位时间Δ t \Delta{t}Δt内,新 增 的 人 数 ( 现 有 − 原 有 ) = 原 有 的 × λ 新增的人数(现有-原有)=原有的 \times \lambda新增的人数(现有−原有)=原有的×λ,即
7 _: Z/ q. l5 V! ?: R$ j. `  K- Q' s% D2 O. J
1 S+ b% t) d: Y  L9 R* u
i ( t + Δ t ) − i ( t ) = λ i ( t ) Δ t i(t+\Delta{t})-i(t)=\lambda i(t)\Delta{t}i(t+Δt)−i(t)=λi(t)Δt: m: m' G1 }% @6 e
一开始的感染人数为i 0 i_0i 6 d) `4 H+ f+ _! D5 n9 J# s
0% M0 @6 C5 j# F" @* S9 v% E
​       
4 t) u- K# T) d3 T
: A8 c8 X. H+ H! O4 q  ni ( 0 ) = i 0 i(0)=i_0i(0)=i 1 D. S/ i7 w$ [+ }- b4 }( q
0
% G9 V+ o. O) Y/ |" Q​        3 r2 y' Q: y6 l
8 N: @) n4 u7 ^+ X# H/ f! t& n
解微分方程可以得到: {+ u0 M9 W: F
i ( t ) = i 0 e λ t i(t)=i_0e^{\lambda t}i(t)=i & k' X6 m6 v$ [3 ^
0
/ i4 D, m1 \% u  _​       
7 k6 y% V! x2 R9 ?( M* d6 y e
: r5 E: a8 n! j2 f; Wλt+ p: m4 f+ }+ n' ^% E+ h
$ k# a6 O5 g/ u# u2 c' z- R/ l
所以可以可到当λ → ∞ \lambda \rightarrow \infinλ→∞时i ( t ) → ∞ i(t) \rightarrow \infini(t)→∞
/ o/ g9 O. N. V; e: `8 L当然这是不可能的,因为我们考虑的因素太少了,首先一个是,若有效接触的是病人,则不能使病人数增加,所以必须区分已感染者(病人)和未感染者(健康人)看模型二来解决这个问题' e! G9 a( K& y* M9 S/ C

4 j2 w. Y1 H& f4 N$ z6 }/ K

% Q* Y: I. }6 z0 b) e7 K模型二
  t5 G0 d" d. U! G假设:0 l6 C& C% K' C
4 e! t/ B+ y) t. B

& d4 R; K" Z$ G7 P5 D将人群分为两类:易感染者(Susceptible,健康人)和已感染者(Infective, 病人).
8 ~2 ~: a, H2 i: K5 K. j总人数N不变,时刻t健康人和病人所占比例分别为s ( t ) s(t)s(t)和i ( t ) i(t)i(t), 有s ( t ) + i ( t ) = 1 s(t)+i(t)=1s(t)+i(t)=1) l  E9 ?2 i# {
每个病人每天有效接触人数为λ \lambdaλ(日接触率),且使接触的健康人致病.6 l3 g+ b$ @) N  I6 N6 R( r5 A+ S$ N
建模:, [( [  @# V7 N! M' R' b
每天新增的总人数为原有的人数乘以每个人可以传染的健康的人数,再乘Δ t \Delta tΔt
# q: p7 B8 ?; N) x: Z. f' }7 m3 n# X  Q4 l5 k! x
$ i) X) l/ }1 Z7 d
Δ t \Delta tΔt除过去,两遍N约分得到下面,; b, {2 X5 m2 G" T
" K/ B: s+ l% w/ s
+ C5 z! ]0 I6 [. T" \3 J. P8 j
MATLAB解一下这个微分方程
! ?$ F2 w; |, K' V: g3 r* |6 R
7 Y  h9 E/ L4 x/ A2 f5 n; T
( a2 N+ f6 B& R) F
y=dsolve('Dy=n*y*(1-y)','t');
' Y/ ]. p5 M* k" D
0 y% S1 @$ C6 L/ k' r

5 `6 _9 u+ \4 N# l* Y) Ly =
/ ~( N5 `* V. h/ j -1/(exp(C1 - n*t) - 1)
& ^, A$ W2 L4 V' o) _: o( Y' J                      0$ f! _0 \; {$ t, G
                      1$ j2 l' z' L1 G; u" w4 g/ w
1+ T6 k, W8 a  j+ j( H
2
' m  W. r  o& @5 D, P36 s' T3 y& Z( v* I
4+ S/ Z: p- ~( _" d/ v, c' H9 e4 D
5' t- m3 w' l: \5 B8 C+ S
6
  T) \7 L) Q2 v2 S, K写规范点就是这个函数& i9 V$ B$ v* y6 `% Z' x

0 Z5 @8 a' X6 A$ o. E( ^
; k5 S! t# E6 v
函数图像大致为
4 o7 `! [3 ]3 j- N; u9 j0 P/ I/ k! P/ N$ ?) r$ u
% g4 V% U4 ]  n+ j9 u% c- m
可以看出t = t m t=t_mt=t % L" P/ o4 x; G, r2 ?8 E/ s/ ?
m
4 R# Y8 B$ u. e9 z, B7 R" k​       
6 _- q" ?; o0 P" w5 e# {# t 时这里图像的斜率有个最大值,其也就是传染的最快的时候,即传染病的高潮时刻,当然t m t_mt
: G1 V6 b, V+ B  K! G; Km3 }: i2 |' e' m, N
​        / a6 [( X! J6 A' a- }& G" V4 w
是可以求出来的
. `# a- r# e% V1 I& ^9 h5 I% ?% f$ \4 d1 B# z- f9 Y4 w* |

" q# g0 V. e/ f8 b# H- o6 u' O' ~再看原式,当t → ∞ t\rightarrow \infint→∞时i → 1 i\rightarrow 1i→1
7 ~/ X5 u' Q' \& r病人的比例为1,当然这也是不可能的,因为我们还没有考虑有没有可能治愈,看模型三) ^9 f( [, @, m2 G4 R5 E" {/ Z+ E
5 R/ p& b/ h/ E3 `0 @6 \

0 k0 f* a& _) E0 a0 g模型三
4 b+ }9 K# f3 p) @" S( L, C& p假设:
8 S3 s9 `2 f7 s  |5 t8 e# g* y0 v: n- m8 f

" k1 D3 ^5 [& l5 {1 ?传染病无免疫性如伤风、痢疾等——病人治愈成为健康人,健康人可再次被感染。/ m( {" p; B: e( i7 G
病人每天治愈的比例为μ \muμ (日治愈率),1 μ \frac{1}{\mu} # p- |9 r. w7 G& x4 w
μ
, T8 X- C3 n9 B8 g4 l1
9 ]& h* Y. O0 Y! e8 \3 _​       
. J9 d/ T' d" b. d' t3 i7 V  L 为感染期,
7 Z$ T8 i  x# q模型
6 J* e$ |; M- M9 e这是减去了治愈人数之后的新增人数9 I2 _. X/ u# ]9 g- m: E3 q7 H

4 y; W9 E1 q$ s  c  ^, _

; C$ E2 b- T8 \; P
* F. S1 q0 ]' W* W

  Z; Q: d  F; Y, B! g1 k0 g) l* d' Kσ \sigmaσ 为一个感染期内每个病人的有效接触人数,称为接触数
7 [( \0 d6 W% z
8 Y7 [) S1 d" q

# D: u" M. k: l! l8 U" `. c1 a' b可以画出上面的图形分析下
3 o  P, J6 m( b( N( ^4 f+ T: D( I; `2 ]9 V  l. t; _3 T

8 `1 {8 L! Y. T. k对上面的公式进行分析,可以得到,当i = 1 − 1 σ i=1-\frac{1}{\sigma}i=1− 7 R  U/ d1 t: `2 \! E5 p9 h
σ
+ V- L3 K: Q# d  }4 c1; z# Q$ T/ y3 X; ~7 q
​       
' f% q- P9 g* @' c 时,i ii对t的导数为0这也就到了i ii的最大值;当0 < i < 1 − 1 σ 0<i<1-\frac{1}{\sigma}0<i<1−
5 S1 T' ?1 F1 Iσ
* E/ r3 w) h3 \) ?$ _6 I1% H. o7 w" }9 N. c
​        1 G' {) ]6 E  v* f% G
时,d i / d t < 0 di/dt<0di/dt<0,i单调递增,且在d i / d t di/dtdi/dt最大时,i的斜率最大,增速最快;当i > 1 − 1 σ i>1-\frac{1}{\sigma}i>1− 7 }4 A( o  |1 y) I" D, t
σ! {5 N% g; L' |  C/ \. o/ y7 m  G1 M
1  v& a- F3 I. ]
​       
6 \: V' `8 ^, J2 E ,d i / d t < 0 di/dt<0di/dt<0,i是单调递减的。1 V) L# e/ `. Z. h

9 I2 V( g: N' b* b. ^. G9 }

1 k9 H6 H! [# e3 s( t当然我们也可以画出i ii随t的函数图像
$ f) C1 @- B# L. d
! [, k) ~5 _/ ]

# I. y: v7 z, M0 _2 e* R先看红线,若初始条件i 0 > 1 − 1 σ i_0>1-\frac{1}{\sigma}i
; i& F3 P4 i% R, i( ]( d  k$ p8 ?* l06 k6 _! [; q' W/ L5 V
​        ) n, h5 A) m) f
>1−
& p1 J6 ^+ l9 c9 Wσ
" S. ^0 J' v) s1 t5 s; C  _2 J1
2 c* ?$ X! W/ p​        7 ~* }! j  ^, T; n
d i / d t < 0 di/dt<0di/dt<0,i就是单调递减的,
( _& o  @7 ]# K* N若若初始条件i 0 < 1 − 1 σ i_0<1-\frac{1}{\sigma}i ! e* \3 R/ E) n6 e9 y0 h( g. _
0
6 o% C& ?* v& L9 v  [​        % p6 ]- G, f. G8 d4 w
<1− + v( l( I9 s: T) t/ c
σ
1 ?; q, }; x1 r6 _1
7 z1 `8 r) T' @$ b) L) J​       
6 E( D$ E) ?' d: Y ,i就是递增的,可以看到i对t的导数图像有一个最大值,下面的黑线就有一个增加速率最快的一个值,按S形曲线增长" P9 r# w0 K8 Y% B$ A$ R
" R% O; _+ y0 F
4 U; X  S$ D9 P9 ~/ W+ ?9 y
σ = < 1 \sigma =<1σ=<1时d i / d t < 0 di/dt<0di/dt<0 i肯定是单调下降的,最终降到0
1 M: ?) l0 z& o; r% l0 E& F3 K$ O$ Q( n1 H! q& [' `/ Y
& m9 j$ p6 I! i0 t/ j. e

# }& ~/ X2 z" U$ a
4 H# y+ ]9 {9 e& `% a" z. I6 h
综上:
; B2 z; c0 N$ q, Q- `8 h8 l+ ?想让患病者越来越少,σ \sigmaσ必须小于等于1,即感染期内有效接触使健康者感染的人数不超过原有的病人数.% U: m! Q4 c- V
9 h2 k+ t6 i  n7 ~
  Q1 T/ |" T2 f7 g  R" S
这里我们分析的是感染之后还能感染的情况,但有些病毒感染之后会在体内生成抗体,就不会再被感染了,下面我们分析这种情况。3 W! t& J8 y) N2 I0 r

! p# f+ |& u- M$ H3 O( a

8 C  U+ q; J( Z) d1 g9 |+ a$ I模型四 SIR模型' A) T1 n! @) J; \" S0 }, J6 U
SIR模型是常见的一种描述传染病传播的数学模型,其基本假设是将人群分为以下三类:
8 g2 h& ?9 I5 B2 Z, y, W
5 E" K: E+ X( X' W+ e$ {1 [

& Y; U9 ~6 l( Q# Q  C5 X0 s- ^7 I1 易感人群(Susceptible):指未得病者,但缺乏免疫能力,与感病者接触后容易受到感染。2 z! `: w0 b6 i& x# T9 J

3 w; H* ~) c9 R4 m( v

0 v8 c1 N# n1 ^2 感染人群(Infective):指染上传染病的人,他可以传播给易感人群。
+ b# w. U0 F- K* z; ^& H; i
$ f5 L  h2 ?  M8 C: {7 i& c
5 }3 v0 J2 h7 l- b9 {: n
3 移除人群(Removed):被移出系统的人。因病愈(具有免疫力)或死亡的人。这部分人不再参与感染和被感染过程。
$ C8 K2 j4 `. S: L. V9 w" h0 Y8 z4 S6 T2 d' r" q4 T

) `* ^# P9 e2 t1 `假设:
5 `! w( |1 b# a) v" K& j5 F8 C6 t; A1 s0 V5 g( Y: E
' Y# \9 z: ?1 _2 N) f( |( P. U1 \' W
传染病有免疫性如天花、麻疹等——病人治愈后移出感染系统,称移出者(Removed).
& s/ N1 Q- L# Y: G总人数N不变,健康人、病人和移出者的比例分别为s ( t ) , i ( t ) , r ( t ) s(t), i(t), r(t)s(t),i(t),r(t).
; l' f' |1 z# C# h! \/ {4 O病人的日接触率为λ \lambdaλ , 日治愈率为μ \muμ, 接触数 σ = λ μ \sigma=\frac{\lambda}{\mu}σ= ! J) D0 m. x5 l9 B3 H  n0 ~2 ]
μ) I- J# ]2 @! F# \* `8 ^
λ
- ~) ?/ }1 U7 C- b​        ! E7 S+ r7 v5 h0 V# J

3 G( Q8 ]. J3 D4 Z+ g建模:
: l# T" W1 J: n8 w5 Hs ( t ) + i ( t ) + r ( t ) = 1 s(t)+ i(t)+ r(t)=1s(t)+i(t)+r(t)=1
+ e7 T4 R9 t3 ~) e3 `% M2 o( ~这个就是病人减去治愈的人,和上一个模型是一样的1 @2 f/ F' i+ d7 _0 g3 r& h) x

: H% P! R/ \) C
9 t# u: C: G, [5 {
因为有治愈后是有免疫性的,所以可能被感染的总人数要减少,减去移除者就是$ G, c. v$ J4 l  @6 _3 Y; r; F

. k# a: N% N  I
: @# ^  m9 u/ D( j0 \
将上式化简为:
! N2 w* _; q! B8 F$ n) F
+ a- F! x" P: ~0 N3 d) P# Q. x
4 t2 P3 K; ]; \- F' p
i 0 + s 0 ≈ 1 i_0+s_0\approx 1i 3 K+ k0 q5 n) K  B- o, W3 S5 k
0
- }$ j$ U: o0 Q  P​       
' B) t; }& K/ W4 T +s # p" ?9 W% J9 N- e5 l5 y
0
( k# Y7 G& P7 d3 b6 D- y3 ]​        5 W/ ?7 U9 ?4 a9 \, I" E( g+ G& a
≈1(通常r ( 0 ) = r 0 r(0)=r_0r(0)=r
9 ?" B: z4 M2 `8 _* g0
; Q. `+ D8 M! A  M/ q​       
1 }$ l; w) n  U6 N) W: O 很小)
" a* I7 @* t4 Y9 x; B9 F5 e
+ l3 ]3 R; a) j

3 k! y4 [7 U1 h关于i(t) , s(t) 的非线性微分方程组,没有解析解,只能通过数值计算得到s(t), i(t), r(t)的曲线,下面来看下曲线的数值解的MATLAB程序9 N( w0 t% U) ?
0 I4 f5 K* L: R; g# t1 V" g
7 Z! k4 v$ j2 Q+ L& u2 o
这里我们先设λ = 1 , μ = 0.5 , i 0 = 0.01 , s 0 = 0.99 \lambda =1, \mu=0.5, i_0=0.01,s_0=0.99λ=1,μ=0.5,i
5 W1 {% Q+ B/ {* Q* x& a$ [2 t0" f2 M( R- ~$ z) s
​        - q$ A+ t% u+ b: j* x3 w% p
=0.01,s 0 W6 h1 q. \2 }; y% b! U+ X
0: G# M0 O6 i) \, T/ q1 k1 s
​        , O' ~2 z2 n# x. j3 @0 e
=0.99
6 C7 b6 G+ U; w2 f) L: h4 J, p也就是平均一个病人人传染一个正常人,治愈率为0.5;开始的病人比例为0.01,正常人为0.99,设没有天生带有病毒抗体的人,所以r 0 = 0 r_0=0r
1 n7 N1 |3 R7 g6 y4 D2 i0, j# k6 i8 D; z* p( O) s
​       
, _" S) \+ i1 w0 e8 D: e2 V =0,之后若果病人被治愈,则具有抗体了,有抗体的人为:r = 1 − i − s r=1-i-sr=1−i−s
1 M6 ?+ I- Y0 h3 _  l+ l. x) a. s6 r. J. U7 f  J% l
# [) r8 @  m7 d4 F3 W, B+ B
ts=0:40;& _- p1 l: o7 J8 g* H& U
x0=[0.01, 0.99];
  D8 _1 t( R8 Q[t,x]=ode45('ill',ts,x0);
& X7 a4 E$ t5 I+ G" Z" |% J8 z: Pr=1-x(:,1)-x(:,2);, e9 f/ M4 ]8 S$ K2 w
plot(t,x(:,1),t,x(:,2),ts,r),grid
+ [2 P: k- t9 i9 M; l. v4 Blegend('i(t)','s(t)','r(t)')9 C% z" x& |! }8 ^

3 O" F9 j  _2 G  T* a/ b
8 {6 `5 }0 E: z7 Q0 ?
function y=ill( t,x)% w) J' y3 H: G, H& A* S
a=1;$ b, I% F# u5 S! X& t
b=0.5;1 K8 A) u0 ?, g$ w; M
y=[a*x(1)*x(2)-b*x(1);-a*x(1)*x(2)];8 F. j6 o2 p1 h0 ]4 g& |
1$ x5 \8 p+ F" V* \( y3 X
2
) T0 z$ F7 \; o( O' h; h3
$ j9 @/ x2 c5 u& X3 L) Z0 a; e4/ i  F1 q0 h8 y$ x3 v
59 {* e3 m& u. N5 i# m" ?& C( S6 f
64 e$ N: J+ e) Y( ]2 c, i% i
7
  _1 ^0 r5 D* Q( b6 F1 X! ?0 i87 B$ `% ~$ d+ Y) Z
9
  w- `0 Q( f( v( ^( n10
( s* O6 a; x8 L; v/ N: t  o11
, Y% S2 x. t' Z6 Z* ~) F# T5 B
, E) x7 Z7 a7 C8 S8 `& O

5 u3 @/ x# v  I/ u$ h7 V可以看出:s(t)单调减,r(t)单调增,都趋于稳定, i(t)先增后减趋于0.% }* t0 C1 y$ g
结果分析
+ n7 D% @. n& N7 S' y# s先回顾一下参数+ D  a1 h  y) D" G  e( |
接 触 率 λ ; 治 愈 率 μ ; 1 / μ   平 均 传 染 期 ( 病 人 治 愈 所 需 平 均 时 间 ) ; σ = λ / μ   接 触 数 ( 感 染 期 内 每 个 病 人 有 效 接 触 人 数 ) 接触率 \lambda;治愈率 \mu ; 1/ \mu~平均传染期 (病人治愈所需平均时间);\sigma =\lambda/\mu~接触数 (感染期内每个病人有效接触人数)接触率λ;治愈率μ;1/μ 平均传染期(病人治愈所需平均时间);σ=λ/μ 接触数(感染期内每个病人有效接触人数)0 w$ [$ n& h( c2 Y4 {  B* E2 J. T
可以分析出:
# X; ^2 _7 T* G7 C4 Q% n" s0 J- o" Q* _0 ?( j& `+ R

0 C8 c( Y0 q  G% ?% h1 R随着卫生健康思想水平高,接触率λ \lambdaλ变小
9 @5 Q; L2 o' i7 D随着医疗水平的提高,治愈率μ \muμ增大
% F8 s7 D+ l0 g+ R2 m$ o接触数σ = λ / μ \sigma =\lambda/\muσ=λ/μ减小——有助于控制传播.
8 Y7 a3 G  q" N. j/ k3 m我们可以试试稍微减少一下λ \lambdaλ,增大μ \muμ,来看下效果, A; P3 K* \* b2 A/ ]& k! c0 i5 V/ S

% f- `& ?1 r. ~) d
8 H% @- K; X' S& U2 }3 O
ts=0:40;
& Y) F' u! \, ^5 r2 O) v7 `x0=[0.01, 0.99];/ n1 z9 h2 Q# c( E
[t,x]=ode45('ill',ts,x0);
# Y3 @7 X* a7 ?1 Gr=1-x(:,1)-x(:,2);7 f- Y% B* J# u; C* [% w4 z
plot(t,x(:,1),t,x(:,2),ts,r),grid
7 |6 `7 J4 t; [. ~$ Mlegend('i(t)','s(t)','r(t)')" y  X7 t$ e, E8 C
/ R  g( ]* Z& K  ^

9 z/ ]: P. f8 P$ J, jfunction y=ill( t,x)
3 F, B! g6 E! V9 v( b% i' ua=0.8;: @0 o2 {7 D* g* _
b=0.6;7 L( i, A" a6 C) H: O! L
y=[a*x(1)*x(2)-b*x(1);-a*x(1)*x(2)];# v6 S- @6 L+ y& d& P7 x
1
( n0 j- X$ ~7 n0 T2
& T3 n. m  f, e& O$ a6 u8 \3
8 O3 A2 `+ }& q. u  C9 L46 c6 O0 D- P4 @9 z. ~+ [
5
3 X4 S. N4 y4 c# V5 o  B67 r* ~" a4 M# F$ e& ~  D8 p
76 ]+ d5 i/ y) r2 K
8
6 ]2 ~* c/ H; R! B5 c9
! f) V& l, [2 ^2 Q1 d+ h10
' J" K2 S9 z- W$ c/ k2 K4 r' G4 ]117 s2 _- z; ]" A  v8 j6 d

7 ^0 b" x$ R8 L
) Y8 M5 X1 t8 J8 e8 |! A
综上我们可以得出结论:想要减少传染病的传播,我们就要在接触数σ \sigmaσ上下功夫。5 ]$ y, B: ~  E
* j" g, ~( z' J$ Y
* p( q6 q9 j/ i" O( g
实战建模
; i! _5 Q% L/ J数据处理9 W- f% r$ v% H

+ ^) L9 }/ A" s! m

  c, {- z4 N7 p首先,我用python爬虫爬取了丁香医生官方数据,一共5534条数据 特征包括感染、死亡、治愈的总数,当日感染、死亡、治愈新增,疑似病例,时间,省份等14个特征$ o# `9 q% o- t4 ~( z
! X3 M* V6 d' S0 `3 \; ]

+ x) j/ g  V. h: E# |0 p. I, {
; y( E" s8 k  O' ~4 T! c
1 k$ G# m5 E+ B# i: u' j5 q
然后用python进行数据提取,提取了较为典型的湖北省的数据作为我的参考依据; s& ^5 P4 j4 T/ X  R" D/ p

! W# E  h6 {: Q* I: B3 t4 q" c$ T

: u% X! S  g. a9 Y$ m: g
* ~' ?# e, s2 F9 E% Z, j- \8 l& D
( C5 M, u3 R' w2 y- N( p
然后用python对数据进行清洗,提取出了患病总数,现存患者总数,死亡总数,治愈总数,时间,省份这几个特征" |1 R+ g! x# C

, I# L$ t/ U- Z- M; F

* j! B: ^2 I3 F1 v: a+ b0 i1 Z对日期格式进行修改,值保留月和日,并与死亡人数的位置交换) U: ^/ ]- M5 s& D
9 H8 N3 X9 K. X9 ~7 f& y

# Z" O  \$ s1 N" b8 V这里我用python对提取的四个特征分别进行了数据分析(主要包括计算最值,平均值等,),并把1.20日作为第一天,7.02日作为最后一天也就是第165天,做了可视化可视化处理。
  E7 Q* `' ^6 L1 m2 K$ d感染人数示意图! N+ Z) y( u, z; I/ M
( z- n+ Y# R8 @4 A# C7 A6 r
0 b+ M" f6 x+ V
治愈人数示意图
# m5 C. N! D! O4 p# B. X4 v  A" h' G7 x3 I
0 G" O  R7 \$ i, d8 v

' P2 K5 q) C* n. F& b& H
, E. y% c4 J$ y, w5 k1 s
现存患者数量图; \1 y! l+ y" b* p3 D

: {7 W+ C  u4 e" i" a6 a

5 W# ?5 i! W6 K6 ?% N死亡人数示意图& G: _9 _2 h7 n# {8 ?2 c7 G

' G5 r, w; `6 _# C9 g  \8 j; O
; `0 ?, l+ l/ |7 w1 P' }4 D

; h1 L, J8 C$ p! s; I
! F+ k: v5 M& w% d( R  }2 E3 Y! J: @
经过上面的图片与describe数据分析,我们发现有一天是异常的,患者多出了平时的十倍左右,经过查阅资料,这天因加强了检测标准,所以增多了很多。为了避免这个数据的影响我们选择将这一天删去(或者用平均数或中位数代替也可)  n# H' v: g. s* F  h' ~( a2 {
将上面清理过的数据存放到csv文件中$ I. u* S  Q% _1 z& R0 P' K
: m' J1 A# S' t, b% T
+ H- i  X* x5 W/ t
模型建立
! y' u# j, v. b7 ~6 I$ L# l模型假设
6 K- C+ D3 D! G6 p6 D. C' v6 t经过上面数据的分析,我们大体可以进行如下假设:
& o$ g5 ^: t: ^, M' b1.由于不存在封闭情况,考虑开放体系。$ ?3 F0 P  H. u2 T
2.目前数据以天为单位发布,因此不考虑连续变化情况,只考虑离散的方程。
/ ]# c7 q% G" T) F8 N3.新型冠状病毒的治愈人数和死亡人数相对较 小,因此只考虑 Susceptible(易感)和 Infected(感染) 两类人群。设易感人群总数为N! O9 f3 G) S2 |  u
4.经专家鉴定新冠病毒患者治愈后至少六个月之内不会再被感染,所以设治愈后移出易感人群。
9 y6 S- Y. I8 o2 {* l5.设每个病人每天有效接触人数为 λ \lambdaλ(日接触率),且使接触的健康人致病.0 p( C/ K. y0 P. a6 l7 ~' S) A$ d) t+ ~
6.设病人每天治愈的比例为 μ \muμ(日治愈率)
6 \0 P# t0 Q+ X: e* g1 c7.时刻t健康人、病人和移出者的数量分别为 s(t), i(t), r(t).* K4 {8 |; c- `1 K5 ~( v& |

( {9 s, d4 i: _+ L" F: F
/ d. @, i( l! o! B" u) H
模型一; v; `. y3 i" ~4 |

' W4 A# Y) P0 u

# Z6 \7 U# m2 t8 l分析可以得到移出者r(t)=治愈人数+死亡人数2 |1 l. L8 G% {+ o' Q
通过python数据处理,我们算出了r(t)的值,并将其可视化! v8 u3 f: x, S6 j- _- G& N* i

. M9 \+ \  y. Y; W3 x

( X# I% x' r, L& R5 H8 i/ m# C
& k" ]* }% [  I+ R  {3 m5 q2 |

+ f. H: H, E+ b- m! t我用MATLAB对其进行了拟合,拟合图像为
- X: O; K7 z( u3 B( }. X
" |/ A8 B) d4 J0 ^8 v
5 X: B8 V% z  U; ^2 E" f
- d& H7 n1 H7 F0 i6 b9 s! `
) M; [0 i5 c0 l6 l0 e; j( F

$ C8 V6 @$ F: v! s2 J7 ~

! N: u& u% G7 H; f, k分析可以得到患者 i(t)=患病总数-移出者
! J. i5 h4 F( ~2 B. b) D6 e5 e可以通过csv文件的currentConfirmedCount 直接获得i(t)数据,当然也可以通过 i(t)=confirmedCountv - r(t)获得,对此我也做了可视化展示& f2 m; a+ x) w8 j( Y

* e4 I- i. ?0 U6 `, d1 t* R& H7 L
8 f( c" @- y/ |7 o* b
通过MATLAB程序对其进行拟合,可以得到r(t)的函数图像大致为2 M2 z$ q6 \3 Y! r, t
9 L  p$ o* O; o5 {+ \. u/ u
- U: S' P8 x8 f+ P+ y
5 w' |- Y7 D) C* ]

3 _$ S0 N% C5 j( b, J, V) ?
% \. Y( \! C/ u. _6 ~6 N

0 R, \6 C' y$ k' \( m, C% T9 X为了方便,利于公式推导,我们先设时刻t健康人、病人和移出者的数量分别为 s(t), i(t), r(t). 所以有- F0 u+ b$ g+ ^5 E5 Z

7 X+ v1 m* E; Y* A. D/ k# v* T# Q
6 M  Y) K: m1 C% j1 O0 H
可以推导出每日新增病例的表达式
" }5 F. P; ]/ \  d) E+ Q
6 @1 n7 x# Q; c# x2 j
  C% n/ `4 G8 H$ z  ~7 E6 y! s
& E+ m5 H9 ]1 S9 _  `

8 |+ S( T, v# \
" a$ H& h% X& H) r4 X) r

9 Y: r+ k$ `, R+ W* n  \由以上两个公式可以推导出以下两个微分方程) B% \3 a- T3 ^- R1 K
  U; V- Z& @9 }5 w. R' ^
5 \! E+ z3 U% R) D$ H* D

6 O- @; m! ?1 S3 T4 ]
  [# c( ^$ x. V
可以知道初值; [3 o! ~2 \, I; P3 I6 y
i ( 0 ) = i 0 . s ( 0 ) = s 0 i(0)=i_0.s(0)=s_0i(0)=i 5 {6 y" K6 l. G' v+ C/ i& {
0
& x5 d& T) f; n4 u7 U' v( \​       
, s3 \+ O0 [, R8 _0 U5 y! h9 _ .s(0)=s - G% h( a& t. k) y
0
0 ^1 K0 A5 g" a4 @& R% E! e: ~​        1 b) {' k) C- f! w8 o- j1 j# X

; A) c9 e; @. D+ m2 ]5 U, i0 ]% I因为一开始治愈的和死亡的肯定很少,所以r0可以看为0,于是就有:: u: w9 h6 R; V8 s- d
i 0 + s 0 = 1 i_0+s_0=1i
9 E  S/ J5 i( `0
# _: F; y; X# q* f2 T. t: t​        ( y* `7 n1 l; ?3 K4 a6 ^. [
+s   T% I- {% d% M  ]! n* f$ s0 k
0; I6 B: |" h. \5 w
​        ) P- l9 G6 B$ _. b8 Z- s& s1 x6 W) f
=11 J. @& a/ O: v
通过解以上微分方程我们可以根据经验假设λ \lambdaλ (日接触率)和 μ \muμ(日治愈率)的值分别为1和0.5(也就是每个患者可能使1个正常人患病,患者可能有0.5的概率被治愈);由于一开始患者肯定比正常人少很多,所以我们设i0=0.01,s0=0.99。对其求解可以得到s(t), i(t), r(t),的变化图像
! h; _8 x% R3 {/ O
3 O* }4 w1 j6 ]& E" R0 T
% }% N5 c& z! \: r
/ S- S' l5 L& P) V* z! R! f

* N9 U4 A! e+ [' B) A' _% u) k) mMATLAB程序如下
8 d: H2 a* z7 b3 u9 ]! x: Kts=0:40;
# q/ m% W2 ^9 _x0=[0.01, 0.99];3 v( B! U  ^( k& C
[t,x]=ode45(‘ill’,ts,x0);  S( \  R0 e/ m* L6 j( q
r=1-x(:,1)-x(:,2);6 e% V1 M6 x" X2 v" z
plot(t,x(:,1),t,x(:,2),ts,r,ts,x(:,1)/x(:,2))- @+ P! u/ s- Y, U: j
legend(‘i(t)’,‘s(t)’,‘r(t)’)
8 m; K0 A1 }( A1 @- u
4 O( k0 }# ^/ P! [( b+ X1 N) D6 P
/ Y0 x/ ?8 z1 B% a1 q3 }+ O
function y=ill( t,x)
5 L* g# s; o6 l$ y6 D  ta=1;
( ^! \$ m8 O3 T3 l+ f: u2 Lb=0.5;
1 g/ L. `- T* L, I, C5 c4 dy=[ax(1)x(2)-bx(1);-ax(1)*x(2)];9 N8 m, f; f% L3 b& S, n- E  s2 F

+ j2 L/ e' m" g% r
/ v& ^$ L2 M  Y6 I/ a4 N7 _) y+ S
结果分析:患病人数肯定有个高潮,但之后高潮就会减弱,并逐步降低为0。随着医疗卫生条件的不断提升,患者的 λ \lambdaλ(日接触率)肯定降低,μ \muμ (日治愈率)肯定上升,所以我们可以把λ \lambdaλ调一点为0.8,μ \muμ调高一点为0.6,可以得到以下趋势图。所以应对传染病很关键的一点是我们要提高医疗卫生条件, P/ b4 i0 t7 F5 C) p" M

7 ^9 r$ S* C& p0 t" @
( g, \. j4 i1 w4 N/ F

4 N  Z3 l8 ?! [/ `" C" n模型二; \2 s9 {' ]% `2 {& @9 y& O

5 Q, u, ^# i* C2 z7 _2 V) J
% i7 J5 l: n# K8 _5 ~2 z
实际上,λ \lambdaλ (日接触率)和 μ \muμ(日治愈率)都是随着时间变化的,这里我们设s(t), i(t), r(t) 为第t天健康人、病人、移除者(病愈与死亡之和)的数量, s(t)+ i(t)+r(t)=N..
* N4 J1 Z5 d$ x1 T0 ^6 @(t), (t) ~第t天感染率, 移除率(治愈率与死亡率之和)8 K* s6 t+ o- K) C4 h% M. n. o
有 d i / d t = λ ( t ) s ( t ) i ( t ) − ( t ) i ( t ) di/dt=\lambda (t)s(t)i(t) - (t)i(t)di/dt=λ(t)s(t)i(t)−(t)i(t)3 t9 c& ^5 G+ I: s, T' N
因为s远大于i, r,s(t)视为常数,所以有, B6 M) [: B7 e, C: B
) X# s  q3 ?7 ]5 e2 t1 ~; o

4 d4 f5 i/ ^$ C! u+ W2 [6 r: j5 N6 h2 Q4 n* L
4 @, K* l/ Q6 D# G
取差分近似导数6 {+ V  P" n5 W  p' a2 X
7 M7 i& L' y( k5 ]2 j; s, Y% u8 t

  v+ D; f+ t' E  I( v* T& l4 ]# t; {  l1 G3 H0 R

9 [3 X, q. A8 i$ q$ W* c! R我们可以先用真实数据对(t)进行展示并进行拟合
* b7 L6 ?. v+ U! T. T
3 K/ S0 `7 E( S1 ^& K: X% c) e% I

& A% E6 h. w+ `( h; @9 C" D# T6 _" E9 u$ L

& h4 C9 o! z% ?, c- ~8 R当然同样的方法对(t)进行拟合
  L% J: g9 J5 G$ f, c" j& h  F" x7 }: p) Q! f. L# u' P, B+ V

: d# X  a9 \- _7 o5 x: S1 P做不出来了,好难,光这些东西就弄了四天,到了数学建模国赛得多难多累啊,哎,让我这个小白手足无措。毕竟还没有正规的培训,这个模型等期末考完试一定好好做做!!!; d$ K0 ]' d! j  ]# G8 `; Z
冲国奖+ y& X8 ^& ?! ?" I
冲国奖
2 k1 e( w! e4 E  Y: w$ G冲国奖% j0 C8 b* l* ~1 i& Z! U
————————————————
! z  O% [8 ]8 Z版权声明:本文为CSDN博主「小白不白嘿嘿嘿」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
8 G* p: ^: A3 R) w原文链接:https://blog.csdn.net/weixin_45755332/article/details/107094630
  O; z! p1 {) O. |) P) K
' o0 E$ {$ O  g+ R4 L* W% t- R: G1 [' P" o3 z





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5