我同意 MrFlick 的评论,这似乎更像是一个统计问题,而不是编码问题。除此之外,这里有一些可以帮助您入门的提示。
-
让我们看一下原始时间序列数据。
library(forecast)
autoplot(ts) + theme_minimal()
-
意识到forecast::auto.arimas 存在异常值、水平偏移和其他“异常”时的限制,auto.arima 建议使用 SARIMA(0,0,1)(1,0,0) 形式的模型12。
请注意,这与您在 cmets 中提到的 ARIMA(0,0,1) 模型不同!我们可以通过写下 SARIMA(0, 0,1)(1,0,0)12 模型
还有一个 ARIMA(0,0,1) 模型
拟合结果为
fit <- auto.arima(ts)
fit
#Series: ts
#ARIMA(0,0,1)(1,0,0)[12] with non-zero mean
#
#Coefficients:
# ma1 sar1 mean
# 0.3644 0.2302 15.8426
#s.e. 0.1321 0.1298 0.4803
#
#sigma^2 estimated as 5.671: log likelihood=-149.78
#AIC=307.55 AICc=308.21 BIC=316.31
-
我们看看残差以及它们的 ACF 和 PACF
gg1 <- autoplot(fit$residuals) + theme_minimal()
gg2 <- ggAcf(fit$residuals) + theme_minimal()
gg3 <- ggPacf(fit$residuals) + theme_minimal()
library(ggpubr)
ggarrange(gg1, ggarrange(gg2, gg3, ncol = 2), nrow = 2)
结论
残差的分布看起来“正常”:残差本身看起来或多或少是平稳的,并且在前 9 个滞后时间几乎没有(部分)自相关。 ACF 和 PACF 中滞后 10 的峰值可能表明其他过程,需要进一步调查。
总体而言,ARIMA(0,0,1)(1,0,0)12 模型似乎可以很好地拟合数据。
PS。由于您在主要帖子中提到了差异:请注意(过度)差异的影响。
样本数据
ts <- structure(c(15.6518870777097, 15.3322867608582, 17.6151603498542,
16.9445877027104, 14.7031828275352, 16.0412944212825, 16.861729056851,
13.452283131823, 13.2855709987104, 16.0124941065535, 16.5882352941176,
13.8099874808736, 16.9928053525937, 13.3337023302153, 15.4694135718804,
14.9111123979385, 16.1105207226355, 16.5585054080629, 13.5606661379857,
15.1856487275761, 20.4671985306778, 16.863711001642, 14.8349514563107,
16.0655394440664, 18.9172303262434, 18.9811320754717, 20.2998379254457,
15.8995316648271, 13.8971057363262, 18.3333810765132, 19.1311805257776,
16.7306443040217, 14.6418822305992, 20.1152852315643, 14.9894158704731,
13.5667766218388, 16.5179451090781, 12.3646258503401, 11.1907676167162,
16.7851016907621, 15.8961621664931, 18.853901818893, 18.216933524391,
16.4258603642395, 12.0362991336538, 14.6222482941739, 13.5002635740643,
11.3637532794897, 11.6990571483548, 17.3600605143722, 11.5196876016922,
17.7933147413488, 18.2443257676903, 16.983016983017, 22.6372784948589,
20.0215707422296, 12.2457223648902, 13.0610780897725, 13.7779017857143,
14.115336856392, 13.2063002533319, 15.7881424524484, 12.9566768310224,
16.7059081202431, 19.0690998564691, 18.4743742550656), .Dim = c(66L,
1L), .Dimnames = list(NULL, "serie"), .Tsp = c(2013.5, 2018.91666666667,
12), class = "ts")