Моделювання реального ділового циклу


10

В основному мені потрібно повторити "Посібник користувача щодо вирішення реальних моделей ділового циклу" ( http://www.econ.ucdavis.edu/facturing/kdsalyer/LECTURES/Ecn235a/Linearization/ugfinal.pdf ). Зокрема, я хочу імітувати динамічну систему, що має на увазі модель, яка вказана наступним чином:

введіть тут опис зображення

де - споживання, - пропозиція робочої сили, - капітал, - авторегресивний технологічний процес, - вихід, а - інвестиції.h k z y ichkzyi

Я моделюю його за допомогою такої логіки: скажімо, в момент часу все знаходиться в стаціонарному стані, і всі значення дорівнюють 0, від чого у нас . Потім, при , подаючи удар по системі через , я вирішую для і (як у мене "шокований" і раніше отриманий Потім я підключаю ці два, щоб отримати решту, а саме - і повторюю процес.k t + 1 t + 1 ε c t + 1 h t + 1 z t + 1 k t + 1 y t + 1 , i t + 1 , k 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 статті зі змінними, упорядкованими як (я відкину тильди, тому всі Малі величини слід розуміти як відхилення журналу). Порівняння з рівнем. (16) на с. 13, ми бачимо, що коефіцієнти для і перемикаються, і тому правильна умоваQ1(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). Можливо, було б корисно графік випуску та інвестицій, які зазвичай також знаходяться у фокусі інтересу (і сприяють валідації моделі, коли інвестиційна серія виявляє більшу мінливість, ніж вихідна серія).
Алекос Пападопулос

5

Підсумкові НОВИНИ 20 березня 2015 року : я надіслав електронною поштою проф. К. Солєр, один з авторів Посібника користувача. У повторному повідомленні він підтвердив, що обидва питання (див. Мою відповідь нижче, а також відповідь @ivansml) існують:

а) Правильне рівняння для закону руху споживання таке, як показує @ivansml

б) Число буде помилково називають «дисперсією» (стор. 11) у статті. Насправді це стандартне відхилення , і дійсно така величина є типовою знахідкою в даних (проф. Солєр посилається на "стор. 22, формулу 1 Кулі та Прескотта" Межі досліджень ділового циклу ").0.007

Обидві помилки стосуються друкованої версії статті. Іншими словами, симуляції за рисунком 1 статті є правильними: вони використовують правильне рівняння для споживання, а вони використовують як стандартне відхилення порушення в технологічному процесі. Отже, другий графік нижче, що він дійсний.0.007


ФАЗА A
Я симулятором (і використовуючи правильне стандартне відхилення) я перевірив, що модель вибухає, хоча це робить вгору, а не вниз. У роботі повинна бути помилка обчислення, яка все-таки якось не була "передана" моделюванням авторів. На даний момент я не можу придумати нічого іншого, оскільки методика є стандартною. Я заінтригований і тому все ще працюю над цим.

ФАЗА B
Після відповіді @ ivansml, яка виявила помилку в роботі (що, мабуть, не було зроблено в моделюваннях авторів) , я думаю, я виявив другу помилку, на цей раз у моделюваннях : і це пов'язано з тим, чи - це стандартне відхилення або значення дисперсії. 0.007

Конкретно: Використовуючи виправлену систему рівнянь та випадкове порушення (тобто, як написано в роботі ), я отримую наступний графік останнього 120 реалізацій всього 3000: ϵ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

Я спробую зв’язатися з авторами з цих двох питань.


мені вдалося з'ясувати, що процес насправді вибухонебезпечний, як ви вказали. я помилився щодо дисперсії, шина, оскільки sd становить 0,083, що означає ще більшу зміну, ніж я використовував спочатку, і процес вибухає набагато швидше. чого я не розумію, як автору вдалося змоделювати (як він пише) 3000 спостережень і навести сюжет стаціонарних рядів (в кінці статті), поки процес не проявляє цієї властивості.
Сарунас

@Sarunas Перевірте свій код наступним чином: обчисліть вручну перші два-три значення різних процесів, використовуючи фактично генеровані шоки, і порівняйте з відповідними значеннями, які дає вам код.
Алекос Пападопулос

я це зробив. намагався продовжувати вручну. що було б корисно знати більш досвідченим дослідникам, що чому капітальний процес буде вибухонебезпечним? Чи не хочемо ми, щоб це було нерухомим? як інакше можна було б досягти стійкого стану? Я перевірив власні значення системи, і як ви вже зазначали раніше, система насправді вибухонебезпечна, тому в самому коді немає нічого поганого. або помилки є в роботі, або я не розумію логіки.
Сарунас

дякую купу за ваші зусилля. ти допоміг чорт з мене! принаймні, я не помилився (принципово) :)
Сарунас

1
@AlecosPapadopoulos Я думаю, що коефіцієнт капіталу при лінеаризованому обмеженні ресурсів може перевищувати один (адже він повинен бути рівний в цій моделі) - що важливо, це стабільність процесу коли всі рівноважні відносини будуть замінені Якщо я візьму матриці з паперу і вставлю їх у вирішувач солабу Пола Кляйна , я отримаю стабільне рішення, тому я б сказав, що в документі є лише певна цифра. (якщо ви робите це самостійно, остерігайтеся різних позначень та змінних порядків у коді Клейна)( k t , z t ) A , B1/β(kt,zt)A,B
ivansml
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.