R语言 Theta预测算法产生高得离谱的预测

uqdfh47h  于 2023-01-06  发布在  其他
关注(0)|答案(1)|浏览(279)

我目前正在使用多种算法来预测R中具有间歇历史的时间序列,theta算法是其中之一。我正在使用R中的thetaf函数。已附上以下代码:

a <- c(0,0,0,0,0,0,0,0,0,31,1682.19888717173,1682.19888717173,138.046666666667,286,192.716666666667,0.9,0.206666666666667,0,0,0,0,96,1774.94938783069,1671.25,141.3,196,25,0.0466666666666667,9.02666666666667,3.08666666666667,6,1.06,1,1.34666666666667,1862.04,1922.55311169419,18,267,22,44,761.11,29,13,1129.67333333333,119.586666666667,34,1429,1284.22333333333);
flag <- c(0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
b <- as.data.frame(a)
b$Flag=flag
c <- subset(b,cumsum(b$Flag)==1)
c <- subset(c,cumsum(c$a)>0)
d <- ts(c$a, frequency = 12)
ThetaF <- thetaf(d, h = 24)$mean

该模型对11月和12月的预测非常高。历史上11月和12月的数据点很高(约1.5K),但预测远未达到,11月和12月的预测值超过400 K。如有帮助,将不胜感激。提前感谢!

o8x7eapl

o8x7eapl1#

下面是theta方法如何处理这样的季节性数据。

library(forecast)
n <- length(d)
# Decompose series
decomp <- decompose(d, type = "multiplicative")
# Compute seasonally adjusted data
x <- seasadj(decomp)
# Fit SES model
fcast <- ses(x, h = 24)
alpha <- fcast$model$par["alpha"]
# Fit linear trend model
fit <- lm(x ~ seq_along(x))
beta <- coefficients(fit)[2]
# Add drift term to SES model
theta_fcast <- fcast$mean + beta / 2 * (0:23 + (1 - (1 - alpha)^n) / alpha)
# Re-seasonalize the forecasts
theta_fcast <- theta_fcast * rep(tail(decomp$seasonal, 12), 2)

让我们来看看这个特定的序列会发生什么。首先,看看分解。

# Check decomposition
autoplot(decomp)

请注意季节性分量的值变化非常大(二月/三月高于5,但其他几个月接近零)。

# Check SES model
autoplot(fcast, PI = FALSE)

季节性分量应用于季节性调整数据。由于季节性分量奇怪,季节性调整数据在去年有一个奇怪的跳跃,这夸大了预测。奇怪的跳跃也夸大了拟合趋势线的斜率,使季节性调整的预测更糟。然后你重新季节性调整结果,你会得到这个。

# Plot adjusted forecasts
autoplot(d) + autolayer(theta_fcast, color="blue")

底线是theta方法对极端的季节性模式并不特别稳健。你最好使用不同的模型族。这里有一个使用ETS模型的例子,它对这个数据集非常有效。

# A better model
ets_fcast <- ets(d) |> forecast(h = 24)
autoplot(ets_fcast, PI = FALSE)

创建于2023年1月4日,使用reprex v2.0.2

相关问题