建立河南省COVID-19时间序列模型
本站所有文章均为原创,欢迎转载,请注明文章出处:https://blog.csdn.net/m0_60750293/article/details/128111290?spm=1001.2014.3001.5501
数据来自第一篇Python 数据爬取
选取2020-01月到2022-11-20的当日新增确诊数据为训练集,2022-11-21到2022-11-28的当日新增确诊数据为测试集,用于验证模型预测效果。主要预测步骤如下:
- 检验训练集是否为白噪声序列,如果是白噪声序列,则没有研究意义。模型所需的序列必须不是白噪声序列
- ADF单位根检验。检验训练序列是否平稳,p值大于0.05,接受原假设,序列非平稳。不平稳需要进行差分。
- 差分。将训练集转化为平稳序列。
- 检验差分后的训练集是否为白噪声,不是白噪声才能建模
- 根据自相关图和偏自相关图定模型阶数
- 模型诊断
- 模型评估。预测2022-11-21到2022-11-28数据,与真实值比较,看模型效果。
train = alltime_henan['当日新增确诊']['2020-01':'2022-11-20'] #训练集数据
# 白噪声检验(如果是白噪声,即纯随机序列,则没有研究的意义了。),p值远小于0.05,不是白噪声序列
from statsmodels.stats.diagnostic import acorr_ljungbox
print(acorr_ljungbox(train, lags=1))
结果图
#ADF单位根检验,检验序列是否平稳,p值大于0.05,接受原假设,序列非平稳
from arch.unitroot import ADF
ADF(train).summary()
结果图
train.head()
结果图
# 差分运算,将非平稳序列转化为平稳序列
diff = train.diff(1).dropna()
diff.head()
结果图
#检验差分后的序列是否平稳,p值小于0.05,是平稳序列
from arch.unitroot import ADF
ADF(diff).summary()
结果图
#差分后的序列白噪声检验,p远小于0.05,不是白噪声,有研究意义
from statsmodels.stats.diagnostic import acorr_ljungbox
print(acorr_ljungbox(diff, lags=1))
结果图
#根据自相关图和偏自相关图,进行模型定阶
from statsmodels.graphics.tsaplots import*
axe1 = plt.subplot(121)
axe2 = plt.subplot(122)
plot1 = plot_acf(train,lags = 30,ax = axe1)
plot2 = plot_pacf(train,lags = 30,ax = axe2)
结果图
#ARIMA模型
from statsmodels.tsa import arima_model
model = arima_model.ARIMA(train,order = (4,1,3)).fit() #AIC,BIC最小
model.summary()
结果图
自相关图在第3个点之后出现拖尾现象,偏自相关图在第2个点之后出现截尾现象,之后的点都在0附近摆动,所以AR的阶数可以设置为3,4,5,MA的阶数可以设置为2,3,4,通过结果给出的AIC和BIC值判断,AIC和BIC越小越好,通过反复调试,确定模型为ARIMA(4,1,3)。
# 模型诊断,看模型的系数。confit()函数计算模型中系数的置信区间。
#在5%的置信水平下,系数绝大部分都不包含0,说明通过了显著性检验。
model.conf_int()
结果图
#模型评估,预测2022-11-21到2022-11-28当日新增确诊人数
forecast = model.forecast(8)[0] #预测值
forecast
结果图
real = alltime_henan['当日新增确诊']['2022-11-21':'2022-11-28'] #真实值
real
结果图
- 模型预测的效果不是理想,主要有两点原因:
(1)模型的阶数是通过自相关图和偏自相关图定的,可能没有达到最优模型,存在人为主观性。
(2)有很多不确定性因素影响疫情的发展,导致模型预测效果不太好。 - 模型改进。可以建立SIR模型,SIR模型将人群分为三类,分别是:易感者(Susceptible)、感染者(Infectious)和恢复者(Recovered),这是最经典的传染病模型之一,主要用来预测疫情发生后不同时刻的未感染人数、感染人数和康复人数。
码字不易,切记白嫖,记得点赞加关注再走!!!