2

我正在尝试使用一些时间序列数据估计本地级别 dlm 的参数。这是我正在使用的代码,它似乎“工作”,因为它不会引发任何警告/错误:


buildSu<- function(x) {
  Vsd<-(x[1:10])
  Vcorr<-(x[11:55])
  V<-Vsd %o% Vsd
  V[1,2] <- V[2,1] <- V[1,2] * Vcorr[1]
  V[1,3] <- V[3,1] <- V[1,3] * Vcorr[2]
  V[1,4] <- V[4,1] <- V[1,4] * Vcorr[3]
  V[1,5] <- V[5,1] <- V[1,5] * Vcorr[4]
  V[1,6] <- V[6,1] <- V[1,6] * Vcorr[5]
  V[1,7] <- V[7,1] <- V[1,7] * Vcorr[6]
  V[1,8] <- V[8,1] <- V[1,8] * Vcorr[7]
  V[1,9] <- V[9,1] <- V[1,9] * Vcorr[8]
 [...]


  Wsd<-(x[56:65])
  Wcorr<-(x[66:110])
  W<-Wsd %o% Wsd
  W[1,2] <- W[2,1] <- W[1,2] * Wcorr[1]
  W[1,3] <- W[3,1] <- W[1,3] * Wcorr[2]
  W[1,4] <- W[4,1] <- W[1,4] * Wcorr[3]
  W[1,5] <- W[5,1] <- W[1,5] * Wcorr[4]
  W[1,6] <- W[6,1] <- W[1,6] * Wcorr[5]
  W[1,7] <- W[7,1] <- W[1,7] * Wcorr[6]
  W[1,8] <- W[8,1] <- W[1,8] * Wcorr[7]
  W[1,9] <- W[9,1] <- W[1,9] * Wcorr[8]
  W[1,10] <- W[10,1] <- W[1,10] * Wcorr[9]
  W[2,3] <- W[3,2] <- W[2,3] * Wcorr[10]
  [...]

  return(list(
    m0=rep(0,10),
    C0=1000 * diag(10),
    FF= diag(10),
    GG=diag(10),
    V=V,
    W=W))
} 

suMLE<-dlmMLE(y=x1, parm=rep(0,110), build=buildSu)

我面临的问题是 V 和 W 的结果始终是两个 10x10 的矩阵,其中填充了 0。我不明白为什么,因为数据是按时间序列制作的,彼此之间至少应该有一点相关。我是否遗漏了模型规范中的某些内容(mo、C0、FF、GG)?

任何帮助将非常感激。非常感谢,弗朗切斯科

4

0 回答 0