R语言SIR模型(Susceptible Infected Recovered Model)代码sir模型实例
时间:2022-07-28
本文章向大家介绍R语言SIR模型(Susceptible Infected Recovered Model)代码sir模型实例,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
原文链接:http://tecdat.cn/?p=14593
SIR模型定义
SIR模型是一种传播模型,是信息传播过程的抽象描述。 SIR模型是传染病模型中最经典的模型,其中S表示易感者,I表示感染者,R表示移除者。
S:Susceptible,易感者 I:Infective,感染者 R:Removal,移除者
SIR模型的应用
SIR模型应用于信息传播的研究。
传播过程大致如下:最初,所有的节点都处于易感染状态。然后,部分节点接触到信息后,变成感染状态,这些感染状态的节点试着去感染其他易感染状态的节点,或者进入恢复状态。感染一个节点即传递信息或者对某事的态度。恢复状态,即免疫,处于恢复状态的节点不再参与信息的传播。
SIR的微分方程
a为感染率、b恢复率
注意:
t为某个时刻,例如t=1,S(1)为第一天易感人群的人数。 无论t为什么时刻,总人数是不变的,即N(t)=S(t)+I(t)+R(t)。 人口总数总保持一个常数,即N(t)=K,不考虑人口的出生、死亡、迁移等因素。
这里介绍一个使用R模拟网络扩散的例子。
第一步,生成网络。
规则网
g =graph.tree(size, children =2); plot(g)
g =graph.star(size); plot(g)
g =graph.full(size); plot(g)
g =graph.ring(size); plot(g)
第二步,随机选取一个或n个随机种子。
# initiate the diffusers seeds_num =1 diffusers =sample(V(g),seeds_num) ; diffusers ## + 1/50 vertex: ## [1] 43 infected =list() infected[[1]]=diffusers#
第三步,传染能力
在这个简单的例子中,每个节点的传染能力是0.5,即与其相连的节点以0.5的概率被其感染,每个节点的回复能力是0.5,即其以0.5的概率被其回复。在R中的实现是通过抛硬币的方式来实现的。
## [1] 0
显然,这很容易扩展到更一般的情况,比如节点的平均感染能力是0.128,那么可以这么写: 节点的平均回复能力是0.1,那么可以这么写
p =0.128 coins =c(rep(1, p*1000), rep(0,(1-p)*1000)) sample(coins, 1, replace=TRUE, prob=rep(1/n, n)) ## [1] 0 n =length(coins2) sample(coins2, 1, replace=TRUE, prob=rep(1/n, n)) ## [1] 0
当然最重要的一步是要能按照“时间”更新网络节点被感染的信息。
keep =unlist(lapply(nearest_neighbors[,2], toss)) new_infected =as.numeric(as.character(nearest_neighbors[,1][keep >=1])) diffusers =unique(c(as.numeric(diffusers), new_infected)) return(diffusers)} set.seed(1);
开启扩散过程!
先看看S曲线吧:
为了可视化这个扩散的过程,我们用红色来标记被感染者。
# generate a palette# plot(g, layout =layout.old) set.seed(1)# library(animation)# start the plot m =1
如同在Netlogo里一样,我们可以把网络扩散与增长曲线同时展示出来:
set.seed(1) # start the plot m =1 p_cum=numeric(0) h_cum=numeric(0) i_cum=numeric(0) while( m<50 ) {# start the plot layout(matrix(c(1, 2, 1, 3), 2,2, byrow =TRUE), widths=c(3,1), heights=c(1, 1)) V(g)$color = "white" V(g)$color[V(g)%in%infected[[m ]] ] = "red" V(g)$color[V(g)%in%health[[m ]]] = "green" if(m<=length(infected)) plot(pp~time, type ="h", ylab ="PDF", xlab ="Time",xlim =c(0,i), ylim =c(0,1), frame.plot =FALSE) m =m +1 }
参考文献
9.R语言对巨灾风险下的再保险合同定价研究案例:广义线性模型和帕累托分布Pareto distributions
- 深入浅出 Retrofit,这么牛逼的框架你们还不来看看?
- nwui —— 又一个go语言图形界面解决方案
- Golang 通用连接池
- 解决JS操作Cookies出现的乱码问题,修复WordPress评论乱码
- 分享一个WordPress外链跳转教程,兼容知更鸟暗箱下载和文章索引
- 让WordPress RSS/Feed订阅数据延迟发布,附RSS技巧集锦
- Linux系统防CC攻击自动拉黑IP增强版Shell脚本
- 利用artDialog给网站添加一个能显示搜索来路和关键词的欢迎框
- 解决启用wp super cache缓存后,页面追加多个斜杠仍然可以访问的隐患
- WordPress集成底部滚动推荐条,让好文章不再被埋没
- go语言base64加密解密的方法
- WordPress酷炫CSS3读者墙,排名按年度、本月、本周划分的小方法
- WordPress给文章添加百度是否已收录查询和显示功能(自定义栏目优化版)
- PHP制作百度站内搜索绿色通道的网页列表数据文件
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Pytorch上下采样函数–interpolate用法
- scrapy框架携带cookie访问淘宝购物车功能的实现代码
- 浅析Python __name__ 是什么
- PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
- PHP后期静态绑定实例浅析
- php+mysql开发中的经验与常识小结
- PHP时间戳和日期相互转换操作实例小结
- php json转换相关知识(小结)
- PHP单例模式应用示例【多次连接数据库只实例化一次】
- 踩坑:pytorch中eval模式下结果远差于train模式介绍
- Python读取二进制文件代码方法解析
- Python3 webservice接口测试代码详解
- php往mysql中批量插入数据实例教程
- PHP类与对象后期静态绑定操作实例详解
- PHP后期静态绑定之self::限制实例分析