数学建模社区-数学中国

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

作者: 杨利霞    时间: 2021-6-22 15:35
标题: 数学建模之传染病SIR模型(新冠真实数据)
$ q; I  M# |' A) F: d2 j
数学建模之传染病SIR模型(新冠真实数据)
7 _0 k/ N3 m2 v, U2 L( K( z- i( d3 _传染病模型的基本问题+ o2 G: e- W9 H1 u. k- h# S) n, }
描述传染病的传播过程( h$ }# D. V  ?) U9 T* x6 N" v
分析受感染人数的变化规律
2 G4 ^* ~& [7 K, R- x# n- }预报传染病高潮到来的时刻9 H* j$ s3 J$ N. S- w
预防传染病蔓延的手段
( Y* e" g) E, y* x: r' K  h按照传播过程的一般规律用机理分析方法建立模型
$ V! f! Z  I  n! [注:我们这里是介绍数学医学领域中基本的传染病模型。不从医学角度分析各种传染病的特殊机理,按照传播过程的规律建立微分方程模型.
% H8 G/ k& P; d0 Z# e2 j) ?( t
& |8 I/ o) E/ w1 S, T( _

% v4 p, r; d4 |- W0 l建立模型
6 t! o3 z- d' F9 l: F/ }- a+ n5 A模型一/ d9 p% l& s$ v6 b" c# {* K
假设:& x$ W2 ]% I5 g1 c" v
# E! g3 u/ H7 F# {/ h) u; ~
- ]2 E& V8 V! e2 J+ ?1 \9 g2 ^% _/ A
设已知感染人数为i ( t ) i(t)i(t)(病人数量随时间变化)
6 H! ?. \: F7 \' l$ j  v% |设每个病人(单位时间)每天有效接触(足以使人治病)人数为λ \lambdaλ
: M+ p# I. S- y: `# I模型:1 f! r' T, [: T) E) _# G1 k
单位时间Δ t \Delta{t}Δt内,新 增 的 人 数 ( 现 有 − 原 有 ) = 原 有 的 × λ 新增的人数(现有-原有)=原有的 \times \lambda新增的人数(现有−原有)=原有的×λ,即
/ i5 X7 m0 u/ n# E- _0 f2 N" q; ?. ?9 _: Q0 Q7 j# X
5 K. J7 x) I* s' J7 h; k2 S+ I/ L
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)Δt3 R, H! }0 M" p; k' W! Q
一开始的感染人数为i 0 i_0i
( x( F+ u0 f' h2 }# s0
# w- x7 @' Y/ X+ z​          \. E4 c$ h* a, w! F( O/ Z
6 s5 K" g5 W( M& m7 o% \
i ( 0 ) = i 0 i(0)=i_0i(0)=i
3 `9 o% ?: l7 a; V; ~01 b4 Y/ b- x$ Z  i7 k6 q& s
​       
+ Z8 Q2 q' j% n
- {" x( K4 c$ R5 C解微分方程可以得到
0 M$ Z( G, E' X; ai ( t ) = i 0 e λ t i(t)=i_0e^{\lambda t}i(t)=i
7 a2 g. I6 i* h, m* X06 h9 a) y7 g6 O% ?' M3 \5 F" r
​        4 T2 ?* }1 U% l! y5 Q4 B2 ^
e
! o8 B2 v5 l# i2 rλt
9 Q/ a) C9 c0 Z. G: _6 \2 j
& @& f$ a$ ?- k1 L6 E所以可以可到当λ → ∞ \lambda \rightarrow \infinλ→∞时i ( t ) → ∞ i(t) \rightarrow \infini(t)→∞
) `, E" d) h0 K. h7 u  g当然这是不可能的,因为我们考虑的因素太少了,首先一个是,若有效接触的是病人,则不能使病人数增加,所以必须区分已感染者(病人)和未感染者(健康人)看模型二来解决这个问题
: d% d  z* d# a- B' q8 \; M* Z9 F
8 ?5 Y+ k+ l- s$ ^7 H: z

" p0 O% H! \# E8 _! _1 B1 S& Z模型二8 `' k9 f  g" Q6 i7 H7 ^
假设:) O& q5 E' Q" f; m; \; w: D; b

+ Q" e0 \& l8 G
9 D4 h' h) y: ^. Y+ }
将人群分为两类:易感染者(Susceptible,健康人)和已感染者(Infective, 病人).) O0 j, H8 M  ]' U
总人数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)=13 O, B$ c  x# R1 I4 V8 }% p; E
每个病人每天有效接触人数为λ \lambdaλ(日接触率),且使接触的健康人致病.+ w8 }: a% T1 D/ n/ X/ Z
建模:* M  P2 ~7 b' z& F% _3 @2 n
每天新增的总人数为原有的人数乘以每个人可以传染的健康的人数,再乘Δ t \Delta tΔt' X0 L4 l* t: E2 \$ N
( c7 G# A, `0 w: L& y3 n
3 s5 L+ m) ?: r+ f* M; W
Δ t \Delta tΔt除过去,两遍N约分得到下面," x% q; |( L: r" X0 ?
' C$ i. t: \, s

2 G# V* k, k5 G/ SMATLAB解一下这个微分方程
" z+ x( Y8 i! q2 o; O$ {
" x6 c& o) q" B% m0 O9 U# G5 z0 T4 a5 C

5 k, ~+ Y$ z) h1 f# qy=dsolve('Dy=n*y*(1-y)','t');
3 u8 i5 z& B: r1 H3 P1 K9 }4 I$ h( G) l% k9 U4 p( b

+ J' r2 @8 D! ay =
) z7 J5 i! t/ M4 g -1/(exp(C1 - n*t) - 1)
( C7 Q& O! W- l* W) l                      0- R. Y% h: q0 {! x
                      1
1 ~- D" z) m6 ?1
# s+ x2 d9 `( ?7 B. u23 `9 [8 o6 m$ C  L
3: Q0 m2 G) f9 m
4/ j2 `5 O' T2 h8 k& _
5! h4 C& O4 u" s( [
6
6 O( t& ?/ C7 p, _0 {' F2 w写规范点就是这个函数
' n+ r" M4 M5 J* X
; I. @# O4 k; S" R2 P6 W2 i# ]

; p, l8 X; h' F* N+ x1 U* d# M7 W函数图像大致为
( K& I2 Y* j" a  s# d, S
, N' l5 j# M( g+ N5 B- W& ]
5 M- u; h# x' N
可以看出t = t m t=t_mt=t
$ K! Z  G/ t1 {) h5 W2 nm
) Y6 d- V2 G/ [) W" E5 f8 I( ]. v​       
  f  I3 r2 e, i7 M: I9 g1 r 时这里图像的斜率有个最大值,其也就是传染的最快的时候,即传染病的高潮时刻,当然t m t_mt
1 j  @: j6 M& W1 ?m% b8 s9 F; N% g( ~( X) [. ^! h8 w
​        & B$ o' G7 o( {8 g: N, |
是可以求出来的
5 P7 R/ a% T/ _3 @' v6 ]5 a  n% C

2 {  n0 @2 o9 ?- Z& D6 P再看原式,当t → ∞ t\rightarrow \infint→∞时i → 1 i\rightarrow 1i→11 f! s2 B; k) v- p2 B
病人的比例为1,当然这也是不可能的,因为我们还没有考虑有没有可能治愈,看模型三2 X+ {/ D8 ]: s0 n# g' F

- }( G) X: V& F* w4 ^  G. j% |0 T
( \4 K! Z9 X/ J; d& e& e  R
模型三
9 X9 t  v+ O% a; q假设:7 l7 }" ^# O3 D
9 s3 ]8 c( B  ]; w3 T
! F- m  ?5 F; }3 E8 v! }
传染病无免疫性如伤风、痢疾等——病人治愈成为健康人,健康人可再次被感染。
; |0 }1 j; P1 H8 R病人每天治愈的比例为μ \muμ (日治愈率),1 μ \frac{1}{\mu} 8 S  l7 r' I& H! d( M2 v; _
μ
6 W% W" V8 u/ \( p) _: s5 L1
3 A  s% J3 S" Z4 L5 f! N​       
" {4 m0 A; c4 e5 b) ^ 为感染期,. O/ `, z7 @, ~& b& {
模型
8 I3 n) r, x- q/ x2 E这是减去了治愈人数之后的新增人数! Y8 ?5 k' q" c( C

# S  i* S: p" H+ ]$ T+ k8 M/ j

- q9 H+ r( q! Q3 X
8 A( q; c* ?# U1 E* R2 y

7 q4 h. u5 B7 N1 pσ \sigmaσ 为一个感染期内每个病人的有效接触人数,称为接触数- I# {: B% \  G( X5 l" W

) t& i+ u0 T1 f0 ~8 }* H+ M

3 l% O6 t) d6 t可以画出上面的图形分析下  i1 S. w  W6 v5 t
* V0 G% [! O" s- V, \! E
# |" S" h* v3 V" Y: I$ A
对上面的公式进行分析,可以得到,当i = 1 − 1 σ i=1-\frac{1}{\sigma}i=1−
# q# S3 ]9 _) X0 b/ aσ
. K+ y  `3 D" u) t$ ]% F( i( X1
/ b( J7 v0 G7 z5 ]$ o* g' w​       
, x, x3 x$ h* `2 a 时,i ii对t的导数为0这也就到了i ii的最大值;当0 < i < 1 − 1 σ 0<i<1-\frac{1}{\sigma}0<i<1−
- O% p7 E7 h$ p1 J' cσ) W& A" d7 o, M" I0 H, {( G
1# m8 i! s; U8 B9 n+ w. w+ V
​       
; K. p7 l, [4 P- P+ h 时,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− 5 v3 c, @- ]8 q+ L! J
σ. y3 e3 ?9 m4 }" l  z
1
7 [. x. ]6 F; o- V$ K​          N5 r* y: W% o- m3 N2 D; _
,d i / d t < 0 di/dt<0di/dt<0,i是单调递减的。0 b0 `8 E7 N8 l
0 k5 A/ p- P9 ]- T
/ j0 b- h) ~$ Y$ g: Q6 X- ^
当然我们也可以画出i ii随t的函数图像
- Q+ y3 {: i9 K/ i7 V7 a$ m/ K
9 `+ L- t; W& V$ b. S8 ?2 ^

+ |) U. t$ m/ I7 t9 k先看红线,若初始条件i 0 > 1 − 1 σ i_0>1-\frac{1}{\sigma}i
, S; y) W' Y6 |' b* B0
  D' y" d" k( P$ s8 f2 J% n​        ! B/ r# x" D2 x% Q, i) b
>1− " ^: N& \" _2 y0 z& h" W. f
σ
2 x; e# _. L1 N/ f1
7 @1 C" {+ i3 S. `; E​        / N# ?6 X" m1 Y: t$ V, v5 Z' x
d i / d t < 0 di/dt<0di/dt<0,i就是单调递减的,* j, M3 i+ x! n* F3 c" ?. m' G3 E6 C
若若初始条件i 0 < 1 − 1 σ i_0<1-\frac{1}{\sigma}i
( U0 c$ x  j( @3 |03 y0 d8 o1 c; M
​       
0 }% H, ?8 g! B# N; V& ^! ` <1−
: r9 H) w( `3 L: y) |σ
# R0 L8 z/ `# V1
# T$ ?7 S4 y* Y​        8 c5 D- Q5 t0 z6 R4 p2 P6 u7 ~
,i就是递增的,可以看到i对t的导数图像有一个最大值,下面的黑线就有一个增加速率最快的一个值,按S形曲线增长
6 h! S! d" X9 I2 j% ]+ L8 z! D! {# ]. f7 j4 ^; v

; g5 b, t3 E! C, q0 i& E2 p; Nσ = < 1 \sigma =<1σ=<1时d i / d t < 0 di/dt<0di/dt<0 i肯定是单调下降的,最终降到07 f! ]1 A7 W7 P+ Y, j

: D* {4 D" D- D# e
* S8 Y/ J3 X# x# f& h
7 j0 o1 O5 D+ I
. {. {. `, y/ D: Q
综上:
. x& W  [; _: N1 P4 J! Q8 _' x想让患病者越来越少,σ \sigmaσ必须小于等于1,即感染期内有效接触使健康者感染的人数不超过原有的病人数.
* Y1 |6 I, X  ]$ s- @" ?
$ C0 u7 c) s' D6 I0 M
# g, ?# ~6 j3 W) ^
这里我们分析的是感染之后还能感染的情况,但有些病毒感染之后会在体内生成抗体,就不会再被感染了,下面我们分析这种情况。+ S/ p4 D; i7 t9 c! ~" f

* K. B/ q0 j+ Z3 y- A; ?& ~

2 j6 z5 {8 Y4 O; W' k( ^模型四 SIR模型5 Y! X! ~5 x1 t) I. b# d, N6 |6 h' G
SIR模型是常见的一种描述传染病传播的数学模型,其基本假设是将人群分为以下三类:
7 P3 y1 S0 q( w6 U8 o# s
. i# b6 i) K# l! H; U# D* L1 b

: `6 b0 A/ ?) j3 m1 易感人群(Susceptible):指未得病者,但缺乏免疫能力,与感病者接触后容易受到感染。7 u& c: Z4 I3 h

' ^4 l3 k, L* y, L

. R- Q9 F( K$ c# H) J( y2 感染人群(Infective):指染上传染病的人,他可以传播给易感人群。4 g" E4 I- ]3 q& W6 B. @0 r  Y

5 k6 V5 g% @, \4 y/ \- c

8 y8 x6 z2 ~5 o, ^" k3 移除人群(Removed):被移出系统的人。因病愈(具有免疫力)或死亡的人。这部分人不再参与感染和被感染过程。
* _/ K% i2 F: ^! ~& `, p1 q( j: b! y6 h) T: G; W8 a) d3 F& ]) V5 K, D/ D
  ~0 `4 o$ l$ S3 ?( F7 ]
假设:( d! d9 C3 b. K& |, }1 V+ o
: @$ K) R1 Y2 Z7 J" r3 M$ w
7 H: I2 D" o& D( G5 }3 v0 Y
传染病有免疫性如天花、麻疹等——病人治愈后移出感染系统,称移出者(Removed).
$ |  \( u) x) _6 H: v总人数N不变,健康人、病人和移出者的比例分别为s ( t ) , i ( t ) , r ( t ) s(t), i(t), r(t)s(t),i(t),r(t).
# G8 o& ]& _5 r& r病人的日接触率为λ \lambdaλ , 日治愈率为μ \muμ, 接触数 σ = λ μ \sigma=\frac{\lambda}{\mu}σ= * i1 Z& M+ Z4 t
μ& q! b2 S0 Q' U" o; }1 L
λ
( h1 u) E! Q. ~9 @​        1 \- W+ `5 P  u5 o7 @( y

: u+ W+ j1 W+ k3 m建模:
2 I; z$ U( v, E- ^2 ^s ( t ) + i ( t ) + r ( t ) = 1 s(t)+ i(t)+ r(t)=1s(t)+i(t)+r(t)=1
: t+ B  L- r+ {7 _) `这个就是病人减去治愈的人,和上一个模型是一样的
( O5 E7 b; @8 U/ s# I: h, ?! j; A% g8 Q
3 j& |  N$ L* H% K2 O7 ?2 h
因为有治愈后是有免疫性的,所以可能被感染的总人数要减少,减去移除者就是0 W. f* D) G4 \! r( @* \- [  P
- U$ P; a( h. Q
/ p# K: C, r9 c7 |% v# ]
将上式化简为:0 x; J2 e( U3 c9 c& C# p( |

% B8 y/ b- M* n
/ o) d0 @# A0 c  Q
i 0 + s 0 ≈ 1 i_0+s_0\approx 1i 9 }4 ^: p7 c5 Y# W9 S
0& N" V' q0 I3 S5 V9 Y6 {5 u
​        8 v8 o5 W: q; g5 g
+s * H9 K4 E4 {5 u( d* f: o( N
0
* G9 d: U; V- P% o( U7 Z5 Q/ N​       
& H* p, ^1 N& i ≈1(通常r ( 0 ) = r 0 r(0)=r_0r(0)=r
0 T% z9 b! \& L  e* \( c0) W2 \. S3 x+ v& D8 X' Y6 s" z
​        ' o8 {+ J! H/ k* ]
很小)# }/ M4 O+ G; j& i, D7 d
4 _7 }5 v) }5 y% _' p

* q& A2 l$ ~7 _( Q关于i(t) , s(t) 的非线性微分方程组,没有解析解,只能通过数值计算得到s(t), i(t), r(t)的曲线,下面来看下曲线的数值解的MATLAB程序7 n# y. B2 U* R& J9 R

! |& z8 R  I; b2 A) c" t2 \

8 S  S" t/ C; R/ P) \这里我们先设λ = 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   Y; F. v, Z/ F+ h
04 k4 f4 H) Q8 `9 J' V6 h5 ]4 k
​       
5 U, [( w9 |/ q, h& k =0.01,s % x2 r0 W1 e% B" t. F
0
- l& H; `) c$ `% D* P5 W" a  J​        # L5 i7 q5 U; t* z9 Z3 y. a
=0.99
/ r! b# t- s7 T# v4 j. @! l也就是平均一个病人人传染一个正常人,治愈率为0.5;开始的病人比例为0.01,正常人为0.99,设没有天生带有病毒抗体的人,所以r 0 = 0 r_0=0r % ^- U+ K' K4 `3 D, T
0
- j- h- P0 M3 f+ }: F: k$ n) t& u​       
( K/ l- F7 c# |0 l2 D! n =0,之后若果病人被治愈,则具有抗体了,有抗体的人为:r = 1 − i − s r=1-i-sr=1−i−s
% B  s& ~) e; [) d) n. c& F) z9 w# Q3 h: P: Z& X

, o" |0 T( V/ l3 rts=0:40;
/ @- C  l9 ^; M, sx0=[0.01, 0.99];
$ g* t- Q. w) V5 m( Q7 H& z[t,x]=ode45('ill',ts,x0);9 T! T& N7 o/ n- I6 G
r=1-x(:,1)-x(:,2);9 `3 u: @8 C4 d: D8 |* Z
plot(t,x(:,1),t,x(:,2),ts,r),grid/ K& `. \7 L$ F! J0 y
legend('i(t)','s(t)','r(t)')
2 B5 k" P" D% o1 R& w" C/ C6 f5 y
; U+ U" \. q& e  W7 V! r4 P  ~
1 n( c  n0 M5 ^6 d) h# m& i
function y=ill( t,x)& k7 x5 i1 y- e' t: m
a=1;& d: V3 I/ i1 {, {$ Q7 ~; `! X
b=0.5;
' F3 L: [; ?4 E$ a" Dy=[a*x(1)*x(2)-b*x(1);-a*x(1)*x(2)];  u; R& ?3 B, W3 z3 Y% ^2 k
1
4 ?6 A% l( F/ r9 b20 y$ B2 K0 N/ Y# |3 g7 t
3
8 j6 h$ X8 i( m2 i8 B) o4
4 P1 e' D% a( R1 ^! b* s- C1 @' ]5: P* d; X' N# Y. ^3 H; c
6
* j- a2 K2 w- z, ^& e& Q( k, s7
  y5 \! U, A7 W1 W% c+ f/ M8
+ z# ?/ E- h& K( s+ r. {5 V92 Z$ M- T" y6 y7 k% x, B$ R
10
, B. ~: j1 l% p11  r' L* F) Q' A3 T4 n8 q3 H

- l! d/ K- ^2 S- P6 K) U

& v5 Q3 f* c3 j5 T% l) d1 H# R4 J, D可以看出:s(t)单调减,r(t)单调增,都趋于稳定, i(t)先增后减趋于0.; P4 W& F& x% L0 A' R! A( n$ V# Y2 k
结果分析
: y5 S- u1 p( Z& q! `0 m! }先回顾一下参数
9 v5 `. M, a: _8 M接 触 率 λ ; 治 愈 率 μ ; 1 / μ   平 均 传 染 期 ( 病 人 治 愈 所 需 平 均 时 间 ) ; σ = λ / μ   接 触 数 ( 感 染 期 内 每 个 病 人 有 效 接 触 人 数 ) 接触率 \lambda;治愈率 \mu ; 1/ \mu~平均传染期 (病人治愈所需平均时间);\sigma =\lambda/\mu~接触数 (感染期内每个病人有效接触人数)接触率λ;治愈率μ;1/μ 平均传染期(病人治愈所需平均时间);σ=λ/μ 接触数(感染期内每个病人有效接触人数)
1 H; d9 ]6 o  O5 o4 X, l! R可以分析出:
5 j- A8 p, W/ }3 D- x: m. \6 _" t, _- ?  B9 z5 L3 h. ]) _, ^% o
! X9 K1 r2 F* F5 Z% o
随着卫生健康思想水平高,接触率λ \lambdaλ变小7 `0 b8 K' w' }+ s
随着医疗水平的提高,治愈率μ \muμ增大
2 I6 y1 G8 j8 ^3 [2 C接触数σ = λ / μ \sigma =\lambda/\muσ=λ/μ减小——有助于控制传播.! ~9 N+ ~, ?0 N$ e( H: P4 m  T
我们可以试试稍微减少一下λ \lambdaλ,增大μ \muμ,来看下效果5 A& Z6 r0 u* ?/ n- W0 }& c, c

7 m! u7 y; r& c. N1 X

$ |' p9 O3 L. U1 jts=0:40;
" Q/ G7 s* G- L' t7 a" ]+ l, ^( M$ ^x0=[0.01, 0.99];+ U' M; m8 }6 s6 U  S
[t,x]=ode45('ill',ts,x0);8 f) l$ _! `5 r6 a8 Y5 X
r=1-x(:,1)-x(:,2);
; i: V; \: R- s1 Eplot(t,x(:,1),t,x(:,2),ts,r),grid
/ w7 D# r( T. m4 W2 ^) j% Flegend('i(t)','s(t)','r(t)')# |  G; T. M2 _( T& \4 }
8 L! A( V4 p" g) l

* f4 ?$ F' ^/ c$ {function y=ill( t,x)6 l6 U( J+ `! x  ^8 `% |- D
a=0.8;) n1 A5 N" O$ X% D! D) {- J8 W
b=0.6;
1 M9 N4 T2 o# \' n5 _y=[a*x(1)*x(2)-b*x(1);-a*x(1)*x(2)];
% w. t1 N$ N2 A/ N! @1
0 A( Y' ?. l2 T. P% @5 _2
5 F1 w$ e% I3 ^" g, G3
% W5 O+ J$ m+ _+ X, t4
& G4 a9 D" P1 ]: q* y! [* m/ g5
/ h' n6 K* R8 |  N2 W. x3 b% t6' E& ~# \" Y5 H# c: z) Y. o" e
7
! G( Y/ a0 w+ m- P8 W2 Y* L. q8 N8
) m5 o% l( \: U6 F0 S* U1 ~9
& B) I: e$ x: C+ G5 f$ v10
5 p- u+ g! K, x- s) I: v) J! H11
2 G' @' Z! I9 n9 v& z
. f# V# [$ ?, W5 b1 K( |8 B1 I

* k( K% t+ S( J5 ^1 n9 M6 s. X1 _2 q" X综上我们可以得出结论:想要减少传染病的传播,我们就要在接触数σ \sigmaσ上下功夫。& {7 C1 g1 O( O( m* n

0 v1 |! H" j$ J  ?, S

* X( y4 u/ o6 X* j实战建模
& i; D$ x+ f! u6 i* L$ q数据处理
+ u" J! T. U" x7 Y; j0 J# x& W) ~
4 j3 N- a! E" \' H: `* V; b
3 ?1 z& R2 v6 z1 j, N
首先,我用python爬虫爬取了丁香医生官方数据,一共5534条数据 特征包括感染、死亡、治愈的总数,当日感染、死亡、治愈新增,疑似病例,时间,省份等14个特征
( T7 ?( P9 w- s+ b4 r, F. t0 Z+ G, v

+ ?5 C& _2 C+ h7 {
6 f% v, y, H' e: a2 I
8 J1 f' n8 ~# n5 {( S0 ?3 f
然后用python进行数据提取,提取了较为典型的湖北省的数据作为我的参考依据) k  [$ X! e( z* u/ t4 b8 f8 R
7 _8 o( k: n  N
8 E- e( ]. _' e* N. l
! c' d' s( T5 R9 _- N: E- e" V7 O
/ s; i5 Z+ Y, b1 C% f+ I
然后用python对数据进行清洗,提取出了患病总数,现存患者总数,死亡总数,治愈总数,时间,省份这几个特征
7 P" W1 s1 V% e5 o6 g
9 y9 s0 b& A  o+ _% x4 p

( \) U0 _1 I+ h0 B. Q8 M, J对日期格式进行修改,值保留月和日,并与死亡人数的位置交换( m# Z1 g: Q, P5 U  f
% Z, p4 S1 I$ }4 u/ S8 Y) R
: V6 c+ x, B: C& i% j
这里我用python对提取的四个特征分别进行了数据分析(主要包括计算最值,平均值等,),并把1.20日作为第一天,7.02日作为最后一天也就是第165天,做了可视化可视化处理。
* v5 |, Y, U8 F/ ]感染人数示意图
- L" ^3 e: S; \! j2 r
( c% L5 f3 ~7 g$ H& M
, b+ X9 i5 |9 r+ N$ K
治愈人数示意图; \: `  h+ \5 l4 H/ \! f
3 l- i7 j4 D9 t! L4 D: M

, q- J1 [. Z& T0 y9 ~2 [* F8 ^5 ?" A, P

+ a2 r4 U" J( d1 E4 ^现存患者数量图
& c) E, P: N$ u% D
7 Q; Y- r9 c/ @2 R/ M# k5 z
7 M6 j1 Q# \. |' j& h
死亡人数示意图3 e4 B! Z& v3 C- u' [% q

# P9 q- h; ~+ E0 Z4 [/ H
/ \' r9 n- C+ e5 A, R# \

1 ^. z* _0 T7 `5 v/ V5 {% ?+ n5 |
' }# E3 y& g- J9 h& X
经过上面的图片与describe数据分析,我们发现有一天是异常的,患者多出了平时的十倍左右,经过查阅资料,这天因加强了检测标准,所以增多了很多。为了避免这个数据的影响我们选择将这一天删去(或者用平均数或中位数代替也可)
/ n" |" a4 Y" x将上面清理过的数据存放到csv文件中# \2 ?) i' s0 b( o, f5 r

- M+ I% M3 [+ j- b

! H: C4 C( _5 o模型建立+ @3 }8 K" ^' [* M
模型假设
+ Q' h. P# @6 P) ?; H经过上面数据的分析,我们大体可以进行如下假设:
1 X/ C  b  a- A& L% B2 y* w1.由于不存在封闭情况,考虑开放体系。
) u8 g! Q+ x5 F, G+ }3 ]7 I: a2.目前数据以天为单位发布,因此不考虑连续变化情况,只考虑离散的方程。4 q: |  C4 B2 B5 y+ g- ^& G7 x2 ?
3.新型冠状病毒的治愈人数和死亡人数相对较 小,因此只考虑 Susceptible(易感)和 Infected(感染) 两类人群。设易感人群总数为N
" Z: s* y( Z5 z, z4.经专家鉴定新冠病毒患者治愈后至少六个月之内不会再被感染,所以设治愈后移出易感人群。
/ u5 x1 C. X# z8 L8 a5.设每个病人每天有效接触人数为 λ \lambdaλ(日接触率),且使接触的健康人致病.
9 R1 {3 P$ l# L  C+ U6.设病人每天治愈的比例为 μ \muμ(日治愈率)
# m$ B% p" ]3 R+ N6 R: n9 r7.时刻t健康人、病人和移出者的数量分别为 s(t), i(t), r(t).
$ _7 H, h* u* N4 G" [
) ~* D! }3 Z' i+ J2 E

' B2 [: p( ]6 e  J/ m4 X2 J+ |1 o1 }模型一8 y6 d9 c4 N' D# G  n

; `, q, g0 j7 d! v4 `
* Z* f6 H- T7 u% H0 D: I& m
分析可以得到移出者r(t)=治愈人数+死亡人数8 ?  [+ p' W: z8 g& }+ O
通过python数据处理,我们算出了r(t)的值,并将其可视化
2 _5 ]9 b- G3 K. K; ?# U
+ S" ?# f& d; P; ]

. m6 {8 g$ t1 p- _& [& ]2 n
( g  b% D1 `& t4 ?& U- P" R
- a& b  l0 K: W; i& e
我用MATLAB对其进行了拟合,拟合图像为7 D  z: ?4 K" o! U9 M2 k

1 I+ z% I/ Q; A. Z; v

% `# c% s$ K$ Q+ X7 f' u3 R/ m4 u9 R3 \* s

3 W* W2 Y5 G2 ]4 i, ]# D. w* N
4 b# @! C9 `7 h$ M

# q" o4 ^+ E2 G9 E  G7 p. u$ j分析可以得到患者 i(t)=患病总数-移出者6 |% `) T2 [- k' T8 f# V
可以通过csv文件的currentConfirmedCount 直接获得i(t)数据,当然也可以通过 i(t)=confirmedCountv - r(t)获得,对此我也做了可视化展示
# a$ ~1 L& _: O& @& n/ W7 N
8 {+ V* S1 {2 W' z2 E3 o
2 T% w& r: Q$ t! D+ r/ f
通过MATLAB程序对其进行拟合,可以得到r(t)的函数图像大致为
) H9 M/ D" l8 x7 ~5 U) i% @8 g# q$ D+ l- V( d  S3 N7 e, I" x
+ q1 [4 ^3 {- C9 t; B# j

& c. o; Z3 D7 t3 D0 ~- u( L* e4 O

% }1 B/ M1 k4 L1 V6 N0 v) c$ h. v6 J1 I. v
, \) v  v& t! A8 K3 t3 B
为了方便,利于公式推导,我们先设时刻t健康人、病人和移出者的数量分别为 s(t), i(t), r(t). 所以有
4 [1 d7 U' r% {
/ u  m2 p! {- @3 {% d  j

8 ?  H* q" ]# N  d* z/ E可以推导出每日新增病例的表达式; D: Z( L! J& v) v  r, t

6 m. l8 E$ d6 y& a! N$ ]# }
+ Q9 _3 v$ u" p
+ w1 G) V# V" `8 P" l
4 j- N/ U- T% F* L5 p

& \6 D' u5 {8 t0 n: _# y  L* c9 M

4 h" j& C* ~( Q6 K. S& s! v6 Y由以上两个公式可以推导出以下两个微分方程
1 \% Y6 h8 C1 k' e* R! d, K
: j' m% c, X& n+ H% _8 b

* D; R  m, Z3 L8 a2 T* q/ G
" K/ B7 c$ f5 d! H0 D

2 {: l6 l& K% G! T可以知道初值
* ~, s( _% A* \5 T; ?( x* Pi ( 0 ) = i 0 . s ( 0 ) = s 0 i(0)=i_0.s(0)=s_0i(0)=i 5 q! ]( A/ C$ C" f) w' i$ L$ b0 R
0" I" s' Y. x/ H% n3 ?1 ^0 u
​        & \. s2 v  f  u( F
.s(0)=s
4 f* ]4 S: H9 S) P0& M& C* \; a% Q9 f6 [5 ~' J
​       
9 p2 H9 A  o7 h8 j
9 L% P; I' @  r4 @7 g9 h因为一开始治愈的和死亡的肯定很少,所以r0可以看为0,于是就有:7 n0 W0 f5 s, O2 W. s1 U
i 0 + s 0 = 1 i_0+s_0=1i . k; l3 J" s* V( j
0
! B$ r) X: e+ v0 p3 c​       
% j5 p5 Q! }( l8 f3 j  m) | +s
) T, M, u% i& ^  Y0' D3 U7 e+ D. E9 p  @8 p
​       
6 @" F9 ^/ I3 i' F =19 k" r9 C" P  u6 c( n5 O, {
通过解以上微分方程我们可以根据经验假设λ \lambdaλ (日接触率)和 μ \muμ(日治愈率)的值分别为1和0.5(也就是每个患者可能使1个正常人患病,患者可能有0.5的概率被治愈);由于一开始患者肯定比正常人少很多,所以我们设i0=0.01,s0=0.99。对其求解可以得到s(t), i(t), r(t),的变化图像
1 X1 N- O8 Z0 F, `0 B+ \- S1 l+ e  L0 i3 [4 ]# J

- y( K6 q' l7 `! o& V8 A- d0 f0 y, H' p% Y+ h8 ~. B3 {

' n! ]) M$ b. \9 i% FMATLAB程序如下
3 m+ w) E/ ^6 Vts=0:40;
# ~9 \, g  I' }% Y: x0 fx0=[0.01, 0.99];, o; ~* ]0 Y5 C. q8 V8 F& C, Z- m) E
[t,x]=ode45(‘ill’,ts,x0);* `- V* ~  E! z  i0 U9 F
r=1-x(:,1)-x(:,2);
. D! W5 j8 h& z5 B5 w7 J7 U: kplot(t,x(:,1),t,x(:,2),ts,r,ts,x(:,1)/x(:,2))
* @0 L; z& ]- M! x9 \legend(‘i(t)’,‘s(t)’,‘r(t)’)
3 }9 A! X: j0 p
* D  L7 P* R2 S

& p6 t0 \! [+ S7 @function y=ill( t,x)
, K& o4 m0 Q" Y! qa=1;
$ v+ f7 Q, e# K9 [# B8 sb=0.5;8 f5 v; y& U$ ^7 x" L# J
y=[ax(1)x(2)-bx(1);-ax(1)*x(2)];( c" U4 q, g9 L4 J5 q) u

9 h1 Z7 m: C2 q" y- S2 X, A. B9 D
3 \. V/ K/ c0 Z  O2 V  J+ |
结果分析:患病人数肯定有个高潮,但之后高潮就会减弱,并逐步降低为0。随着医疗卫生条件的不断提升,患者的 λ \lambdaλ(日接触率)肯定降低,μ \muμ (日治愈率)肯定上升,所以我们可以把λ \lambdaλ调一点为0.8,μ \muμ调高一点为0.6,可以得到以下趋势图。所以应对传染病很关键的一点是我们要提高医疗卫生条件6 J  g3 ~- F, j
( W5 y5 I0 m7 a9 x6 V( b
! F! N/ F9 N, z: d/ X' ]! h6 z' z* p: `
2 {$ {/ _. c2 d  |+ r
模型二% ~! D5 [, b7 l5 I6 P/ r( d, N

3 B4 h8 A8 |9 c' D% \" p
% y0 d' U5 B1 S1 d8 S4 d( `  L  {
实际上,λ \lambdaλ (日接触率)和 μ \muμ(日治愈率)都是随着时间变化的,这里我们设s(t), i(t), r(t) 为第t天健康人、病人、移除者(病愈与死亡之和)的数量, s(t)+ i(t)+r(t)=N..; Z5 _. P, B# S8 h3 O
(t), (t) ~第t天感染率, 移除率(治愈率与死亡率之和)
2 p9 c5 w6 z- n3 @6 b7 C& k) i有 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)" L  |3 a8 K% W3 F6 M5 R& K
因为s远大于i, r,s(t)视为常数,所以有
" I4 q8 |$ i& P! o4 {! e  M/ Q" \
. L7 Z  g' O+ @, Z
& [: i6 b8 x+ t& S
8 P$ r' C# z$ _5 @+ m

: A; `- S. |7 Z: `1 @; Q! c' L取差分近似导数
2 v( O* j7 ?" l$ j; y/ f- S" r
# h1 h- _$ m$ J, Y" b3 N( S$ o- f5 F

; p  |, D  z% ?: \
+ d2 ~) d4 ^' y" ?6 ]8 ~% a  |

/ }6 o* C& z( {我们可以先用真实数据对(t)进行展示并进行拟合
: x9 m+ U9 X1 W) @6 b  M7 m  Q
6 N7 P, `' Z) [4 d; i$ u4 h

& D1 }; T5 o. d' P1 i3 Z# r6 |4 U: ?& f( X0 R: s" P
' G" S5 m$ s# w; m
当然同样的方法对(t)进行拟合( O3 F, x4 p4 B. F  R# e

% a# c8 m) X/ U+ ^) Z
3 ~& B: |4 q" m
做不出来了,好难,光这些东西就弄了四天,到了数学建模国赛得多难多累啊,哎,让我这个小白手足无措。毕竟还没有正规的培训,这个模型等期末考完试一定好好做做!!!
" B" \/ e7 a! e冲国奖
5 p0 R- s0 B- x& ~冲国奖
0 S# O6 `1 P6 @) `4 ~# ?冲国奖' Y' c* g+ l9 i$ T) W; i
————————————————
# b+ P' w2 @$ n0 B% ~# W版权声明:本文为CSDN博主「小白不白嘿嘿嘿」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
9 ], J0 W+ t& p* P# J; C原文链接:https://blog.csdn.net/weixin_45755332/article/details/107094630
8 b: z8 T) u  r: U5 T) `2 X
! o  g4 X8 |+ f( G. }! B, d
$ t$ ^- X5 _, A' f5 m1 U  L




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