VAR(1)具有DLM包最大似然估计

时间:2012-01-12 18:39:19

标签: r

我正在尝试以DLM格式编写VAR(1),我正在使用此代码:

y是200x3矩阵

build <- function(u) {dlm(m0=c(y[1,]),
C0=1*diag(3),
FF=diag(3),V=diag(c(1e-3,1e-3,1e-3)), 
GG= matrix(c(u[1:9]), ncol=3), 
W=matrix(c (exp(u[10]),u[11],u[12],u[11], exp(u[13]),u[14],u[12],u[14], exp(u[15]) ),ncol=3))}

init <- rep(0,15)
outMLE <- dlmMLE(y,init, build)

R无法计算dlmMLE并报告:“W不是有效的方差矩阵”。

我很感激任何建议,谢谢。

3 个答案:

答案 0 :(得分:3)

我偶然发现了你的问题,并且没有过于严肃地解析代码......如果我错过了这一点,请原谅我......

但只是看一下你的方差矩阵的构造,它可能没有适当的约束。例如,以下内容尊重您的W构造,但不能作为cov矩阵: 矩阵(C(1,2,2,2,1,2,2,2,1),3,3)。 (尝试计算相关矩阵!)更标准的方法是通过Cholesky分解来参数化协方差矩阵。对于任何6个参数,比如说a1-a6,让

W_ =矩阵(c(a1,a2,a3,0,a4,a5,0,0,a6),3,3)#任意下三角矩阵,然后...... W = W_%*%t(W _)

也许这有帮助。

提请

答案 1 :(得分:0)

我无法重现你的问题。这是我得到的。最好,英尺

> library(dlm)
> set.seed(12345)
> p <- 3
> y <- matrix(rnorm(600),ncol=3)
> build <- function(u) {dlm(m0=c(y[1,]),
+ C0=1*diag(3),
+ FF=diag(3),V=diag(c(1e-3,1e-3,1e-3)),
+ GG= matrix(c(u[1:9]), ncol=3),
+ W=matrix(c (exp(u[10]),u[11],u[12],u[11], exp(u[13]),u[14],u[12],u[14], exp(u[15]) ),ncol=3))}
> init <- rep(0,15)
> outMLE <- dlmMLE(y,init, build)
> outMLE
$par
 [1]  0.009390099  0.012975013  0.016513477 -0.086087006 -0.034091979
 [6]  0.005505462  0.022439820 -0.042064248  0.111033064  0.134691617
[11]  0.048333708  0.055505701 -0.086836031  0.069454628 -0.035391634

$value
[1] 300.5475

$counts
function gradient 
      10       10 

$convergence
[1] 0

$message
[1] "CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH"

答案 2 :(得分:0)

这里的问题是:“不是有效的方差矩阵”。上面提供的解决方案,即写作任意下三角形解决了我的问题。例如:

M = matrix(c(exp(x[(m+1)]),x[(m+4)],x[(m+5)],0,exp(x[(m+2)]),x[(m+6)],0,0,exp(x[(m+3)])),3,3)
W(model) = M %*% t(M)