실제 비즈니스주기 시뮬레이션


10

기본적으로 Hartley의 '실제 비즈니스주기 모델 해결을위한 사용자 안내서'( http://www.econ.ucdavis.edu/faculty/kdsalyer/LECTURES/Ecn235a/Linearization/ugfinal.pdf ) 를 복제해야합니다 . 특히 다음과 같이 지정된 모델에 의해 암시 된 동적 시스템을 시뮬레이션하려고합니다.

여기에 이미지 설명을 입력하십시오

여기서 는 소비, h 는 노동 공급, k 는 자본, z 는 자기 회귀 기술 프로세스, y 는 출력이고 i 는 투자입니다.h케이와이나는

다음 논리를 사용하여 시뮬레이션합니다 : 시간 에서 모든 것이 정상 상태이며 모든 값은 0이며, 우리는 k t + 1 입니다. 그런 다음에서 t + 1 을 통해 시스템에 충격을 주어 ε 내가 풀기 C의 t + 1시간 t + 1 (I는 '충격'가지고 Z의 t + 1 및 이전에 취득한 전율 t + 1 .이어서, I 즉 나머지 검색 두 플러그 - Y t + 1 , I케이+1+1ε+1h+1+1케이+1 및 프로세스를 반복하십시오.와이+1,나는+1,케이+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

폭발성

1(,케이,h,)케이h

=0.54케이+0.02h+0.44

시뮬레이션

먼저 소비와 노동을 상태 변수의 선형 함수로 표현할 수 있습니다 (시뮬레이션의 각 단계에서 시스템을 풀 필요가 없습니다). 시간 간 및 시간 내 평형 조건은 다음과 같이 쓸 수 있습니다.

[10.022.781][h]=[0.540.4412.78][케이]

따라서 역수를 곱하면

[h]=[0.530.470.471.47][케이]

다음으로 상태 전이는 다음과 같이 쓸 수 있습니다.

[케이+1+1]=[0.070.0600][h]+[1.010.100.95][케이]+[0ϵ+1]

제어 변수를 대체하여 감소시킬 수 있습니다.

[케이+1+1]=[0.940.1600.95][케이]+[0ϵ+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 1

5

최종 뉴스 2015 년 3 월 20 일 : 교수에게 전자 메일을 보냈습니다. K. Salyer, 사용자 안내서의 저자 중 하나. 반복적 인 의사 소통에서 그는 두 가지 문제 (아래의 답변과 @ivansml 답변 참조)가 존재하는지 확인했습니다.

a) 소비 운동 법칙에 대한 올바른 방정식은 @ivansml이 보여주는 것과 같습니다.

0.007

0.007


단계 A
시뮬레이션을 통해 (그리고 올바른 표준 편차를 사용하여) 모델이 아래쪽이 아닌 위쪽으로 폭발하지만 폭발한다는 것을 확인했습니다 . 논문에는 계산 실수가 있어야하지만 그럼에도 불구하고 저자의 시뮬레이션에 "전송되지"않았다. 방법론이 표준이기 때문에 지금은 다른 것을 생각할 수 없습니다. 나는 흥미로워 서 여전히 노력하고 있습니다.


0.007

ϵ나는(0,σ2=0.007),에스=0.0837여기에 이미지 설명을 입력하십시오

세로 축의 값을 참고하십시오.이 값 은 저자의 논문에서 그림 1에 나타나는 값의 범위보다 훨씬 큽니다 .

ϵ나는(0,σ2=0.00049),에스=0.007여기에 이미지 설명을 입력하십시오

0.0070.0000490.007

이 두 가지 문제에 대해 저자에게 연락을 시도 할 것입니다.


나는 당신이 지적한 것처럼 프로세스가 실제로 폭발적이라는 것을 알았습니다. sd가 0.083이므로 분산에 대해 실수를했습니다. 처음 사용했던 것보다 훨씬 큰 변화를 의미하며 프로세스가 훨씬 빠르게 폭발합니다. 필자가 저자가 3000 개의 관측 값을 시뮬레이션하고 (종이의 끝에서) 고정 시리즈의 플롯을 제공하는 방법을 얻지 못했지만 프로세스에는이 속성이 표시되지 않습니다.
Sarunas

@Sarunas 다음과 같이 코드를 확인하십시오 . 실제로 생성 된 충격을 사용하여 다양한 프로세스의 처음 두 세 값을 수동으로 계산 하고 코드가 제공하는 해당 값과 비교하십시오.
Alecos Papadopoulos

내가 그거 했어. 수동으로 계속 시도했습니다. 보다 숙련 된 연구원들로부터 알고있는 것이 자본 프로세스가 폭발적인 이유는 무엇입니까? 고정되어 있지 않습니까? 어떻게 안정된 상태를 달성 할 수 있습니까? 나는 시스템의 고유 값을 확인했으며 앞에서 지적했듯이 시스템은 실제로 폭발성이 있으므로 코드 자체에는 아무런 문제가 없습니다. 실수는 종이에 있거나 논리를 이해하지 못합니다.
Sarunas

노력해 주셔서 감사합니다. 당신은 나에게서 지옥을 도왔습니다! 적어도 (실수 적으로) 실수를 저지른 사람은 아닙니다. :
Sarunas

1
1/β(케이,),
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.