使用 r ets() 函数分析 CPI 数据时出现奇怪的结果
strange result when using r ets() function for analyzing CPI data
各位。我刚开始学习时间序列。
我有以下来自中国的每月 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)
我尝试按照以下 link 中的程序进行操作:
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...这似乎意味着我没有趋势也没有季节性?
对不起,我有很多问题..
预测看起来正确吗?我认为这里有问题,但我无法弄清楚问题是什么。
"fit2$states[,1]"代表什么?红线代表什么?
非常感谢您的帮助..
然后我尝试使用部分数据向量[1:43]。我得到的是...
首先,接近于零的平滑参数并不意味着您没有水平、趋势或季节性。它们意味着水平、趋势或季节性不会随时间改变。参见 https://www.otexts.org/fpp/7。
其次,您没有指定您正在使用的 forecast 包的版本,甚至没有指定您正在使用 forecast包裹。因此,让我们使用当前版本的包尝试您的代码:
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')
我觉得还可以,但与您发布的不一样。
states
矩阵的第一列包含序列的水平。在这种情况下,级别如您所料穿过数据的中间。
各位。我刚开始学习时间序列。
我有以下来自中国的每月 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)
我尝试按照以下 link 中的程序进行操作: 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...这似乎意味着我没有趋势也没有季节性?
对不起,我有很多问题..
预测看起来正确吗?我认为这里有问题,但我无法弄清楚问题是什么。
"fit2$states[,1]"代表什么?红线代表什么?
非常感谢您的帮助..
然后我尝试使用部分数据向量[1:43]。我得到的是...
首先,接近于零的平滑参数并不意味着您没有水平、趋势或季节性。它们意味着水平、趋势或季节性不会随时间改变。参见 https://www.otexts.org/fpp/7。
其次,您没有指定您正在使用的 forecast 包的版本,甚至没有指定您正在使用 forecast包裹。因此,让我们使用当前版本的包尝试您的代码:
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')
我觉得还可以,但与您发布的不一样。
states
矩阵的第一列包含序列的水平。在这种情况下,级别如您所料穿过数据的中间。