SI、SIR、SIS、SIRS是四种传染病模型
S表示易感者(Susceptible),指未得病者,但缺乏免疫能力,与感病者接触后容易受到感染
I表示感染者(Infective),指染上传染病的人,它可以传播给S类成员
R表示恢复者(Recovered),因病愈而具有免疫力的人
思想:最初,所有的节点都处于易感染状态,对应个体不知道信息的情况。然后部分节点接触到此信息,变为感染状态。这些节点试着感染处于易感染态的节点,或者进入恢复状态。感染一个节点,即传递信息或者影响节点对某事的态度。恢复状态,即免疫,处于恢复状态的节点不再参与信息的传播。
传染病SIR模型假设在单位时间内染病个体(记作I)以感染概率β和随机选取的所有状态的个体进行接触,其中易感个体(记作S)会转化为染病个体;染病个体并以恢复概率γ恢复并获得免疫能力,免疫后记作R。其感染机制如式1所述:
假设t时刻系统中处于易感状态、感染状态和移除状态的个体比重分别为s(t),i(t)和r(t)。当易感个体和感染个体充分混合时,感染个体的增长率为下图公式一,易感个体的下降率为下图公式二,恢复个体的增长率为下图公式三,则SIR模型的动力学行为可以描述为下式:
R语言实现代码:
#SIR计算重要性 参数A-网络的邻接矩阵 n-节点个数 infectionRate-感染率 recoveryRate-恢复率 #curi-初始感染节点 time-重复计算次数(默认1000) calSIRImportance<-function(A,n,curi,infectionRate,recoveryRate=1,times=1000){ totalnum<-0; #每个节点计算1000次,每次结果不一样,结果取平均值 for(t in 1:times){ Infected<-array(0,dim=c(1,n)); #感染节点集合 Infected[curi]=1; #初始感染节点 当前节点 Recovered<-array(0,dim=c(1,n)); #恢复节点 初始为空 #开始感染,直到Infected感染节点全部恢复 while(max(Infected)!=0){ infectedNode<-which(Infected==1); #当前感染节点的下标 for(i in infectedNode){ #选择不是恢复节点的邻居节点(即易感染者) neiborToInfect<-intersect(which(A[i,]==1),which(Recovered!=1)) for(j in neiborToInfect){ ra=runif(1,min=0,max=1);#产生0-1之间随机概率 if(ra<infectionRate&&Recovered[j]!=1){ Infected[j]<-1; #若该节点被感染则,且不是恢复节点(恢复节点不会再被感染) } } rb=runif(1,min=0,max=1);#产生0-1之间随机概率 if(rb<infectionRate){ Recovered[i]<-1; #节点i恢复 Infected[i]<-0; #从感染节点集合去除i } } #进行下一轮感染,直到Infected为空,即全部恢复不能再被感染 } renum<-sum(Recovered) #本轮被感染节点的个数 totalnum<-totalnum+renum; #所有被感染节点的个数 } return (totalnum/times); #返回节点重要度 } calSIR<-function(A,webName){ #定义数组用于存储SIR值 SIR<-array(0,dim=c(20,n)); OrderSIR<-array(0,dim=c(20,n)); #计算20个不同的感染率 for(IR in 1:20){ #感染率 infectionRate<-IR/100; print (paste("感染率:",infectionRate,"%")); #一次的重要度 #Importance<-vector(mode="numeric",length = n); Importance<-array(0,dim=c(1,n)); #计算每个节点作为传染源 for(curi in 1:n){ #calSIRImportance 当前感染率计算节点重要性,默认每个节点计算1000次取平均值 Importance[curi]<-calSIRImportance(A=A,n=n,curi=curi,infectionRate=infectionRate); } SIR[IR,]<-Importance; print(paste("节点重要度:",Importance)); OrderSIR[IR,]<-order(Importance); } output<-list(SIR=SIR,OrderSIR=OrderSIR); return (output); }
参考文献:
方滨兴, 许进, 李建华. 在线社交网络分析[M]. 电子工业出版社, 2014.
一类SIR传染病模型 百度百科SIR模型。
编辑:孙小北
本文地址: https://www.xiaowangyun.com/wyblog/detail/?id=127
版权归属: www.xiaowangyun.com 转载时请以链接形式注明出处
0 条评论