使用MARSS包(或者可能是dlm)的多变量时间序列模型

时间:2014-07-04 15:41:29

标签: r

我有两个时间过程。我想看看是否可以使用一个时间过程(X_ {t,2})来更好地预测其他过程(X_ {t,1})。我有多个源提供X_ {t,2}的时间数据(例如,3个时间序列测量X_ {t,2})。所有时间序列都需要季节性组件。

我发现MARSS的符号很适合这种类型的模型,代码看起来像这样:

Z=factor(c("R","S","S","S")) # observation matrix
B=matrix(list(1,0,"beta",1),2,2) #evolution matrix
A="zero" #demeaned
R=matrix(list(0),4,4); diag(R)=c("r","s","s","s")
Q="diagonal and unequal"
U="zero"
period = 12
per.1st = 1 # Now create factors for seasons
c.in = diag(period)
for(i in 2:(ceiling(TT/period))) {c.in = cbind(c.in,diag(period))}
c.in = c.in[,(1:TT)+(per.1st-1)]
rownames(c.in) = month.abb
C = "unconstrained" #2 x 12 matrix
dlmfit = MARSS(data, model=list(Z=Z,B=B,Q=Q,C=C, c=c.in,R=R,A=A,U=U))

我得到了一个β估计值,暗示第二个时间过程对于预测第一个过程很有用,但令我沮丧的是,当我使用MARSSsimulate进行预测时,MARSS给出了一个错误,因为其中一个矩阵(与季节性相关)是时间 - 变化

任何人都知道解决这个MARSS包的问题吗?如果没有,有关使用dlm包装来拟合类似模型的任何提示吗?

1 个答案:

答案 0 :(得分:1)

我能够以足以与dlm包一起使用的形式表示我的状态空间模型。但是我也遇到了一些使用dlm的问题。首先,ML估计非常不稳定。我通过构建基于火星估计的dlm模型绕过了这个问题。但是,dlmFilter无法正常工作。我认为问题在于dlmFilter不是为处理具有一个时间序列的多个源的模型以及其他季节性组件而设计的。 dlmForecast给了我需要的预测!!!

总结我的多变量时间序列模型(有多个源为其中一个时间过程提供数据),MARSS库给了我合理的参数估计值,并允许我获得状态的滤波和平滑值。预测值无法实现。另一方面,dlm为我的模型提供了可疑的估计,并且dlmFilter不起作用,但我能够使用dlmForecast使用我在MARSS中拟合的模型来预测值,并以dlm适当的形式重新表达。