第69步 时间序列建模实战:ARIMA建模(R)

基于WIN10的64位系统演示

一、写在前面

这一期,我们使用R进行SARIMA模型的构建。

同样,这里使用这个数据:

《PLoS One》2015年一篇题目为《Comparison of Two Hybrid Models for Forecasting the Incidence of Hemorrhagic Fever with Renal Syndrome in Jiangsu Province, China》文章的公开数据做演示。数据为江苏省2004年1月至2012年12月肾综合症出血热月发病率。运用2004年1月至2011年12月的数据预测2012年12个月的发病率数据。

R语言,这个大家都很熟悉吧。说实话,我不熟悉。

这里用的版本是:R-4.3.1,搭配RStudio食用。

二、R建立SARIMA实战

1导入数据

打开Rstudio,如下图操作,导入数据:

(2)单位根(ADF)检验

library(tseries)
# 假设你的时间序列数据存储在变量data$incidence中
test_result <- adf.test(data$incidence, alternative = "stationary")
# 打印测试结果
print(test_result)

结果显示是平稳的,6666。那就平稳吧:

(3)设置为时间序列格式

# 将时间列转换为日期格式
time_series <- ts(data$incidence, frequency=12, start=c(2004, 1))

4差分

# 进行一次差分
first_difference <- diff(time_series, differences = 1)
plot(first_difference, main="一次差分后的时间序列")
# 进行季节性差分
seasonal_difference <- diff(time_series, lag = 12)
plot(seasonal_difference, main="季节性差分后的时间序列")

如图:

看起来,一次差分也得了。

5自相关图和偏相关图

绘制自相关图 (ACF)
acf(time_series, main="自相关图 (ACF)")
# 绘制偏自相关图 (PACF)
pacf(time_series, main="偏自相关图 (PACF)")

如图,有点丑:

6建模

(6.1)数据拆分

# 划分训练集和验证集
train_series <- window(time_series, start=c(2004,1), end=c(2011,12))
validation_series <- window(time_series, start=c(2012,1), end=c(2012,12))

(6.2)搭建SARIMA

看代码,自行体会:

案例:SARIMA(0,1,1)(0,1,1)12:

sarima_model <- Arima(train_series, order=c(0,1,1), seasonal=list(order=c(0,1,1), period=12))

解读:这里,order=c(0,1,1)定义了非季节部分的阶数,而seasonal=list(order=c(0,1,1), period=12)定义了季节部分的阶数和季节周期(在这种情况下为12)。

(6.3)看模型参数

# 显示模型摘要
summary(sarima_model)

如图:

解读如下:

参数没有统计学差异,这模型不得。大家自己试了,我继续。

6预测

(6.1)拟合数据

# 获取拟合数据
fitted_values <- fitted(sarima_model)
# 保存拟合数据到CSV文件
write.csv(data.frame(time=as.character(time(fitted_values)), fitted_values=fitted_values), file="fitted_values.csv", row.names=FALSE)
# 打印消息
print("拟合数据已保存到fitted_values.csv文件中")

知道存在哪里不,看R的工作路径:

# 获取当前工作目录
current_working_directory <- getwd()
# 打印当前工作目录
print(current_working_directory)

(6.1)预测数据

# 预测未来12个月的数据
future_forecast <- forecast(sarima_model, h=12)
# 将预测结果与时间戳合并为数据框
forecast_data <- data.frame(time = time(future_forecast$mean),forecast_values = as.numeric(future_forecast$mean)
)
# 保存预测结果到CSV文件
write.csv(forecast_data, file="forecast_values.csv", row.names=FALSE)
# 打印消息
print("预测数据已保存到forecast_values.csv文件中")

收工!!

四、数据

链接:https://pan.baidu.com/s/1qOpPi9pfzKR8TVmpOZaZcg?pwd=tc2z

提取码:tc2z

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/106219.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【设计模式】二、UML 类图概述

文章目录 常见含义含义依赖关系&#xff08;Dependence&#xff09;泛化关系&#xff08;Generalization&#xff09;实现关系&#xff08;Implementation&#xff09;关联关系&#xff08;Association&#xff09;聚合关系&#xff08;Aggregation&#xff09;组合关系&#x…

SpringBoot原理-自动配置-原理分析-源码跟踪

自动配置原理 SpringBootApplication 该注解标识在SpringBoot项目的启动类上&#xff0c;是SpringBoot中最为重要的注解&#xff0c;该注解由三个部分组成。 SpringBootConfiguration&#xff1a;该注解与Configuration注解作用一样&#xff0c;用来声明当前类为一个配置类Comp…

redis缓存详解

一、Redisson分布式锁存在问题 1、基于redis实现的分布式锁&#xff0c;如果redis集群出现master宕机&#xff0c;而从节点没有接收到锁对应的key&#xff0c;被选举成新的master就可能存在被其它线程加锁成功则存在加锁问题 2、 基于上面的问题&#xff0c;可以把redis分为多…

便捷查询中通快递,详细物流信息轻松获取

在如今快节奏的生活中&#xff0c;快递已成为人们生活中不可或缺的一部分。然而&#xff0c;快递查询却常常让人头疼&#xff0c;因为需要分别在不同的快递公司官网上进行查询&#xff0c;耗费时间和精力。为了解决这个问题&#xff0c;固乔科技推出了一款便捷的快递查询助手&a…

HTTPS协议和SOCKS5协议的区别

HTTPS协议和SOCKS5协议是两种不同的网络协议&#xff0c;它们在传输数据的方式、安全性和使用场景等方面都有所不同。下面将介绍HTTPS协议与SOCKS5协议的区别。 传输数据的方式 HTTPS协议是一种基于HTTP协议的安全协议&#xff0c;它使用SSL/TLS协议对数据进行加密和解密。在传…

MATLAB入门-数据的导入和导出

MATLAB入门-数据的导入和导出 注&#xff1a;本篇文章是课程学习笔记&#xff0c;课程链接为&#xff1a;头歌 常见的几个导入数据的方法 load函数 load函数专门用于引入MATLAB的.mat格式数据&#xff0c;十分的简单方便。 例如&#xff1a;一个-ASCII编码形式存储的数据文件…

JS看板:bryntum taskboard 5.5.2 Crack

Bryntum 任务板是一个灵活的看板 Web 组件&#xff0c;可帮助您可视化和管理您的工作。 任务板非常灵活&#xff0c;允许您完全自定义卡片、列和泳道的渲染和样式。借助丰富的 API&#xff0c;您甚至可以在运行时打开或关闭功能。 在繁忙的团队中跟踪任务可能会令人畏惧。任务…

pandas入门

Pandas 是在 Numpy 上的封装。 继承了 Numpy 的所有优点&#xff0c;但是这种封装有好有坏 我们对比一下两者创建的形式和效果 import pandas as pd import numpy as np anp.array([[1,2],[3,4]]) bpd.DataFrame({"a":[1,2],"b":[3,4]} ) print(a,"\…

【实践篇】Redis最强Java客户端(三)之Redisson 7种分布式锁使用指南

文章目录 0. 前言1. Redisson 7种分布式锁使用指南1.1 简单锁&#xff1a;1.2 公平锁&#xff1a;1.3 可重入锁&#xff1a;1.4 红锁&#xff1a;1.5 读写锁&#xff1a;1.6 信号量&#xff1a;1.7 闭锁&#xff1a; 2. Spring boot 集成Redisson 验证分布式锁3. 参考资料4. 源…

STM32 SPI对存储芯片发送写是能命令后一直忙等待

我采用CUBE配置的SPI外设&#xff0c;对NSS引脚选择了硬件输出&#xff0c;这种方式对读取命令没有影响&#xff0c;但是对写命令有&#xff0c;当我发送写是能命令后&#xff0c;读取状态寄存器的值一直都是忙&#xff0c;我猜测这可能是硬件控制NSS引脚后&#xff0c;对于HAL…

Allegro166版本如何在颜色管理器中实时显示层面操作指导

Allegro166版本如何在颜色管理器中实时显示层面操作指导 在用Allegro166进行PCB设计的时候,需要在颜色管理器中频繁的开关层面。但是166不像172一样在颜色管理器中可以实时的开关层面,如下图 需要打开Board Geometry/Soldermask_top层,首先需要勾选这个层面,再点击Apply即…

算法训练营day42|动态规划 part04:0-1背包 (01背包问题基础(两种解决方案)、LeetCode 416.分割等和子集)

文章目录 01背包----二维dp数组01背包----滚动数组416.分割等和子集(求背包能不能装满)思路分析背包解法思考总结 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能用一次&#xff0c;求解将哪些物品装入背…