我正在模拟中R中的逐年每小时温度数据。创建的时间序列应该继承过去几年的温度特征。同样,模拟必须居住在每年和每天的季节性中也很重要。但是,该模拟导致“爆炸性”过程,因此每日温度范围随时间增加,而过去的数据则不然。
我已经使自己熟悉 Hyndman&Athanasopoulos(2018)的原理。对于温度模拟本身,我遵循在此mathworks-page上找到的说明:
1。摆脱年度季节性因素
我有一系列的五年每小时温度数据。我对数据拟合了sin / cos曲线,以摆脱年度长期趋势。另外,我还使用tsoutliers()
函数消除了异常值。
我已经减去了这种趋势,现在正尝试将季节性(滞后24)Arima模型拟合到残差。
2。使季节性Arima模型适合残差
我将残差转换为频率为24的时间序列(由于每天的温度季节性变化)。我可以看到残差不是固定的。根据我到目前为止所读的内容,区别应该纠正平稳性。我使用了auto.arima()
函数,该函数正确地使用了季节性滞后。但是,AR1系数大于1(据我所知),这表明即使是滞后残差也不是平稳的。强制arima
使用两个季节滞后,或将auto.arima(..., stepwise=FALSE)
设置为仅略微改善结果。
Series: res_ts
ARIMA(5,0,0)(2,1,0)[24]
Coefficients:
ar1 ar2 ar3 ar4 ar5 sar1 sar2
1.8291 -1.1110 0.3322 -0.1057 0.0385 -0.5267 -0.2620
s.e. 0.0049 0.0101 0.0112 0.0097 0.0046 0.0047 0.0048
sigma^2 estimated as 0.134: log likelihood=-18127.68
AIC=36271.35 AICc=36271.36 BIC=36340.85
3。模拟
在最后一步中,我将使用simulate()
函数来模拟残余温度,并将其添加到我拟合的sin / cos-curve中。但是,随着时间的推移以及其每日范围及其总范围的增加,模拟残差随时间显示出一种“爆炸性”过程(实际残差的范围约为-20至20,而模拟残差的范围为-60至20)。因此,模拟不会产生实际的时间序列。
有人知道我如何改善模拟吗?我知道Box-Cox变换可以使时间序列平稳,但是我不知道如何为模拟反转变换。
参考
Hyndman,R.J.和Athanasopoulos,G.(2018)预测:原理与实践,第二版,OTexts:澳大利亚墨尔本。 OTexts.com/fpp2。在2019年10月16日访问