使用r ets()函数分析CPI数据时出现奇怪的结果

时间:2017-05-02 06:09:04

标签: r time-series forecasting ets

大家。我刚开始学习时间序列。

我有来自中国的以下月度CPI数据(2010.01 - 2015.12)。

我想使用R中的ets()函数对这些数据做一些预测。

vector1 <- c(100.6, 101.2, 99.3, 100.2, 99.9, 99.4, 100.4, 100.6, 100.6, 100.7, 101.1, 100.5, 101.0, 101.2, 99.8, 100.1, 100.1, 100.3, 100.5, 100.3, 100.5, 100.1, 99.8, 100.3, 101.5, 99.9, 100.2, 99.9, 99.7, 99.4, 100.1, 100.6, 100.3, 99.9, 100.1, 100.8, 101.0, 101.1, 99.1, 100.2, 99.4, 100.0, 100.1, 100.5, 100.8, 100.1, 99.9, 100.3, 101.0, 100.5, 99.5, 99.7, 100.1, 99.9, 100.1, 100.2, 100.5, 100.0, 99.8, 100.3, 100.3, 101.2, 99.5, 99.8, 99.8, 100.0, 100.3, 100.5, 100.1, 99.7, 100.0, 100.5)

我尝试按照以下链接中的步骤操作: https://stats.stackexchange.com/questions/146098/ets-function-how-to-avoid-forecast-not-in-line-with-historical-data

代码如下:

train_ts<- ts(vector1, frequency=12)
fit2<-ets(train_ts, model="ZZZ", damped=TRUE, alpha=NULL, beta=NULL, gamma=NULL, 
        phi=NULL, additive.only=FALSE, lambda=TRUE, 
        lower=c(0.000,0.000,0.000,0.8),upper=c(0.9999,0.9999,0.9999,0.98), 
        opt.crit=c("lik","amse","mse","sigma","mae"), nmse=3, 
        bounds=c("both","usual","admissible"), ic=c("aicc","aic","bic"),
        restrict=TRUE)  
ets <- forecast(fit2,h=5,method ='ets') 

plot(forecast(fit2))
lines(fit2$states[,1],col='red')

但是,我得到了下面看起来很奇怪的图表。 我得到alpha = 0,beta = 0和gamma = 0 ...这似乎意味着我没有趋势,没有季节性?

enter image description here

很抱歉,我有很多问题..

  1. 预测是否合适?我认为这里出了问题,但我无法弄清楚问题是什么。

  2. &#34; fit2 $ states [,1]&#34;代表?红线代表什么?

  3. 非常感谢您的帮助......

    然后我尝试使用部分数据向量[1:43]。我得到的是...... enter image description here

1 个答案:

答案 0 :(得分:1)

首先,平滑参数接近零并不意味着您没有水平,趋势或季节性。它们意味着水平,趋势或季节性不会随时间而变化。请参阅https://www.otexts.org/fpp/7

其次,您没有指定正在使用的预测包的版本,甚至您没有指定使用预测包的版本。因此,让我们使用当前版本的软件包尝试您的代码:

library(forecast)
vector1 <- c(100.6, 101.2, 99.3, 100.2, 99.9, 99.4, 100.4, 100.6,
  100.6, 100.7, 101.1, 100.5, 101.0, 101.2, 99.8, 100.1, 100.1, 100.3,
  100.5, 100.3, 100.5, 100.1, 99.8, 100.3, 101.5, 99.9, 100.2, 99.9,
  99.7, 99.4, 100.1, 100.6, 100.3, 99.9, 100.1, 100.8, 101.0, 101.1,
  99.1, 100.2, 99.4, 100.0, 100.1, 100.5, 100.8, 100.1, 99.9, 100.3,
  101.0, 100.5, 99.5, 99.7, 100.1, 99.9, 100.1, 100.2, 100.5, 100.0,
  99.8, 100.3, 100.3, 101.2, 99.5, 99.8, 99.8, 100.0, 100.3, 100.5,
  100.1, 99.7, 100.0, 100.5)
train_ts <- ts(vector1, frequency=12)
fit2 <- ets(train_ts, damped=TRUE)  
ets <- forecast(fit2, h=5) 
plot(forecast(fit2))
lines(fit2$states[,1],col='red')

enter image description here

这对我来说没问题,与你发布的内容不一样。

states矩阵的第一列包含系列的级别。在这种情况下,级别会像您期望的那样遍历数据的中间位置。