r语言 协整_R语言时间序列分析(十五):高级技巧总结

作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R),致力于利用数据科学迅速积累行业经验优势和科学知识发现,涉猎内容包括但不限于信息计量、机器学习、数据可视化、应用统计建模、知识图谱等,著有《R语言数据高效处理指南》(《R语言数据高效处理指南》(黄天元)【摘要 书评 试读】- 京东图书,《R语言数据高效处理指南》(黄天元)【简介_书评_在线阅读】 - 当当图书)。知乎专栏:R语言数据挖掘。邮箱:[email protected].欢迎合作交流。

1、时间序列具有复杂的季节性怎么办?

使用STL(mstl)进行分解,stlf函数进行预测。或者使用傅里叶项,但是这个时候无法随着时间的变化改变周期的波动性,如果需要,可以使用TBATS模型(tbats)。参考链接:11.1 Complex seasonality | Forecasting: Principles and Practice

2、如何使用神经网络模型进行时间序列预测?

3、Bagged ETS在一些场景下能够提高ETS的准确性,baggedETS()提供了直接调用的函数进行拟合。它的本质是针对原序列,生成一系列模拟序列(进行时间序列的分解,然后对残差项进行混洗重排,再还原),然后对模拟序列都进行预测后取平均。详见:11.4 Bootstrapping and bagging | Forecasting: Principles and Practice

4、如何拟合周期性较短的时间序列(周、日、半日)?

stlf是一个解决方案,可以拟合任意周期的时间序列。

也可以使用动态谐波回归模型(dynamic harmonic regression model),其实就是在动态回归模型中加入傅里叶项,其中对K值的筛选有代码:

library(fpp2)

# 以预测gasoline序列为例

bestfit

for(K in seq(25)) {

fit

seasonal=FALSE)

if(fit[["aicc"]] < bestfit[["aicc"]]) {

bestfit

bestK

}

}

fc

xreg=fourier(gasoline, K=bestK, h=104))

autoplot(fc)

5、时间序列不是连续随机变量,而是整形计数的,是否有更好的方法进行预测?

6、预测时间序列的时候,需要限定其在一定的数值范围内,怎么办?

如果要让数值都大于零,可以先对序列进行对数化转换,再做拟合。这在fpp2包中经常通过box-cox转换并让lamda等于0实现。如果要在其它范围内,请参照相关代码(12.3 Ensuring forecasts stay within limits | Forecasting: Principles and Practice)。

7、集成学习往往能够提高模型的预测效果,具体的实现就是用多种模型进行预测,然后取其平均值作为最后的预测结果。当然集成学习还有很多延伸,比如加权法等,但是平均值已经具有很好的效果。详见:12.4 Forecast combinations | Forecasting: Principles and Practice。

8、时间序列不仅仅能够预测未来,还能够反推过去,这在一些场景中是有实际意义的(如考古、还原历史取证)。搬运部分代码,主要是构建反向时间序列和进行反向预测:

# Function to reverse time

reverse_ts

{

ts(rev(y), start=tsp(y)[1L], frequency=frequency(y))

}

# Function to reverse a forecast

reverse_forecast

{

h

f

object[["x"]]

object[["mean"]]

end=tsp(object[["x"]])[1L]-1/f, frequency=f)

object[["lower"]]

object[["upper"]]

return(object)

}

9、时间序列特别短或特别长的时候,在预测中有什么其他技巧?

10、如果碰到缺失值或离群值怎么办?

对于缺失值而言,一般来说需要插补,可以使用na.interp()函数进行估计和插补,它的规则是使用线性插值法,如果有季节性,会先获得季节校正序列,再用线性插值法,再把季节因子加上去(By default, uses linear interpolation for non-seasonal series. For seasonal series, a robust STL decomposition is first computed. Then a linear interpolation is applied to the seasonally adjusted data, and the seasonal component is added back.)。

对于离群值而言,可以使用tsoutliers进行检测,然后根据检测的结果分析原因,再进行处理。一个方便的函数是tsclean(),它可以自动化处理缺失值和离群值,其规则为:Uses supsmu for non-seasonal series and a robust STL decomposition for seasonal series. To estimate missing values and outlier replacements, linear interpolation is used on the (possibly seasonally adjusted) series。

你可能感兴趣的:(r语言,协整)