Оценка модели в пространстве состояний с запаздыванием в уравнении измерения в R - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь оценить модель SS из этой статьи , которая имеет следующую форму:

\pi_t=\alpha(L)\pi_{t-1}-\beta(L)(u_t-u_t^*)+\gamma(L)z_t+\epsilon_t\u_t^*=u_{t-1}^*+\eta_t

Установка порядок первого полинома запаздывания к нулю, а второго - к единице, мы можем переформулировать его, используя термины из руководства по пакету MARSS, если это применимо (x - состояние, y - наблюдаемая переменная, d - экзогенная):

y_t=Zx_{t}+Dd_t+Ay_{t-1}+Cx_{t-1}+v_t\x_t=Bx_{t-1}+w_t

Пакет MARSS позволяет оценивать более простую модель, которая не включает запаздывающие переменные в уравнение измерения. Есть ли способ оценить это с помощью MARSS или любого другого пакета, не переписывая процедуру оценки для этого особого случая? Может быть, есть способ переформулировать его так, чтобы его можно было «скармливать» MARSS или другому пакету?

1 Ответ

1 голос
/ 14 июля 2020

Посмотрите, как, скажем, модель структурных временных рядов BSM или модель ARMA формулируется как модель MARSS, также известная как многомерная модель в пространстве состояний. Это даст вам представление о том, как преобразовать вашу модель в многомерную форму пространства состояний.

По сути, ваш x будет выглядеть как

\ begin {bmatrix} x_1 \\ x_2 \ end {bmatrix} _ {t} = \ begin {bmatrix} b & 0 \\ 1 & 0 \ end {bmatrix} \ begin {bmatrix} x_1 \\ x_2 \ end {bmatrix} _ {t -1} + \ begin {bmatrix} w_1 \\ w_2 \ end {bmatrix} _ {t}, \ text {where} \ begin {bmatrix} w_1 \\ w_2 \ end {bmatrix} _ {t} \ sim MVN \ left (0, \ begin {bmatrix} q & 0 \\ 0 & 0 \ end {bmatrix} \ right)

Видите, как x_2 - это просто пустышка, которая вынуждена быть x (t-1)?

Теперь уравнение y

y_ {t} = \ begin {bmatrix} z ​​& c \ end {bmatrix} \ begin {bmatrix} x_1 \\ x_2 \ end {bmatrix} _ {t} + \ begin {bmatrix} d & a \ end {bmatrix} \ begin {bmatrix } d_t \\ y_ {t-1} \ end {bmatrix} + v_ {t}

d и a - это ваши D и A. Я написал маленьким регистром в spe c, что они скаляры. Но они могут быть матрицами в целом (если, скажем, y многомерно). Ваши входные данные - это d_t и y_ {t-1}. Вы подготавливаете эту матрицу 2x1xT в качестве входных данных.

Будьте осторожны со спецификацией начальных условий. Вероятно, лучше / проще всего установить его на t = 1 и предварительно оценить или использовать диффузный.

Вы можете подогнать эту модель к MARSS. Вы можете использовать любую функцию фильтра Калмана, которая позволит вам передавать входные данные в уравнение y (некоторые делают, некоторые нет). KFAS :: KFS () позволяет использовать функцию SScustom ().

В MARSS список моделей будет выглядеть так

mod.list=list(
B=matrix(list("b",1,0,0),2,2),
U=matrix(0,2,1),
Q=matrix(list("q",0,0,0),2,2),
Z=matrix(c("z", "c"),1,2),
A=matrix(0),
R=matrix("r"),
D=matrix(c("d", "a"),1,2),
x0=matrix(c("x1","x2"),2,1),
tinitx=1,
d=rbind(dt[2:TT],y[1:(TT-1)])
)
dat <- y[2:TT] # since you need y_{t-1} in the d (inputs)
fit <- MARSS(dat, model=mod.list)

Вероятно, он пожалуется, что ему нужны начальные условия для х0. Все будет работать. Алгоритм EM нечувствителен к этому, как алгоритм BFGS или Ньютона. Но method="BFGS" на самом деле часто лучше для этого типа структурной модели ts, и в этом случае выберите разумное начальное условие для x (разумное = близкое к вашим данным в этом случае, я думаю).

...