VAR (1) с пакетом DLM Оценка максимального правдоподобия - PullRequest
0 голосов
/ 12 января 2012

Я пытаюсь написать VAR (1) в форме DLM, и я использую этот код:

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 ]

3 голосов
/ 01 ноября 2012

Я наткнулся на твой вопрос и не слишком тщательно разбирал код ... так что прости меня, если я упустил суть ...

но просто глядя на твою конструкцию матрицы дисперсии, этоне могут быть соответствующим образом ограничены.Например, следующее учитывает вашу W-конструкцию, но не работает как матрица cov: matrix (c (1,2,2,2,1,2,2,2,1), 3,3).(Попробуйте вычислить матрицу корреляции!) Более стандартный подход заключается в параметризации ковариационной матрицы посредством разложения Холецкого.Для любых 6 параметров, скажем, a1-a6, пусть

W_ = matrix (c (a1, a2, a3,0, a4, a5,0,0, a6), 3,3) # произвольная нижняя треугольнаяматрица, то ... W = W_% *% t (W _)

возможно, это поможет.

drew

0 голосов
/ 11 июня 2015

Та же проблема здесь: «не является допустимой дисперсионной матрицей».Решение, представленное выше, а именно, запись в произвольном нижнем треугольнике, решило мою проблему.Как пример:

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)
0 голосов
/ 13 января 2012

Я не могу воспроизвести вашу проблему. Вот что я получаю. Best, ft.

> 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...