在R语言中使用航空公司复杂网络对疫情进行建模
原文链接:http://tecdat.cn/?p=12537
在2014年的埃博拉疫情爆发期间,人们对该疾病蔓延至美国的情况非常关注。我们决定使用航空公司的航班数据探讨这个问题。
该疾病起源于利比里亚,因此想探讨该疾病如何通过航空网络传播的问题。
可以在下面看到网络的可视化。每个节点都是一个国家,每个边代表从一个国家到另一个国家的现有航线。避免在同一国家起飞和降落的航班,以避免混乱。
plot(g, main='Airline Routes Connecting Countries', vertex.size=5, edge.arrow.size=.1, edge.arrow.width=.1, vertex.label=ifelse(V(g)$name %in% c('Liberia','United States'),V(g)$name,''), vertex.label.color='black')legend('bottomright',fill=c('darkgreen','darkblue', 'darkred', 'pink', 'purple'), c('Africa', 'Europe', 'Asia/Middle East', 'Kiribati, Marshall Islands, Nauru', 'Americas'), bty='n')
每个节点都是一个国家,每个边代表两个国家之间的现有航线。为了清楚起见,未显示在同一国家/地区开始和结束的航班。
社区
我使用了算法来检测国家/地区的“社区”,即彼此之间有很多航班的国家/地区集,但是与集内的国家/地区之间的航班很少。粗略地讲,该算法倾向于将同一大陆上的国家/地区分组在一起。然而,这并非总是如此。例如,由于与前殖民地的密切关系,法国与几个非洲国家被置于同一社区。粗略地讲,该网络似乎表现得很同质-同一大陆上的国家之间相互联系的趋势往往大于与该大陆以外国家的联系。
分布
地块上的标签尚不清楚,但利比里亚和美国位于两个独立的社区,这可能使我们相信病毒不太可能从前者传播到后者。实际上,国家的程度(与一个给定国家连接的国家数量)差异很大,这也将支持这种直觉。美国与其他186个国家有联系,而利比里亚仅与12个国家有联系。完整的分布如下所示。它大致遵循幂定律,根据维基百科,这是我们应该期望的。请注意,逼近是渐近的,这可能就是为什么此有限样本不可用的原因。根据程度分布,所有国家中有一半与其他27个国家相连。利比里亚远低于中位数,美国远低于中位数。
plot(dplot,type='l',xlab='Degree',ylab='Frequency',main='Degree Distribution of Airline Network',lty=1)lines((1:length(dplot))^(-.7),type='l',lty=2)legend('topright',lty=c(1,2),c('Degree Distribution','Power Law with x^(-.7)'),bty='n')
航空公司联系的度数分布和幂律。如果网络的分布大致遵循幂定律,则我们说它是“无标度”网络。
小世界
让我们放大并查看利比里亚的二级关系:
利比里亚的航空公司联系。塞拉利昂和科特迪瓦与美国没有直接联系,因此未显示它们的联系。
尽管他们位于两个不同的社区,但利比里亚和美国之间只有两个度的距离。所有国家通常都是这种情况。如果对于每个节点,我们计算出它与每个其他节点之间的最短路径,则平均最短距离将约为2(。这被称为小世界现象。平均而言,每个国家/地区与每个其他国家/地区相距2。许多网络表现出这种现象的主要原因是“集线器”-与其他国家/地区有很多连接的国家(或更普遍的说是节点)。例如,可以想象法国的戴高乐机场是连接美国,东欧,亚洲和非洲国家的枢纽。这些枢纽的存在使得通过很少的转移就可以从一个国家到达另一个国家。
传染性
上面的特写网络显示,如果将病毒传播到美国,可能会通过尼日利亚,加纳,摩洛哥和比利时传播。如果我们知道从利比里亚到这些国家以及从每个国家到美国的航班的比例,我们可以估计埃博拉病毒在每条航线上扩散的可能性。
当然,由于许多原因,这是一个极大的简化。例如,即使塞拉利昂(Sierra Leon)与美国没有直接联系,它也可以与与美国有联系的其他国家/地区联系。这条航线可能有很大一部分航班降落在美国。
还有一些流行病学参数可以改变疾病传播的速度。例如,从感染到可检测到的症状的时间很重要。如果被感染者直到感染一周后才出现症状,那么就不能轻易地对其进行筛选和控制。在出现症状之前,他们可以感染许多其他人。
疾病的最后期限也很重要。如果患者在被感染的几个小时内死亡,那么这种疾病就不会传播到很远。极端地说,考虑患者在感染后一秒钟内死亡。然后,他几乎没有时间感染他人。
最后,我们假设一个起源。如果该疾病已经在多个国家/地区存在,则我们需要调整分析。
- Jquery 遍历数组之$().each方法与$.each()方法介绍
- ExtJs学习笔记(2)_Basic GridPanel[基本网格]
- Jquery 遍历数组之grep()方法介绍
- ExtJs学习笔记(1)_Hello World!
- Jquery filter()方法简介
- 加拿大滑铁卢大学刘腾博士:平行增强学习及其无人驾驶应用
- 曾六位数被秒的yadea.com 终端真是雅迪!
- 2018年IT行业必须面对的7个改变
- SqlTransaction 数据库编程事务使用示例
- 再谈web.config/app.config敏感数据加/解密的二种方法
- NVIDIA颁布最新禁令,GeForce不能再行深度学习了!
- 2017年终盘点:请留意这七项科学技术的最新进展
- 什么叫做真正的无人驾驶汽车?难道真的没有人么?
- 零基础学习人工智能之Python篇1-Python定义
- 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 数组属性和方法
- 基于maven+ssm的增删改查之spring+springmvc+mybatis环境搭建
- STS 创建 Maven 项目填坑
- latex之在windows环境下能够在latex中使用中文
- 在 Web 中获取 MAC 地址
- 基于maven+ssm的增删改查之ajax校验用户名是否可用
- (四十六)golang--网络编程(简易的聊天系统)
- JeeSite | 保存信息修改记录
- 基于maven+ssm的增删改查之关于ajax验证用户是否存在存在的问题
- 基于maven+ssm的增删改查之JS303校验
- MyBatis-Generator 用法介绍
- BERT源码分析(PART II)
- Wamp 下运行 CGI 笔记
- JeeSite | 保存信息修改记录续
- 植物大战僵尸辅助
- 基于maven+ssm的增删改查之修改员工信息