R语言时间序列ARIMA新手教程
R语言时间序列ARIMA新手教程
首先说一下ARMA回归的底层逻辑,所谓的AR模型和MA模型都是ARMA模型的一种特殊情况,有点类似正方形和长方形都是矩形。ARMA模型的表达式为:
p为自回归部分的滞后阶数,q为移动平均部分滞后阶数,εt为白噪声过程随机误差项。当p=0时,ARMA退化为MA(移动平均)模型;当q=0时,退化为AR(自回归)模型。整个教程将通过模型判定,p和q定阶,系数估计进行分析,得出最终模型并预测未来取值。
接下来开始上手。下载R studio软件(直接百度搜索就可以),请选择64位的版本下载。
安装后打开软件,界面如下:
左上方是R script,也就是写代码的,下方是console,叫做控制台,用于统计结果的展现,右上方是显示各种数据集以及历史操作的地方,下面则主要用于图形结果展示。
开始键入代码,第一步进行你所收集的数据的读取,一般来说是Excel格式比较多,也就是带“.xlsx”后缀的。以本学期统计学第七周的GDP数据为例,从Mole上下载到电脑上,比如我保存的地址是C:/Users/86183/Pictures/QQ浏览器截图(不知道的可以直接右键点击文件属性查看),然后用setwd语句让R软件选定这个路径,用Ctrl+回车执行代码:
setwd('C:/Users/86183/Pictures/QQ浏览器截图')
这样软件就会从这个地址去查找所需数据集。
下一步安装R package,先要用到4个包,用library语句载入:
library(quantmod)
library(PerformanceAnalytics)
library(fBasics)
library(readxl)
接下来读取数据,本次数据的文件名叫“GDPts”,但在用read函数读取的时候需要加上后缀“.xlsx”,读取并将其命名为“GDP”:
GDP<-read_xlsx('GDPts.xlsx')
这里需要讲一下,在R语言中,“<-”这个符号组合代表进行定义,可理解为“=”,它的前面是所命名的目标,后面一般是一个函数代码,上面的read_xlsx就是函数代码。然后可以从界面右上方的全局环境框中查看读取的数据,发现有年份和GDP,这样在分析时电脑会直接认为是两个变量,但实际上我们只需要GDP变量,因此需要定义一个新数据集,比如叫做GDP2:
GDP2<-GDP[,2]
此代码意为选取GDP数据集中的第2列数据并将其命名为GDP2[ ,]语句中逗号前代表行数,后代表列数,若空缺不填代表对行或列没有要求。
然后对GDP2时间序列化,以便之后的函数运算:
GDPTS<-ts(GDP2, start=1, frequency=1)
ts()语句是为时间序列化函数,()内为所需序列化的目标、开始期数以及频率,由于本数据中GDP以每年计数,因此频率为1,若以月为计数则为12
先作图看一下数据的样子,用par() 语句设置点图的参数:
par(mfrow=c(1,1))
然后用plot() 语句画图:
plot(GDP,main="year 1948~2014 GDP time-series")
各参数含义不多解释了,可以自己改动下看看有什么不同,就会明白含义了。做出的图如下:
若要保存图片则点击图片栏的Export,跳出新的对话框后右键save as images即可。从图中看很明显是一个上升的趋势,判断为不平稳序列,进一步做acf(自相关)以及pacf(偏自相关)检验:
acf(GDPTS,lag.max=66)
pacf(GDPTS,lag.max=66)
由于共有67个数据,因此选择了最大滞后为66 。得出的acf和pacf图形如下:
模型判定依据如下:
很明显,acf图中显示是指数衰减趋势(拖尾),并且有大量值大于0.5;而在pacf图中显示为截尾,可进一步可判断为非平稳时间序列,并初步认为是AR模型,可通过具体取值进行观察,以10个数为例:
acf(GDPTS,lag.max=10)$acf
接下去进行单位根检验,加载urca函数:
library(urca)
用ur.df函数对GDPTS进行检验:
ur.df(GDPTS , type = 'none')
输出结果如下:
进行描述性统计分析:
summary(ur.df(GDPTS , type = 'none'))
结果如下:
由于value of statistic的值大于5%,因此原数据本身并不平稳,进行一次差分后diff.lag变得平稳。
接着做Ljung-Box滞后一阶的序列相关性检验:
Box.test(GDP2,lag = 1,type='Ljung-Box')
结果如下:
这里的p值是科学计数法,实际上是1.221*10的-15次方,小于5%,说明序列有相关性,可预测。
最终进行建模,安装“forecast”包并加载(安装需要一点时间请耐心等待):
install.packages("forecast")
library(forecast)
对于新手这里直接使用自动最优建模函数,免去人工判断造成的失误:
Mod1<-auto.arima(GDPTS,trace = TRUE)
summary(Mod1)
结果如下:
程序给出的最优模型为ARIMA(0,1,1)模型,也就是1阶差分的MA模型(这与之前的acf, pacf检验结果有所出入,可通过追溯结果综合考虑)
此时系数为0.5684,模型为:
然后用confint()函数对回归系数置信区间进行显著性检验:
confint(Mod1)
结果如下:
区间不包含0,说明显著
最后用模型进行预测,将预测值命名为fGDP:
fGDP <- forecast(Mod1,h=10,level=c(99))
参数h的值代表预测的期数,置信度取99%,画出图形:
plot(fGDP)
结果如下:
查看具体数值:
fGDP
控制台数据如下:
*结束
作为对照,可用“unemployment”数据自行进行分析,完整代码如下:
setwd('C:/Users/86183/Pictures/QQ浏览器截图')
library(quantmod)
library(PerformanceAnalytics)
library(fBasics)
library(readxl)
GDP<-read_xlsx('GDPts.xlsx')
GDP2<-GDP[,2]
GDPTS<-ts(GDP2, start=1, frequency=1)
par(mfrow=c(1,1))
plot(GDP,main="year 1948~2014 GDP time-series")
acf(GDPTS,lag.max=66)
pacf(GDPTS,lag.max=66)
acf(GDPTS,lag.max=66)$acf
library(urca)
ur.df(GDPTS , type = 'none')
summary(ur.df(GDPTS , type = 'none'))
Box.test(GDP2,lag = 66,type='Ljung-Box')
install.packages("forecast")
library(forecast)
Mod1<-auto.arima(GDPTS,trace=true)
summary(Mod1)
confint(Mod1)
fGDP <- forecast(Mod1,h=10,level=c(99))
plot(fGDP)
fGDP#作为对照, 用unemployment数据进行分析
rm(list=ls()) #清空之前的数据记录的代码
setwd('C:/Users/86183/Pictures/QQ浏览器截图')
library(quantmod)
library(PerformanceAnalytics)
library(fBasics)
library(readxl)
une<-read_xlsx('unemployment.xlsx')
une2<-une[,2]
uneTS<-ts(une2, start = 1, frequency = 1)
par(mfrow=c(1,1))
plot(une,main="year 1971-2014 unemployment time-series")
acf(uneTS, lag.max = 43)
pacf(uneTS, lag.max = 43)
acf(uneTS,lag.max=43)$acf
library(urca)
ur.df(uneTS , type = 'none')
summary(ur.df(uneTS , type = 'none'))
Box.test(une2,lag = 1,type='Ljung-Box')
Mod2<-auto.arima(uneTS)
summary(Mod2)
confint(Mod2)
fune <- forecast(Mod2,h=10,level=c(99.5))
plot(fune, main = "Forecast from ARIMA(2,2,0)")
fune
R语言时间序列ARIMA新手教程相关推荐
- R语言-时间序列-arima模型-forecast、tseries包
最近初步接触了下如何用R语言进行时间序列分析,自己动手写了段小代码. 首先呢是生成随机观测值,接着画出时间序列图,然后进行单根检验和用 ACF 和 PACF 指令分别画出自相关数和偏自相关系数图. 随 ...
- R语言 时间序列arima模型
基本理论知识 ARMA模型称为自回归移动平均模型,是时间序列里常用的模型之一.ARMA模型是对不含季节变动的平稳序列进行建模.它将序列值表示为过去值和过去扰动项的加权和.模型形式如下: yt=c ...
- R语言 时间序列ARIMA模型方法
原理什么的百度一搜一堆,看不明白,先学会用这个工具吧! ARIMA:全称为自回归积分滑动平均模型(Autoregressive Integrated Moving Average Model,简记AR ...
- R语言 - seasonal ARIMA与带傅里叶修正项的ARIMA预测及比较
最近接触到了带傅里叶修正项的ARIMA模型(ARIMA with fourier modification, 以下简称FARIMA),学校里面虽然上过一些时间序列,知道time series deco ...
- R语言时间序列(time series)分析实战:使用ARIMA模型预测时间序列
R语言时间序列(time series)分析实战:使用ARIMA模型预测时间序列 目录
- R语言时间序列平稳性几种单位根检验(ADF,KPSS,PP)及比较分析
原文链接:http://tecdat.cn/?p=21757 时间序列模型根据研究对象是否随机分为确定性模型和随机性模型两大类. 随机时间序列模型即是指仅用它的过去值及随机扰动项所建立起来的模型,建立 ...
- r语言时间序列图_R中的时间序列图
r语言时间序列图 In this tutorial, we'll be going over how to create time series plots in R. Time series dat ...
- R语言时间序列代码整理
R语言时间序列代码整理 时间序列: data<-read.csv('/Users/ji_fanyang/Desktop/test2.csv') myseries<- ts(data[1], ...
- arima 数据预处理_基于R语言的ARIMA模型
A IMA模型是一种著名的时间序列预测方法,主要是指将非平稳时间序列转化为平稳时间序列,然后将因变量仅对它的滞后值以及随机误差项的现值和滞后值进行回归所建立的模型.ARIMA模型根据原序列是否平稳以及 ...
最新文章
- 入门数据分析师,从了解元数据中心开始
- (转)如何从storyBoard中加载其中一个controller
- PCL安装与环境变量配置(Win10)
- idea控制台输出乱码
- Delphi之面向对象的界面复用技术
- FPGA实现A5算法并仿真
- 大型网站技术架构(一)大型网站架构演化
- nfs搭建和可能的问题
- 利用Kubernetes名称空间来管理内存和CPU资源(三)
- 企业《DHCP服务器群集》高级配置
- 有关parent.frame.cols在firefox浏览器上不兼容的问题解决
- jdk5.0下支持JSR-223的方法
- 一键美化python代码
- puppeteer实现百度贴吧自动签到
- 计算机不显示验证码,为什么验证码不显示,验证码显示不出来
- httpwatch使用_使用PHP#2自动化HTTPWatch
- 为什么手机八核心还会卡?
- Linux curl 命令模拟 POST/GET 请求
- 阿里云更换系统盘(公共镜像)
- 设计模式之模板方法模式在kafka DelayedOperation中的应用