在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
建立ARMAX模型需要运用R的dse包,在R的dse包中The ARMA model representation is general, so that VAR, VARX,ARIMA, ARMAX, ARIMAX can all be considered to be special cases. 数据集为天然气炉中的天然气(input)与产生的CO2(output),数据来源为王燕应用时间序列分析第三版附录表A1-24,首先队数据做简要的分析,做出时序图以及协方差图 input<-ts(input,frequency = 1,start = c(1,1)) output<-ts(output,frequency = 1,start = c(1,1)) par(mfrow=c(1,2)) plot.ts(input) plot.ts(output)
做两个变量间的协方差函数需要使用ccf函数 ccf(output,input,lag.max = NULL,type = c("correlation"),plot = TRUE)
可以看到两变量存在逻辑上的因果关系,变量延迟的阶数在3~5左右,因此可以通过dse包进行建模,需要使用的函数有ARMA,TSdata,estMaxLik,forecast 首先使用ARMA函数定义一个模型表达式,注意ARMA只能定义一个模型结构,而不能估计其参数,其定义的结构为 A(L)y(t) = B(L)w(t) + C(L)u(t) + TREND(t) where A (axpxp) is the auto-regressive polynomial array. TREND is a matrix the same dimension as y, a p-vector (which gets replicated for each time
需要注意定义模型中参数与变量的区别,以及模型设置的初始值设置 By default, elements in parameter arrays are treated as constants if they are exactly 1.0 or 0.0, and 因此我们可以如下定义模型 MA <- array(c(1,-1.5,0.5),c(3,1,1)) C <- array(c(0,0,0,-0.5,-0.5,-0.5),c(5,1,1)) AR <- array(c(1,-0.5),c(2,1,1)) TR <-array(c(50),c(1,1,1)) ARMAX <- ARMA(A=AR, B=MA, C=C ,TREND<-TR)
定义好模型后,还需要将数据转化为需要的格式,这里要使用TSdata函数,把input与output数据存储在一起 随后就可以使用estMaxLik函数对模型进行求解了,先说另一个求解函数estVARXls,顾名思义,采用的求解方法为ls,该函数的好处是可以自动定阶,如: armaxdata<-TSdata(input=input,output=output) model <- estVARXls(armaxdata)
> model A(L) = B(L) = C(L) = 如果想要用前面设置的ARMA形式来建模的话则需要使用estMaxLik,该函数采用Maximum likelihood estimation,注意每次计算的结果可能与ARMA设置的初始值有关,如果想要得到更好的结果,需要对该函数参数进行讨论。 model <- estMaxLik(armaxdata, ARMAX, algorithm="optim")
> model B(L) = C(L) =
最后还要使用forecast函数对模型进行预测,注意如果input和output一样长,则不会产生新的未来预测值,但是会产生模型拟合值pred,如果想要对未来进行预测,需要讨论conditioning.inputs.forecasts(A time series matrix or list of time series matrices to append to input variables for the forecast periods.) pr <- forecast(model, conditioning.inputs=inputData(armaxdata))
提取出pred项画出预测图 pred<-ts(as.vector(pr$pred),frequency = 1,start = c(1,1)) plot(pred,col="red",type="p") par(new=TRUE) plot(output)
笔者也是ARMAX初学者,若有错误请大家指出
|
请发表评论