Simulando o ciclo real de negócios

10

Basicamente, preciso replicar o 'Guia do usuário para resolver modelos de ciclo de negócios reais' de Hartley ( http://www.econ.ucdavis.edu/faculty/kdsalyer/LECTURES/Ecn235a/Linearization/ugfinal.pdf ). Especificamente, quero simular o sistema dinâmico implícito no modelo, especificado da seguinte maneira:

insira a descrição da imagem aqui

onde é consumo, é oferta de trabalho, é capital, é o processo tecnológico autorregressivo, é a produção é o investimento.h kchkzyi

Eu o simulo usando a seguinte lógica: digamos, no tempo , tudo está no estado estacionário e todos os valores são 0, dos quais temos . Então, em , dando choque ao sistema por meio de , resolvo e (como eu tenho o 'chocado' e obtido anteriormente . Depois, os dois para recuperar o restante, a saber - e repito o processo.tkt+1t+1εct+1ht+1zt+1kt+1yt+1,it+1,kt+2

Infelizmente, recebo um processo explosivo que não faz sentido:

insira a descrição da imagem aqui

Eu também incluo o código R que é usado para simular isso:

n<-300

data.simulated <- data.table(t = 0, zval = 0, cval = 0, hval = 0, kval = 0, yval = 0, ival = 0)
data.simulated <- rbind(data.simulated, data.table(t = 1, kval = 0), fill = TRUE)

for (ii in 1:n){

  ##initial shocks
  eps <- rnorm(1, mean = 0, sd = 0.007)
  zt1 <- data.simulated[t == ii - 1, zval]*0.95 + eps
  kt1 <- data.simulated[t == ii, kval]

  ##solve for ct, ht
  lmat <- matrix(c(1, -0.54, 2.78, 1), byrow = T, ncol = 2)
  rmat <- matrix(c(0.02 * kt1 + 0.44 * zt1, kt1 + 2.78 * zt1), ncol = 1)

  solution <- solve(lmat, rmat)
  ct1 <- solution[1, ]
  ht1 <- solution[2, ]

  ##now solve for yt1 and kt2 and it1
  yt1 <- zt1 + 0.36 * kt1 + 0.64 * ht1
  kt2 <- -0.07 * ct1 + 1.01 * kt1 + 0.06 * ht1 + 0.1 * zt1
  it1 <- 3.92 * yt1 - 2.92 * ct1

  ##add to the data.table the results
  data.simulated[t == ii, c("zval", "cval", "hval", "yval", "ival") := list(zt1, ct1, ht1, yt1, it1)]
  data.simulated <- rbind(data.simulated, data.table(t = ii + 1, kval = kt2), fill = TRUE)
}


a <- data.simulated[, list(t, cval, ival, yval)]
a <- data.table:::melt.data.table(a, id.vars = "t")
ggplot(data = a, aes(x = t, y = value, col = variable)) + geom_line()

Sim, minha pergunta é simples - o sistema especificado no documento é inerentemente instável e danifica os resultados, ou cometi um erro em algum lugar?

Sarunas
fonte

Respostas:

6

Explosividade

Q1(c,k,h,z)kh

ct=0.54kt+0.02ht+0.44zt

Simulação

Primeiro, podemos expressar consumo e trabalho como função linear de variáveis ​​de estado (não é necessário resolver o sistema em cada etapa da simulação). As condições de equilíbrio intertemporal e intratemporal podem ser escritas como

[10.022.781][ctht]=[0.540.4412.78][ktzt]

então, depois de multiplicar por um inverso, obtemos

[ctht]=[0.530.470.471.47][ktzt]

Em seguida, a transição para estados pode ser escrita como

[kt+1zt+1]=[0.070.0600][ctht]+[1.010.100.95][ktzt]+[0ϵt+1]

que pode ser reduzido substituindo as variáveis ​​de controle

[kt+1zt+1]=[0.940.1600.95][ktzt]+[0ϵt+1]

Agora a simulação deve ser trivial, aqui está um exemplo do Matlab / Octave:

T = 200;
X = zeros(2,T);
for i=2:T
    X(:,i) = [0.94 0.16; 0 0.95] * X(:,i-1) + [0; 0.007*randn()];
end
Y = [0.53 0.47; -0.47 1.47] * X;
figure
plot(1:T, [X; Y])
legend('k','z','c','h')

Simulação

Obviamente, na prática, você provavelmente deve recalcular toda a solução, incluindo a decomposição do autovalor, para poder alterar parâmetros etc.

ivansml
fonte
(+1). Talvez seja útil representar graficamente a produção e o investimento, que geralmente também estão no foco de interesse (e contribuem para validar o modelo, quando a série de investimentos exibir maior variabilidade que a série de produção).
Alecos Papadopoulos
5

20 de março de 2015 : Enviei um e-mail ao prof. K. Salyer, um dos autores do Guia do Usuário. Em uma comunicação repetida, ele verificou que os dois problemas (veja minha resposta abaixo, bem como a resposta @ivansml) existem:

a) A equação correta para a lei do movimento de consumo é como @ivansml mostra

0.007

0.007


FASE A
Verifiquei por simulação (e usando o desvio padrão correto) que o modelo explode, embora o faça para cima e não para baixo. Deve haver um erro de cálculo no artigo, que de alguma forma não foi "transmitido" às simulações dos autores. No momento, não consigo pensar em mais nada, já que a metodologia é padrão. Estou intrigado e ainda estou trabalhando nisso.


0.007

ϵiN(0,σ2=0.007),SD=0.0837insira a descrição da imagem aqui

Observe os valores no eixo vertical: eles são muito maiores que o intervalo de valores que aparece na Figura 1 no artigo dos autores.

ϵiN(0,σ2=0.00049),SD=0.007insira a descrição da imagem aqui

0.0070.0000490.007

Vou tentar entrar em contato com os autores sobre esses dois assuntos.

Alecos Papadopoulos
fonte
eu consegui descobrir que o processo é de fato explosivo como você apontou. eu cometi um erro sobre a variância, bus, já que sd é 0,083, o que significa uma variação ainda maior do que eu usei inicialmente e o processo explode muito mais rápido. o que não entendo como o autor conseguiu simular (como ele escreve) 3000 observações e fornecer o gráfico de séries estacionárias (no final do artigo) enquanto o processo não exibe essa propriedade.
Sarunas
@Sarunas Verifique seu código da seguinte maneira: calcule manualmente os dois ou três primeiros valores dos vários processos, usando os choques realmente gerados e compare com os valores correspondentes que o código fornece.
Alecos Papadopoulos
eu fiz isso. tentei continuar manualmente. o que seria útil saber de pesquisadores mais experientes é por que o processo de capital seria explosivo? não gostaríamos que fosse estacionário? como o estado estacionário poderia ser alcançado? Eu verifiquei autovalores do sistema e, como você apontou anteriormente - o sistema é de fato explosivo, portanto não há nada errado no próprio código. ou os erros estão no papel ou eu não entendo a lógica.
Sarunas
muito obrigado pelo seu esforço. você me ajudou muito! pelo menos, não fui eu quem cometeu o erro (fundamentalmente) :)
Sarunas
1
1/β(kt,zt)A,B