时间序列分析 时间序列分析是根据系统观测得到的时间序列数据,通过曲线拟合和参数估计来建立数学模型的理论和方法。它一般采用曲线拟合和参数估计方法(如非线性最小二乘法)进行。时间序列分析常用在国民经济宏观控制、区域综合发展规划、企业经营管理、市场潜量预测、气象预报、水文预报、地震前兆预报、农作物病虫灾害预报、环境污染控制、生态平衡、天文学和海洋学等方面。
1.画出时间序列的趋势图,判断趋势是否平稳
2.画自相关图和偏相关图,平稳时间序列的自相关图和偏相关图,判断拖尾和截尾
(1)p阶自回归模型 AR§
AR§模型的偏自相关函数PACF在p阶之后应为零,称其具有截尾性;
AR§模型的自相关函数ACF不能在某一步之后为零(截尾),而是按指数衰减(或成正弦波形式),称其具有拖尾性。
(2)q阶移动平均模型 MA(q)
MA(q)模型的自相关函数ACF在q阶之后应为零,称其具有截尾性;
MA(q)模型的偏自相关函数PACF不能在某一步之后为零(截尾),而是按指数衰减(或成正弦波形式),称其具有拖尾性。
(3)如果样本自相关系数(或偏自相关系数)在最初的d阶明显大于2倍标准差范围,而后几乎95%的样本自相关(偏自相关)系数都落在2倍标准差范围以内,而且由非零自相关(偏自相关)系数衰减为小值波动的过程非常突然,这时,通常视为自相关(偏自相关)系数截尾。
(4)如果有超过5%的样本相关系数落在2倍标准差范围以外,或者是由显著非零的相关函数衰减为小值波动的过程比较缓慢或者非常连续,这时,通常视为相关系数不截尾。
3.检验序列中是否存在单位根
如果存在单位根,就是非平稳时间序列。
(1)用fUnitRoots包中的UnitrootTests()和adfTest()
(2)用tseries包中的adf.test()和pp.test()
(3)DF检测是一种检测稳定性的方法,如果得出的P值小于临界值,则认为是数列是稳定的。adf.test(data$AQI)
Augmented Dickey-Fuller Test
data: data$AQI
Dickey-Fuller = -5.7559, Lag order = 7, p-value = 0.01
alternative hypothesis: stationary
Warning message:
In adf.test(data$AQI) : p-value smaller than printed p-value
4.ACF和PACF概念
其中ACF表示自相关系数,PACF表示偏自相关系数 。,ACF值满足平稳的必要条件|a1|<1,从而说明时间序列数据是平稳的。PACF是判定AR模型阶数的,也就是p。ACF是判断MA阶数的,也就是q,跟上面一样的道理,所以我们确定ARMIA模型为armia(1,d,5)。至于d,是差分的阶数。
5.寻找最优模型
install.packages("tseries")
install.packages("forecast")
install.packages("decompose")
library(tseries)
library(forecast)
data=read.csv("daytime.csv")
str(data)
tsdisplay(data$AQI) #得到acf和pacf
data_d1=diff(data$AQI,1) #进行一阶差分(序列其实已经平稳了)
tsdisplay(data_d1) #进行一阶差分得到acf和pacf
data_d2=diff(data$AQI,12)
tsdisplay(data_d2)
auto.arima(data$AQI,trace=T)
data
dc<-decompose(data$AQI,3)
tbats(data$AQI)
#打印出四种趋势图
plot(dc)
adf.test(data$AQI)