Указание матрицы измерения и ковариации состояния в DLM

Я не уверен, если этот вопрос Stackru или CrossValidated - он может пойти в любом случае.

У меня есть многочлен 1-го порядка, который я отлил в форму пространства состояний. Число переменных наблюдения (y) равно m (=1), а число переменных состояния равно p (=1). Я использую пакет для dlm оценить модель и функции dlmMLE а также dlmModPoly,

Мой вопрос: я могу успешно оценить модель, если указано ниже:

noCols = ncol(yf)                        # Equal to m
p = 1                                    # Equal to p (number of state variables)
j = sum(upper.tri((diag(noCols)),TRUE))

initials = c(rep(0,j))
  fit = dlmMLE(yf, parm = initials, build = buildConstantLocalLevel,
               hessian = TRUE, control = list(maxit = 500))

С BuildConstantLocalLevel указано как:

buildConstantLocalLevel <- function(parm){
  j = j
  noCols  = noCols
  p = p

  L = matrix(0,noCols,noCols)
  L[upper.tri(L, TRUE)] = parm[1:j] #j = # elements in upper triangle
  diag(L) = exp(diag(L))

  Q = matrix(0,p,p)
  Q[upper.tri(Q, TRUE)] = parm[1:j]
  diag(Q) = exp(diag(Q))

  modelTemp = dlm(FF = matrix(1,noCols,1), V = L%*%t(L), GG = 1, 
                  W = Q%*%t(Q), m0 = 0, C0 = 1e7)
  return(modelTemp)

}

Но если я расширяю заданные исходные параметры для оценки, так что матрицы W и V имеют разные параметры для оценки, я получаю ошибку. Изменения, которые я делаю, в первую очередь расширяют набор начальных параметров:

initials = c(rep(0,j*2))

Во-вторых, укажите w-матрицу в пределах BuildConstantLocalLevel функционировать как:

Q = matrix(0,p,p)
      Q[upper.tri(Q, TRUE)] = parm[j+1:j+j]
      diag(Q) = exp(diag(Q))

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

Error in eigen(x$W) : infinite or missing values in 'x' 

Кто-то может объяснить, я получаю ошибку во второй версии и как правильно оценить параметры?

0 ответов

Другие вопросы по тегам