実際のビジネスサイクルのシミュレーション


10

基本的には、ハートレーの「実際のビジネスサイクルモデルを解くためのユーザーズガイド」(http://www.econ.ucdavis.edu/faculty/kdsalyer/LECTURES/Ecn235a/Linearization/ugfinal.pdf)を複製する必要があります。具体的には、次のように指定されたモデルによって暗示される動的システムをシミュレートしたいと思います。

ここに画像の説明を入力してください

ここで、は消費、は労働供給、は資本、は自己回帰技術プロセス、は出力、は投資です。h k z y ichkzyi

私は次のロジックを使用してそれをシミュレートします:時間、すべてが定常状態にあり、すべての値が0であり、そこからます。次に、を介してシステムにショックを与えることで、と解き(「ショックを受けた」を取得して以前に取得したため)。次に、これらの2つを接続して残りの部分、つまりを取得し、プロセスを繰り返します。K T + 1、T + 1 ε C T + 1、H T + 1 Z T + 1、K T + 1、Y T + 1I T + 1k個のT + 2tkt+1t+1εct+1ht+1zt+1kt+1yt+1,it+1,kt+2

残念ながら、意味のない爆発的なプロセスが発生します。

ここに画像の説明を入力してください

これをシミュレートするために使用されるRコードも含めます。

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

私の質問は単純です-論文で指定されているシステムは本質的に不安定で、結果がわかりにくいですか、それともどこかで間違いをしましたか?

回答:


6

爆発性

ペーパーにエラーが含まれているため、シミュレーションで爆発的なダイナミクスが発生します(おそらく、ペーパーの基礎となる計算は正しいものでしたが)。固有値分解から導出された平衡条件は、論文の12ページの行列の3行目に含まれており、変数は順序で並べられています(チルダをドロップするので、すべての小文字の変数は対数偏差として理解されます)。eqnと比較する。(16)p。13、と係数が入れ替わっていることがわかります。したがって、正しい条件はc k h z k hQ1(c,k,h,z)kh

ct=0.54kt+0.02ht+0.44zt

シミュレーション

最初に、消費と労働を状態変数の線形関数として表すことができます(シミュレーションの各ステップでシステムを解く必要はありません)。時間間および時間内平衡条件は、次のように書くことができます。

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

したがって、逆数を掛けると、

[ctht]=[0.530.470.471.47][ktzt]

次に、状態の遷移は次のように書くことができます

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

これは、制御変数を次のように置き換えることで削減できます。

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

これで、シミュレーションは簡単になります。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')

シミュレーション

もちろん実際には、固有値分解を含むソリューション全体を再計算して、パラメーターなどを変更できるようにする必要があります。


(+1)。おそらく、出力と投資をグラフ化すると役立つでしょう。これらは通常、関心の対象でもあります(そして、投資シリーズが出力シリーズより大きな変動性を示す場合、モデルの検証に貢献します)。
Alecos Papadopoulos

5

最終ニュース2015年3月20日:教授にメールを送りました。K. Salyer、ユーザーガイドの作成者の1人。繰り返し通信で、彼は両方の問題(下記の私の回答と@ivansmlの回答を参照)が存在することを確認しました:

a)消費の運動の法則の正しい方程式は、@ ivansmlが示すとおりです。

b)論文では、という数値は「分散」(p。11)と誤って呼ばれています。実際には、これは標準偏差であり、実際にそのような大きさはデータの典型的な発見です(Salyer教授は「クーリーとプレスコットのビジネスサイクル研究のフロンティアのp。22からch.1を参照しています」。0.007

どちらの間違いも紙の印刷版に関連しています。言い換えると、論文の図1の背後にあるシミュレーションは正しいです。消費の正しい方程式を使用し、テクノロジープロセスの外乱の標準偏差としてを使用します。したがって、それが有効であるのは下の2番目のグラフです。0.007


フェーズA
モデルが爆発することをシミュレーションで(そして正しい標準偏差を使用して)検証しましたが、爆発するのは下向きではなく上向きです。論文には計算上の間違いがあるはずですが、それでも著者のシミュレーションに「送信」されませんでした。今のところ、方法論は標準なので、他に何も考えられません。私は興味をそそられ、まだそれに取り組んでいます。

PHASE B
の後に@ ivansmlの回答、(明らかに作者のシミュレーションで行われていなかったことを)紙でミスを特定し、私が思うに、私が特定されている第二の間違い、今回のシミュレーションでは:それはどうかに関係している標準偏差または分散値です。 0.007

具体的には、修正された方程式系とランダム外乱(つまり、論文に記載されているように)最後の次のグラフが得られます合計3,000の120実現: ϵiN(0,σ2=0.007),SD=0.0837ここに画像の説明を入力してください

縦軸の値に注意してください。著者の論文の図1に示されている値の範囲よりはるかに大きくなっています。

しかし、に従って外乱を生成するととなり、次のようになります。 ϵiN(0,σ2=0.00049),SD=0.007ここに画像の説明を入力してください

これで、値の範囲は、ペーパーのグラフに表示される値と一致します。正しい分散があり、著者がStDevとして誤って使用した場合もありますが、正しい分散がで正しいSDがである場合もあります。そのため、シミュレーションは(得られた推定値に沿って)正しいものでしたが、誤って「分散」というペーパーで「標準偏差」と呼ばれるものを呼びました。0.000049 0.0070.0070.0000490.007

これら2つの問題について著者に連絡するように努めます。


あなたが指摘したように、私はこのプロセスが実際には爆発的であることを理解することができました。バスはsdが0.083であるため、分散について間違いを犯しました。これは、最初に使用したものよりもさらに大きい変化を意味し、プロセスははるかに速く爆発します。著者がどのようにして3000の観測をシミュレートし(論文の最後に)定常系列のプロットを提供し、プロセスがこの特性を示さなかったのかを知りません。
Sarunas

@Sarunas次のようにコードを確認します。実際に生成された衝撃を使用して、さまざまなプロセスの最初の2〜3の値を手動で計算し、コードから得られる対応する値と比較します。
Alecos Papadopoulos 2015

私はそれをやった。手動で行ってみました。より経験豊富な研究者から知っておくと便利なのは、なぜ資本プロセスが爆発的になるのでしょうか。静止させたくないですか?さもなければ、どのようにして定常状態を達成できますか 私はシステムの固有値をチェックしましたが、先に指摘したように、システムは実際には爆発的であるため、コード自体に問題はありません。間違いが紙にあるか、私は論理を理解していません。
サルナス

たくさんの努力をありがとう。あなたは私の地獄を助けました!少なくとも、間違いを犯したのは私ではなかった(基本的に):)
Sarunas

1
@AlecosPapadopoulos線形化されたリソース制約の資本の係数は1を超える可能性があると思います(実際には、このモデルではに等しい必要があります)- すべての平衡関係が置き換えられプロセスの安定性が重要です紙から行列を取り出して、Paul Kleinのsolabソルバーにプラグインすると、安定した解が得られるため、紙には数値の誤植があるだけです。(これを自分で行う場合は、クラインのコードの表記と変数の順序が異なることに注意してください)k tz tA B1/β(kt,zt)A,B
ivansml
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.