用dlm包、MLE和贝叶斯推理建立R中的动态线性模型进行参数估计
这是背景。我有一个代表每日销售额的时间序列。我建立了一些模型,比如ARIMA(用dlm包、MLE和贝叶斯推理建立R中的动态线性模型进行参数估计,r,time-series,R,Time Series,这是背景。我有一个代表每日销售额的时间序列。我建立了一些模型,比如ARIMA(ARIMA)、STL分解(STL)、Holt-winter(hw)和指数平滑状态空间模型(由于返回的模型显示出加性误差/趋势/季节性,ets的结果简化为hw模型),等等 无论如何,数据是非平稳的,代表趋势和每周季节性,这也可以通过光谱分析/周期图来证明。通过使用1步到15步预测的交叉验证,我发现stl分解在MAE中给了我最好的结果 然后,我开始研究一个动态线性模型,看看是否可以建立一个更好的预测模型。该模型也是用R编写
ARIMA
)、STL分解(STL
)、Holt-winter(hw
)和指数平滑状态空间模型(由于返回的模型显示出加性误差/趋势/季节性,ets
的结果简化为hw
模型),等等
无论如何,数据是非平稳的,代表趋势和每周季节性,这也可以通过光谱分析/周期图来证明。通过使用1步到15步预测的交叉验证,我发现stl分解在MAE中给了我最好的结果
然后,我开始研究一个动态线性模型,看看是否可以建立一个更好的预测模型。该模型也是用R编写的,带有dlm
,它是局部线性+季节性+ARMA模型,代码如下
build <- function(parm) {
level0 <- 20
slope0 <- 1
# Level + Trend
trend <- dlmModPoly(order = 2, dV = parm[1], dW = exp(parm[2:3]),
m0 = c(level0, slope0),
C0 = 400*diag(2))
# Seasonal Term
# Season Factor model
# season <- dlmModSeas(frequency = 7, dW = c(parm[4], rep(0, 5)))
# Fourier Form Seasonal Model
season <- dlmModTrig(s = 7, q = 2, dW = rep(c(parm[4], parm[5]), each = 2))
# ARMA Term
arma <- dlmModARMA(ar = ARtransPars(parm[6:7]), ma = parm[8:9], sigma2 = parm[10])
return(trend + season + arma)
}
# MLE for parameter estimation
init <- c(1e-07, -3, -1, 5, 4, 0.5, 0.4, 0.7, 0.3, 1)
fit_dlm <- dlmMLE(y, parm = init, build, hessian = TRUE)
dlmSales <- build(fit_dlm$par)
f1 <- dlmForecast(dlmSales, n = 16)
build我也有类似的问题,你能帮助我如何使用r在状态空间中建立ARIMA模型吗?