Simulazione del ciclo economico reale


10

Fondamentalmente ho bisogno di replicare la "Guida per l'utente alla risoluzione di modelli di cicli di business reali" di Hartley ( http://www.econ.ucdavis.edu/faculty/kdsalyer/LECTURES/Ecn235a/Linearization/ugfinal.pdf ). In particolare, voglio simulare il sistema dinamico implicito nel modello che è specificato come segue:

inserisci qui la descrizione dell'immagine

dove è consumo, è offerta di lavoro, è capitale, è il processo tecnologico autoregressivo, è la produzione e è investimento.chkzyi

Lo simulo usando la seguente logica: diciamo al momento , tutto è in stato stazionario e tutti i valori sono 0, da cui abbiamo . Quindi, a dando uno shock al sistema tramite , per e (dato che ho il "shocked" e ottenuto in precedenza . Quindi, inserisco questi due per recuperare il resto, vale a dire - e ripeto il processo.tkt+1t+1εct+1ht+1zt+1kt+1yt+1,it+1,kt+2

Sfortunatamente, ho un processo esplosivo che non ha senso:

inserisci qui la descrizione dell'immagine

Includo anche il codice R che viene utilizzato per simulare questo:

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()

La mia domanda è semplice: il sistema specificato nel documento è intrinsecamente instabile e quindi i risultati, o ho fatto un errore da qualche parte?

Risposte:


6

Esplosività

Il documento contiene un errore, che causa la dinamica esplosiva nella simulazione (sebbene presumibilmente i calcoli sottostanti nel documento fossero corretti). La condizione di equilibrio derivata dalla decomposizione degli autovalori è contenuta nella terza riga della matrice a pagina 12 del documento, con le variabili ordinate come (lascerò cadere le tildas, quindi tutti le variabili minuscole vanno intese come deviazioni del log). Confronto con eqn. (16) a pag. 13, vediamo che i coefficienti per e vengono commutati, e quindi la condizione corretta èQ1(c,k,h,z)kh

ct=0.54kt+0.02ht+0.44zt

Simulazione

Innanzitutto, possiamo esprimere il consumo e il lavoro come funzione lineare delle variabili di stato (non è necessario risolvere il sistema in ogni fase della simulazione). Le condizioni di equilibrio intertemporale e intratemporale possono essere scritte come

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

quindi dopo aver moltiplicato per un inverso otteniamo

[ctht]=[0.530.470.471.47][ktzt]

Successivamente, la transizione per gli stati può essere scritta come

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

che può essere ridotto sostituendo le variabili di controllo a

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

Ora la simulazione dovrebbe essere banale, ecco un esempio 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')

Simulazione

Ovviamente in pratica, dovresti probabilmente ricalcolare l'intera soluzione, inclusa la decomposizione degli autovalori, in modo da poter modificare i parametri, ecc.


(+1). Forse sarebbe utile rappresentare graficamente l'output e gli investimenti, che di solito sono anche al centro dell'interesse (e contribuiscono alla convalida del modello, quando le serie di investimento mostrano una maggiore variabilità rispetto alle serie di output).
Alecos Papadopoulos,

5

NOVITÀ finali 20 marzo 2015 : ho inviato per e-mail il prof. K. Salyer, uno degli autori della Guida per l'utente. In una comunicazione ripetuta, ha verificato che entrambi i problemi (vedi la mia risposta di seguito, così come la risposta @ivansml), esistono:

a) L'equazione corretta per la legge del moto del consumo è come mostra @ivansml

b) Il numero è erroneamente chiamato "varianza" (p. 11) nel documento. In realtà, si tratta della deviazione standard , e in effetti una tale grandezza è una scoperta tipica nei dati (il prof. Salyer ha fatto riferimento a "p. 22 dal cap. 1 di Cooley e Frontiers of Business Cycle Research di Cooley e Prescott).0.007

Entrambi gli errori riguardano la versione stampata del documento. In altre parole, le simulazioni dietro la Figura 1 del documento sono corrette: usano l'equazione corretta per il consumo e usano come deviazione standard del disturbo nel processo tecnologico. Quindi è il secondo grafico sotto che è valido.0.007


FASE A
Ho verificato mediante simulazione (e utilizzando la deviazione standard corretta) che il modello esplode, sebbene lo faccia verso l'alto anziché verso il basso. Ci deve essere un errore di calcolo nel documento, che tuttavia non è stato in qualche modo "trasmesso" alle simulazioni degli autori. Per il momento non riesco a pensare ad altro, poiché la metodologia è standard. Sono incuriosito e ci sto ancora lavorando.

FASE B
Dopo la risposta di @ ivansml, che ha identificato un errore nel documento (che apparentemente non è stato fatto nelle simulazioni degli autori) , penso di aver identificato un secondo errore, questa volta nelle simulazioni : ed è correlato se è una deviazione standard o un valore di varianza. 0.007

In particolare: Usando il sistema di equazioni corretto e un disturbo casuale (cioè come scritto nel documento ) ottengo il seguente grafico dell'ultimo 120 realizzazioni per un totale di 3.000: ϵiN(0,σ2=0.007),SD=0.0837inserisci qui la descrizione dell'immagine

Nota i valori sull'asse verticale: sono molto più grandi dell'intervallo di valori che appare nella Figura 1 nel documento degli autori.

Ma se generi disturbi secondo , allora ottengo ϵiN(0,σ2=0.00049),SD=0.007inserisci qui la descrizione dell'immagine

Ora l'intervallo di valori corrisponde a quelli visualizzati nel grafico del documento. È possibile che la varianza corretta sia e che gli autori lo abbiano usato erroneamente come StDev, ma potrebbe anche essere che la varianza corretta sia e che la SD corretta sia . Quindi la simulazione era corretta (in linea con la stima ottenuta), ma per errore hanno chiamato nel documento "Varianza" quello che dovrebbe essere chiamato "Deviazione standard".0.0070.0000490.007

Tenterò di contattare gli autori su queste due questioni.


sono riuscito a capire che il processo è in effetti esplosivo, come hai sottolineato. ho commesso un errore sulla varianza, bus poiché sd è 0,083, il che significa una variazione ancora maggiore di quella che ho usato inizialmente e il processo esplode molto più velocemente. quello che non capisco come l'autore sia riuscito a simulare (mentre scrive) 3000 osservazioni e fornire la trama di serie stazionarie (alla fine del documento) mentre il processo non mostra questa proprietà.
Sarune

@Sarunas Controlla il tuo codice come segue: calcola manualmente i primi due-tre valori dei vari processi, usando gli shock effettivamente generati, e confronta con i valori corrispondenti che il codice ti dà.
Alecos Papadopoulos,

l'ho fatto. provato ad andare avanti manualmente. ciò che sarebbe utile sapere da ricercatori più esperti è che perché il processo di capitale sarebbe esplosivo? non vorremmo che fosse fermo? come altrimenti si potrebbe ottenere uno stato stazionario? ho controllato gli autovalori del sistema e, come hai sottolineato prima, il sistema è effettivamente esplosivo, quindi non c'è nulla di sbagliato nel codice stesso. o gli errori sono nel documento o non capisco la logica.
Sarune

grazie mille per il tuo sforzo. mi hai aiutato a morire! almeno, non sono stato io a commettere l'errore (fondamentalmente) :)
Sarunas,

1
@AlecosPapadopoulos Penso che il coefficiente sul capitale nel vincolo di risorse linearizzato possa superare uno (in effetti dovrebbe essere uguale a in questo modello) - ciò che conta è la stabilità del processo una volta che tutte le relazioni di equilibrio sono state sostituite a. Se prendo le matrici dalla carta e collegarli di Paul Klein solab risolutore, ottengo una soluzione stabile, quindi direi che c'è solo qualche errore di battitura numerica nella carta. (se lo fai tu stesso, fai attenzione alla notazione diversa e all'ordine variabile nel codice di Klein)1/β(kt,zt)A,B
ivansml
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.