乐趣区

关于数据挖掘:R语言SIR模型网络结构扩散过程模拟SIR模型Susceptible-Infected-Recovered-附代码数据

全文链接:http://tecdat.cn/?p=14593

最近咱们被客户要求撰写对于 SIR 模型的钻研报告,包含一些图形和统计输入。

与一般的扩散钻研不同,网络扩散开始思考网络结构对于扩散过程的影响。这里介绍一个应用 R 模仿网络扩散的例子

根本的算法非常简单:生成一个网络:g(V, E)。随机抉择一个或几个节点作为种子(seeds)。每个感染者以概率 p(可视作该节点的传染能力, 通常示意为 ββ)影响与其相连的节点。其实这是一个最简略的 SI 模型在网络中的实现。S 示意可感化(susceptible), I 示意被感化(infected)。易感态 - 感化态 - 复原态 (SIR) 模型用以形容水痘和麻疹这类患者能齐全痊愈并取得一生免疫力的流行病。对于 SIR 流行病流传模型,任意时刻节点只能处于易感态 (S) 或感化态 (I) 或复原态(R)。易感态节点示意未被流行病感化的个体,且可能被感化;感化态节点示意曾经被流行病感化且具备流传能力;复原态节点则示意曾感化流行病且齐全痊愈。与 SIS 模型相似,每一时间步内,每个感化态节点以概率 λλ 尝试感化它的街坊易感态节点,并以概率 γγ 变为复原态。SIR 模型能够表白为:

S = S(t)是易感个体的数量,I = I(t)是被感化的个体的数目,R = R(t)是复原的个体的数目。

第二组因变量代表在三个类别的总人口的比例。所以,如果 N 是总人口(790 万在咱们的例子),咱们有

S(T)= S(T)/ N,人口的易感局部,Ⅰ(T)= I(t)的 / N 的人口感化分数并 R(T)= R(t)的 / N,人口的痊愈局部。

解这个微分方程,咱们能够失去累计增长曲线的表达式。乏味的是,这是一个 logistic 增长,具备显著的 S 型曲线(S-shaped curve)特色。该模型在初期逾越临界点之后增长较快,前期则变得迟缓。因此能够用来形容和拟合翻新扩散过程(diffusion of innovations)。当然,对疾病流传而言,SI 模型是十分高级的(naive),次要因为受感化的个体以肯定的概率恢复健康,或者持续进入能够被感化状态 (S,据此扩大为 SIS 模型) 或者转为免疫状态(R, 据此扩大为 SIR 模型)。免疫示意为 R,用 γγ 代表免疫概率(removal or recovery rate)。对于信息扩散而言,这种思考临时是不须要的。

第一步,生成网络。

规定网

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)
g =connect.neighborhood(graph.ring(size), 2); plot(g) # 最近邻耦合网络
# 随机网络 g =erdos.renyi.game(size, 0.1)# 小世界网络
g = rewire.edges(erdos.renyi.game(size, 0.1), prob = 0.8 )# 无标度网络
g =barabasi.game(size) ; plot(g)

点击题目查阅往期内容

用航空公司简单网络对疫情进行建模

左右滑动查看更多

01

02

03

04

第二步,随机选取一个或 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 曲线吧:

# # "growth_curve"num_cum =unlist(lapply(1:i, function(x) length(infected[[x]]) ))
p_cum =num_cum time =1:i
## Large initial population size (X=1000)
parms <-c(beta=0.01, gamma=0.1)
x0 <-c(S=49,I=1,R=0)a <-c("beta*S*I","gamma*I")
nu <-matrix(c(-1,0,+1,-1,0,+1),nrow=3,byrow=TRUE)
out <-ssa(x0,a,nu,parms,tf=4,simName="SIR model")

为了可视化这个扩散的过程,咱们用红色来标记被感染者。

# generate a palette# 
plot(g, layout =layout.old)
set.seed(1)#
library(animation)# start the plot
m =1
same=numeric(0)
for(m in 2:length(health)) 
if(length(setdiff(health[[m]],health[[m -1]]) )==0){same=c(same,m)
}
health=health[-same]
infected=infected[-same]#

如同在 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
}

点击文末 “浏览原文”

获取全文残缺代码数据资料。

本文选自《R 语言 SIR 模型(Susceptible Infected Recovered Model)代码 sir 模型实例》。

点击题目查阅往期内容

Matlab 用回归、SEIRD 模型、聚类预测美国总统大选、新冠疫情对中美经济的影响 \
数据分享 |Python 卷积神经网络 CNN 身份辨认图像处理在疫情防控下口罩辨认、人脸识别 \
Python 用 RNN 神经网络:LSTM、GRU、回归和 ARIMA 对 COVID19 新冠疫情人数工夫序列预测 \
【视频】Python 用 LSTM 长短期记忆神经网络对不稳固降雨量工夫序列进行预测剖析 | 数据分享 \
深度学习实现自编码器 Autoencoder 神经网络异样检测心电图 ECG 工夫序列 spss modeler 用决策树神经网络预测 ST 的股票 \
Python 中 TensorFlow 的长短期记忆神经网络 (LSTM)、指数挪动平均法预测股票市场和可视化 \
RNN 循环神经网络、LSTM 长短期记忆网络实现工夫序列长期利率预测 \
联合新冠疫情 COVID-19 股票价格预测:ARIMA,KNN 和神经网络工夫序列剖析 \
深度学习:Keras 应用神经网络进行简略文本分类剖析新闻组数据 \
用 PyTorch 机器学习神经网络分类预测银行客户散失模型 \
PYTHON 用 LSTM 长短期记忆神经网络的参数优化办法预测工夫序列洗发水销售数据 \
Python 用 Keras 神经网络序列模型回归拟合预测、准确度检查和后果可视化 \
R 语言深度学习卷积神经网络 (CNN)对 CIFAR 图像进行分类:训练与后果评估可视化 \
深度学习:Keras 应用神经网络进行简略文本分类剖析新闻组数据 \
Python 用 LSTM 长短期记忆神经网络对不稳固降雨量工夫序列进行预测剖析 \
R 语言深度学习 Keras 循环神经网络 (RNN) 模型预测多输入变量工夫序列 \
R 语言 KERAS 用 RNN、双向 RNNS 递归神经网络、LSTM 剖析预测温度工夫序列、IMDB 电影评分情感 \
Python 用 Keras 神经网络序列模型回归拟合预测、准确度检查和后果可视化 \
Python 用 LSTM 长短期记忆神经网络对不稳固降雨量工夫序列进行预测剖析 \
R 语言中的神经网络预测工夫序列:多层感知器(MLP)和极限学习机(ELM)数据分析报告 \
R 语言深度学习:用 keras 神经网络回归模型预测工夫序列数据 \
Matlab 用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类 \
R 语言 KERAS 深度学习 CNN 卷积神经网络分类辨认手写数字图像数据(MNIST)\
MATLAB 中用 BP 神经网络预测人体脂肪百分比数据 \
Python 中用 PyTorch 机器学习神经网络分类预测银行客户散失模型 \
R 语言实现 CNN(卷积神经网络)模型进行回归数据分析 \
SAS 应用鸢尾花 (iris) 数据集训练人工神经网络 (ANN) 模型 \
【视频】R 语言实现 CNN(卷积神经网络)模型进行回归数据分析 \
Python 应用神经网络进行简略文本分类 \
R 语言用神经网络改良 Nelson-Siegel 模型拟合收益率曲线剖析 \
R 语言基于递归神经网络 RNN 的温度工夫序列预测 \
R 语言神经网络模型预测车辆数量工夫序列 \
R 语言中的 BP 神经网络模型剖析学生问题 \
matlab 应用长短期记忆(LSTM)神经网络对序列数据进行分类 \
R 语言实现拟合神经网络预测和后果可视化 \
用 R 语言实现神经网络预测股票实例 \
应用 PYTHON 中 KERAS 的 LSTM 递归神经网络进行工夫序列预测 \
python 用于 NLP 的 seq2seq 模型实例: 用 Keras 实现神经网络机器翻译 \
用于 NLP 的 Python:应用 Keras 的多标签文本 LSTM 神经网络分类

退出移动版