Указание матрицы измерения и ковариации состояния в 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'
Кто-то может объяснить, я получаю ошибку во второй версии и как правильно оценить параметры?