fit_lm1 <- tslm(Demand~Temperature, data = elecdaily)autoplot(elecdaily[,'Demand'], series="真实值") + autolayer(fitted(fit_lm1), series="线性模型1") + ylab("耗电量 (千兆瓦)") + xlab("时间") + theme(plot.title = element_text(hjust = 0.5))
fit_lm2 <- tslm(Demand~Temperature + WorkDay, data = elecdaily)autoplot(elecdaily[,'Demand'], series="真实值") + autolayer(fitted(fit_lm2), series="线性模型2") + ylab("耗电量 (千兆瓦)") + xlab("时间") + theme(plot.title = element_text(hjust = 0.5))
fit_lm3 <- tslm(Demand~Temperature + I(Temperature^2) + WorkDay, data = elecdaily)autoplot(elecdaily[,'Demand'], series="真实值") + autolayer(fitted(fit_lm3), series="线性模型3") + ylab("耗电量 (千兆瓦)") + xlab("时间") + theme(plot.title = element_text(hjust = 0.5))
ARIMA模型旨在描绘数据的自回归性(autocorrelations)。
自回归 Demandt=a0+a1×Demandt−1+Errort.
时间序列中的趋势通常在我们估计AR模型之前被过滤掉,方法是首先对数据进行一阶差分。
差分 Demandt−Demandt−1=a0+a1×(Demandt−1−Demandt−2)+Errort.
也就是 ΔDemandt=a0+a1×ΔDemandt−1+Errort.
、
平稳的时间序列的性质不随观测时间的变化而变化。
因此具有趋势或季节性的时间序列是平稳时间序列吗?
它们是平稳序列吗?
我们注意到(a)中谷歌股价数并不平稳,但(b)中谷歌股价每天的变化量则是平稳的。这向我们展示了一种让非平稳时间序列变平稳的方法——计算相邻观测值之间的差值,这种方法被称为差分。
差分则可以通过去除时间序列中的一些变化特征来平稳化它的均值,并因此消除(或减小)时间序列的趋势和季节性。
有时差分后的数据仍然不平稳,所以可能需要再一次对数据进行差分来得到一个平稳的序列。
时间序列中的季节通常在我们估计AR模型之前被过滤掉,方法是首先对数据进行季节差分。季节性差分是对一个观测值和相对应的前一年的观测值之间进行差分。因此有: y′t=yt−yt−m, 其中 m= 一年中的季节数量。
cbind("销售量 ($百万)" = a10, "每月销量对数" = log(a10), "每年销量变化对数" = diff(log(a10),12)) %>% autoplot(facets=TRUE) + xlab("年份") + ylab("") + ggtitle("抗糖尿病药剂销量")+ theme(plot.title = element_text(hjust = 0.5))
当我们将差分和自回归模型以及移动平均模型结合起来的时候,我们可以得到一个非季节性 ARIMA 模型。
ARIMA 是 AutoRegressive Integrated Moving Averaging 的简称。
ARIMA模型的表示如下: y′t=c+ϕ1y′t−1+⋯+ϕpy′t−p+θ1εt−1+⋯+θqεt−q+εt,
上式中 y′t是差分序列(它可能经过多次差分)。右侧的“预测变量”包括 yt的延迟值和延迟的误差。我们将这个模型称为 ARIMA(p,d,q) 模型。
p | 自回归模型阶数 |
d | 差分阶数 |
q | 移动平均模型阶数 |
autoplot(wmurders) + xlab("年份") + ylab("谋杀率(每十万)")+ theme(plot.title = element_text(hjust = 0.5))
fit <- auto.arima(wmurders)
这是一个ARIMA(1,2,1)模型: yt″
fit %>% forecast(h=10) %>% autoplot()
季节性的ARIMA模型在我们之前讨论的ARIMA模型多项式中引入了季节性的项。
autoplot(ausbeer) + ylab("产量(兆升)") + xlab("年份")
fit.beer <- auto.arima(ausbeer)fit.beer
## Series: ausbeer ## ARIMA(1,1,2)(0,1,1)[4] ## ## Coefficients:## ar1 ma1 ma2 sma1## 0.0495 -1.0091 0.3746 -0.7434## s.e. 0.1959 0.1826 0.1530 0.0502## ## sigma^2 = 241.3: log likelihood = -886.41## AIC=1782.82 AICc=1783.11 BIC=1799.63
fit.beer %>% forecast() %>% autoplot()
fit.beer %>% residuals() %>% ggtsdisplay()
继续考虑耗电量数据(数据集 elecdaily
)。
使用 auto.arima()
函数建模并对未来14天进行预测,通过模型评价你得到什么样的结论?
Keyboard shortcuts
↑, ←, Pg Up, k | Go to previous slide |
↓, →, Pg Dn, Space, j | Go to next slide |
Home | Go to first slide |
End | Go to last slide |
Number + Return | Go to specific slide |
b / m / f | Toggle blackout / mirrored / fullscreen mode |
c | Clone slideshow |
p | Toggle presenter mode |
t | Restart the presentation timer |
?, h | Toggle this help |
o | Tile View: Overview of Slides |
s | Toggle scribble toolbox |
Esc | Back to slideshow |
fit_lm1 <- tslm(Demand~Temperature, data = elecdaily)autoplot(elecdaily[,'Demand'], series="真实值") + autolayer(fitted(fit_lm1), series="线性模型1") + ylab("耗电量 (千兆瓦)") + xlab("时间") + theme(plot.title = element_text(hjust = 0.5))
fit_lm2 <- tslm(Demand~Temperature + WorkDay, data = elecdaily)autoplot(elecdaily[,'Demand'], series="真实值") + autolayer(fitted(fit_lm2), series="线性模型2") + ylab("耗电量 (千兆瓦)") + xlab("时间") + theme(plot.title = element_text(hjust = 0.5))
fit_lm3 <- tslm(Demand~Temperature + I(Temperature^2) + WorkDay, data = elecdaily)autoplot(elecdaily[,'Demand'], series="真实值") + autolayer(fitted(fit_lm3), series="线性模型3") + ylab("耗电量 (千兆瓦)") + xlab("时间") + theme(plot.title = element_text(hjust = 0.5))
ARIMA模型旨在描绘数据的自回归性(autocorrelations)。
自回归 \mathrm{Demand}_t = a_0 + a_1 \times \mathrm{Demand}_{t-1} + \mathrm{Error}_t.
时间序列中的趋势通常在我们估计AR模型之前被过滤掉,方法是首先对数据进行一阶差分。
差分 \mathrm{Demand}_{t} - \mathrm{Demand}_{t-1} = a_{0} + a_{1} \times \left(\mathrm{Demand}_{t-1} - \mathrm{Demand}_{t-2}\right) + \mathrm{Error}_{t}.
也就是 \Delta \mathrm{Demand}_{t} = a_{0} + a_{1} \times \Delta \mathrm{Demand}_{t-1} + \mathrm{Error}_{t}.
、
平稳的时间序列的性质不随观测时间的变化而变化。
因此具有趋势或季节性的时间序列是平稳时间序列吗?
它们是平稳序列吗?
我们注意到(a)中谷歌股价数并不平稳,但(b)中谷歌股价每天的变化量则是平稳的。这向我们展示了一种让非平稳时间序列变平稳的方法——计算相邻观测值之间的差值,这种方法被称为差分。
差分则可以通过去除时间序列中的一些变化特征来平稳化它的均值,并因此消除(或减小)时间序列的趋势和季节性。
有时差分后的数据仍然不平稳,所以可能需要再一次对数据进行差分来得到一个平稳的序列。
时间序列中的季节通常在我们估计AR模型之前被过滤掉,方法是首先对数据进行季节差分。季节性差分是对一个观测值和相对应的前一年的观测值之间进行差分。因此有: y_t' = y_t - y_{t-m}, 其中 m= 一年中的季节数量。
cbind("销售量 ($百万)" = a10, "每月销量对数" = log(a10), "每年销量变化对数" = diff(log(a10),12)) %>% autoplot(facets=TRUE) + xlab("年份") + ylab("") + ggtitle("抗糖尿病药剂销量")+ theme(plot.title = element_text(hjust = 0.5))
当我们将差分和自回归模型以及移动平均模型结合起来的时候,我们可以得到一个非季节性 ARIMA 模型。
ARIMA 是 AutoRegressive Integrated Moving Averaging 的简称。
ARIMA模型的表示如下: y^{'}_{t} = c + \phi_{1}y^{'}_{t-1} + \cdots + \phi_{p}y^{'}_{t-p} + \theta_{1}\varepsilon_{t-1} + \cdots + \theta_{q}\varepsilon_{t-q} + \varepsilon_{t},
上式中 y^{'}_{t}是差分序列(它可能经过多次差分)。右侧的“预测变量”包括 y_{t}的延迟值和延迟的误差。我们将这个模型称为 ARIMA(p,d,q) 模型。
p | 自回归模型阶数 |
d | 差分阶数 |
q | 移动平均模型阶数 |
autoplot(wmurders) + xlab("年份") + ylab("谋杀率(每十万)")+ theme(plot.title = element_text(hjust = 0.5))
fit <- auto.arima(wmurders)
这是一个ARIMA(1,2,1)模型: y_{t}''=-0.2434 y_{t-1}''-0.8261 \varepsilon_{t-1}+\varepsilon_{t}.
fit %>% forecast(h=10) %>% autoplot()
季节性的ARIMA模型在我们之前讨论的ARIMA模型多项式中引入了季节性的项。
autoplot(ausbeer) + ylab("产量(兆升)") + xlab("年份")
fit.beer <- auto.arima(ausbeer)fit.beer
## Series: ausbeer ## ARIMA(1,1,2)(0,1,1)[4] ## ## Coefficients:## ar1 ma1 ma2 sma1## 0.0495 -1.0091 0.3746 -0.7434## s.e. 0.1959 0.1826 0.1530 0.0502## ## sigma^2 = 241.3: log likelihood = -886.41## AIC=1782.82 AICc=1783.11 BIC=1799.63
fit.beer %>% forecast() %>% autoplot()
fit.beer %>% residuals() %>% ggtsdisplay()
继续考虑耗电量数据(数据集 elecdaily
)。
使用 auto.arima()
函数建模并对未来14天进行预测,通过模型评价你得到什么样的结论?