为什么我的(自动)arima-model 不能预测我的时间序列?
机器算法验证
r
时间序列
预测
有马
2022-03-27 11:04:13
2个回答
您的两个示例都涉及确定性时间序列,没有噪音也没有趋势。没有趋势的确定性时间序列实际上并不是 ARIMA 设计的那种数据(请参阅此问题以了解有关 ARIMA 假设的更多信息)。
实际上,要根据您的数据预测未来趋势,您可以做的只是取不同时间滞后的平均值,然后以相同的顺序重复它们。这里的问题是确定要使用的滞后数,即找出重复自身的窗口的长度。这可以通过使用平方误差之和或其他误差度量来简单地实现。如果你定义平均值'th 滞后值为
误差平方和为
然后您可以使用 SSE 选择最佳窗口大小。您可以在下面找到 R 中的示例。
tsPattern <- function(x, kmax = ceiling((length(x)/2))) {
stopifnot(is.numeric(x))
kmax <- min(round(length(x)/2), kmax)
predPattern <- function(x, k) {
n <- length(x)
pattern <- rep(1:k, times = ceiling(n/k), length.out = n)
pred <- rep(tapply(x, pattern, mean), times = ceiling(n/k), length.out = n)
as.numeric(pred)
}
out <- NULL
for (k in 1:kmax) {
xhat <- predPattern(x, k)
out[k] <- sum((x - xhat)^2)
}
list(fitted = predPattern(x, which.min(out)),
sumsq = which.min(out))
}
ts<-c(1,1,1,1,1,0,0,
1,1,1,1,1,0,0,
1,1,1,1,1,0,0,
1,1,1,1,1,0,0,
1,1,1,1,1,0,0,
1,1,1,1,1,0,0,
1,1,1,1,1,0,0,
1,1,1,1,1,0,0,
1,1,1,1,1)
ts2 <-rep(c(1,1,2,3,4,4,5,5,6,5,5,4,3,3,2),10)
ts2 <- ts2 * round(runif(length(ts2), 0.95, 1.0), digits=2)
tsPattern(ts, 10)
tsPattern(ts2, 20)
您可以在下面看到绘制的结果(红点是估计值,线条是实际数据)。
这种原始方法非常适合您的确定性时间序列示例,没有趋势和噪声,但是对于现实生活中的数据,它会失败,即恰好在 ARIMA(和其他类似的时间序列方法)设计的情况下。您可以在下面看到使用此方法和auto.arima现实生活数据(预测库中的WWWusage数据集)的结果。
其它你可能感兴趣的问题



