{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Método de Perturbación\n", "\n", "# (El Modelo de Ciclos Económicos Reales)\n", "\n", "Mauricio Tejada\n", "\n", "ILADES - Universidad Alberto Hurtado\n" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Plots.GRBackend()" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Paquetes necesarios\n", "\n", "using NLsolve\n", "using LaTeXStrings\n", "using Statistics\n", "using Plots\n", "gr()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## El Problema de Optimización\n", "\n", "Hasen (1985): El problema de optimización del planificador central es el siguiente:\n", "\n", "\\begin{array}{rcl}\n", "\\max U_{0} & = & \\sum_{t=0}^{\\infty}\\beta^{t}\\left(\\ln C_{t}-AN_{t}\\right)\\\\\n", "s.a & & C_{t}+I_{t}=Z_{t}K_{t}^{\\alpha}N_{t}^{1-\\alpha}\\\\\n", " & & K_{t+1}=I_{t}+(1-\\delta)K_{t}\\\\\n", " & & \\ln Z_{t+1}=\\rho\\ln Z_{t}+\\epsilon_{t+1}\\,\\,\\,\\epsilon_{t+1}\\sim N(0,\\sigma)\\\\\n", " & & K_{0},Z_{0}\\,dado.\n", "\\end{array}\n", "\n", "Alternativamente:\n", "\n", "\\begin{array}{rcl}\n", "\\max U_{0} & = & \\sum_{t=0}^{\\infty}\\beta^{t}\\left(\\ln C_{t}-AN_{t}\\right)\\\\\n", "s.a & & C_{t}+K_{t+1}=Z_{t}K_{t}^{\\alpha}N_{t}^{1-\\alpha}+(1-\\delta)K_{t}\\\\\n", " & & \\ln Z_{t+1}=\\rho\\ln Z_{t}+\\epsilon_{t+1}\\,\\,\\,\\epsilon_{t+1}\\sim N(0,\\sigma)\\\\\n", " & & K_{0},Z_{0}\\,dado.\n", "\\end{array}" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Condiciones de Optimalidad\n", "\n", "El lagranjeano intertemporal en valor presente:\n", "\n", "$$L=\\sum_{t=0}^{\\infty}\\beta^{t}\\left[\\ln C_{t}-AN_{t}+\\lambda_{t}\\left(Z_{t}K_{t}^{\\alpha}N_{t}^{1-\\alpha}+(1-\\delta)K_{t}-C_{t}-K_{t+1}\\right)\\right]$$\n", "\n", "Condiciones de primer orden:\n", "\n", "\\begin{array}{rcl}\n", "\\frac{\\partial L}{\\partial C_{t}} & : & \\beta^{t}\\left[\\frac{1}{C_{t}}-\\lambda_{t}\\right]=0\\\\\n", "\\frac{\\partial L}{\\partial N_{t}} & : & \\beta^{t}\\left[-A+\\lambda_{t}(1-\\alpha)Z_{t}K_{t}^{\\alpha}N_{t}^{1-\\alpha}\\right]\\\\\n", "\\frac{\\partial L}{\\partial K_{t+1}} & : & -\\beta^{t}\\lambda_{t}+\\beta^{t+1}E_{t}\\left[\\lambda_{t+1}\\left(\\alpha Z_{t+1}K_{t+1}^{\\alpha-1}N_{t+1}^{1-\\alpha}+1-\\delta\\right)\\right]\\\\\n", "\\frac{\\partial L}{\\partial\\lambda_{t}} & : & Z_{t}K_{t}^{\\alpha}N_{t}^{1-\\alpha}+(1-\\delta)K_{t}-C_{t}-K_{t+1}=0\n", "\\end{array}" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Tenemos el siguiente sistema de ecuaciones en diferencias (no lineal):\n", "\n", "\\begin{array}{rcl}\n", "\\frac{1}{C_{t}} & = & \\beta E_{t}\\left[\\frac{1}{C_{t+1}}\\left(\\alpha Z_{t+1}K_{t+1}^{\\alpha-1}N_{t+1}^{1-\\alpha}+1-\\delta\\right)\\right]\\\\\n", "A & = & \\frac{(1-\\alpha)Z_{t}K_{t}^{\\alpha}N_{t}^{-\\alpha}}{C_{t}}\\\\\n", "C_{t}+K_{t+1} & = & Z_{t}K_{t}^{\\alpha}N_{t}^{1-\\alpha}+(1-\\delta)K_{t}\\\\\n", "\\ln Z_{t+1} & = & \\rho\\ln Z_{t}+\\epsilon_{t+1}\n", "\\end{array}" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Estado Estacionario\n", "\n", "Entonces el estado estacionario resuelve (usamos $Z^*=1$):\n", "\n", "\\begin{array}{rcl}\n", "1 & = & \\beta\\left[\\alpha K^{*\\alpha-1}N^{*1-\\alpha}+1-\\delta\\right]\\\\\n", "A & = & \\frac{(1-\\alpha)K^{*\\alpha}N^{*-\\alpha}}{C^{*}}\\\\\n", "C^{*} & = & K^{*\\alpha}N^{*1-\\alpha}-\\delta K^{*}\n", "\\end{array}" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Para el cálculo del estado estacionario definimos primero los parámetros del modelo:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# Parametros del modelo\n", "\n", "α = 0.36 # Participacion del capital\n", "δ = 0.025 # Tasa de depreciacion\n", "β = 1/1.01 # Tasa de descuento (compatible con 1% de tasa de retorno)\n", "ρ = 0.95 # Coeficiente de autocorrelaci?n del shock tecnologico\n", "σ = 0.712 # Desviacion estandar del shock tecnologico (Unidades: %)\n", "A = 2.5846 # Parametro de la funci?n de utilidad\n", "zee = 1; # Normalizacion\n", "η = [0; 1]; # Perturbación" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Para calcular el estado estacionario del modelo, generamos el sistema de ecuaciones: " ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "fee (generic function with 1 method)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Sistema de ecuaciones que resuelve por el estado estacionario\n", "\n", "function fee(x)\n", " \n", " fval = similar(x)\n", " \n", " fval[1] = β*(α*zee*(x[1]^(α-1))*(x[2]^(1-α))+(1-δ)) - 1\n", " fval[2] = A - ((1-α)*zee*(x[1]^α)*(x[2]^(-α))/x[3])\n", " fval[3] = zee*(x[1]^α)*(x[2]^(1-α)) - δ*x[1] - x[3]\n", " \n", " return fval\n", "end" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Usamos la función NLsolve de Julia:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Results of Nonlinear Solver Algorithm\n", " * Algorithm: Trust-region with dogleg and autoscaling\n", " * Starting Point: [0.5, 0.5, 0.5]\n", " * Zero: [12.720309212740371, 0.3333353174721278, 0.9186889986979181]\n", " * Inf-norm of residuals: 0.000000\n", " * Iterations: 14\n", " * Convergence: true\n", " * |x - x'| < 0.0e+00: false\n", " * |f(x)| < 1.0e-08: true\n", " * Function Calls (f): 15\n", " * Jacobian Calls (df/dx): 13" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "solee = nlsolve(fee, [0.5, 0.5, 0.5], inplace = false)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Estado Estacionario: [12.720309212740371, 0.3333353174721278, 0.9186889986979181] \n", "Valor de la Función en Estado Estacionario: [0.0, 2.6645352591003757e-15, -6.661338147750939e-16]" ] } ], "source": [ "xout = solee.zero\n", "funv = fee(xout);\n", "\n", "print(\"Estado Estacionario: $xout \\n\")\n", "print(\"Valor de la Función en Estado Estacionario: $funv\")" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Estado estacionario:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "kee = xout[1]\n", "nee = xout[2]\n", "cee = xout[3]\n", "yee = zee*(kee^α)*(nee^(1-α))\n", "lamee = 1/cee\n", "ree = α*zee*(kee^(α-1))*(nee^(1-α))+(1-δ);" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Método de Perturbación" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# Incluímos funciones necesarias para aplicar el método de perturbación\n", "include(\"second_order_approx.jl\");" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Escribimos las ecuaciones del modelo \n", "\n", "\\begin{array}{rcl}\n", "\\frac{1}{C_{t}} & = & \\beta E_{t}\\left[\\frac{1}{C_{t+1}}\\left(\\alpha Z_{t+1}K_{t+1}^{\\alpha-1}N_{t+1}^{1-\\alpha}+1-\\delta\\right)\\right]\\\\\n", "A & = & \\frac{(1-\\alpha)Z_{t}K_{t}^{\\alpha}N_{t}^{-\\alpha}}{C_{t}}\\\\\n", "C_{t}+K_{t+1} & = & Z_{t}K_{t}^{\\alpha}N_{t}^{1-\\alpha}+(1-\\delta)K_{t}\\\\\n", "\\ln Z_{t+1} & = & \\rho\\ln Z_{t}+\\epsilon_{t+1}\n", "\\end{array}\n", "\n", "en la forma:\n", "\n", "$$E_t f(x_{t+1},x_t,y_{t+1},y_t)$$" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1×8 Array{Float64,2}:\n", " 2.5432 0.0 -0.0848076 -1.09861 2.5432 0.0 -0.0848076 -1.09861" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Número de variables y shocks\n", "nx = 2; # variables de estado k z\n", "ny = 2; # variables de control c n\n", "ne = 1; # shock eps\n", "\n", "# Definimos el modelo. Orden de variables\n", "# k’ z’ c’ n' k z c n \n", "# 1 2 3 4 5 6 7 8 \n", "# las variables serán definidas en logs\n", "\n", "ecu1(x) = (1/exp(x[7])) - β*(1/exp(x[3]))*(α*exp(x[2])*(exp(x[1])^(α-1))*(exp(x[4])^(1-α))+1-δ)\n", "ecu2(x) = A - (1-α)*(exp(x[6])*(exp(x[5])^α)*(exp(x[8])^(-α)))/exp(x[7])\n", "ecu3(x) = exp(x[7]) + exp(x[1]) - exp(x[6])*(exp(x[5])^α)*(exp(x[8])^(1-α)) - (1-δ)*exp(x[5])\n", "ecu4(x) = x[2] - ρ*x[6];\n", "\n", "sistema = (ecu1,ecu2,ecu3,ecu4);\n", "\n", "# Vector de varaibles en estado estacionario \n", "xee = [log(kee) log(zee ) log(cee) log(nee) log(kee) log(zee ) log(cee) log(nee)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Las matrices Jacobiana y Hesiana del sistema se pueden hallar usando la función `compute_gradient_hessian`. Internamente, la función utiliza el paquete `ForwardDiff`." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "# Calculando las matrices jacobiana y hesiana del sistema\n", "J, H = compute_gradient_hessian(sistema,xee);" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "4×8 Array{Float64,2}:\n", " 0.0241412 -0.0377206 1.08851 … -0.0 -1.08851 -0.0\n", " -0.0 -0.0 -0.0 -2.5846 2.5846 0.930456\n", " 12.7203 0.0 0.0 -1.2367 0.918689 -0.791486\n", " 0.0 1.0 0.0 -0.95 0.0 0.0" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "J" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "64×4 Array{Float64,2}:\n", " -0.0154503 -0.0 12.7203 0.0\n", " 0.0241412 -0.0 0.0 0.0\n", " -0.0241412 -0.0 0.0 0.0\n", " 0.0154503 -0.0 0.0 0.0\n", " 0.0 -0.0 0.0 0.0\n", " 0.0 -0.0 0.0 0.0\n", " 0.0 -0.0 0.0 0.0\n", " 0.0 -0.0 0.0 0.0\n", " 0.0241412 -0.0 0.0 0.0\n", " -0.0377206 -0.0 0.0 0.0\n", " 0.0377206 -0.0 0.0 0.0\n", " -0.0241412 -0.0 0.0 0.0\n", " 0.0 -0.0 0.0 0.0\n", " ⋮ \n", " 0.0 0.930456 0.0 0.0\n", " 0.0 2.5846 0.0 0.0\n", " 1.08851 -2.5846 0.918689 0.0\n", " 0.0 -0.930456 0.0 0.0\n", " 0.0 -0.0 0.0 0.0\n", " 0.0 -0.0 0.0 0.0\n", " 0.0 -0.0 0.0 0.0\n", " 0.0 -0.0 0.0 0.0\n", " 0.0 0.334964 -0.284935 0.0\n", " 0.0 0.930456 -0.791486 0.0\n", " 0.0 -0.930456 0.0 0.0\n", " 0.0 -0.334964 -0.506551 0.0" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "H" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Aproximación de primer orden" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "La aproximación de la solución es:\n", "\n", "$$\n", "\\begin{array}{l}\n", "g(x, \\sigma)=g(\\bar{x}, 0)+g_{x}(\\bar{x}, 0)(x-\\bar{x})+g_{\\sigma}(\\bar{x}, 0) \\sigma \\\\\n", "h(x, \\sigma)=h(\\bar{x}, 0)+h_{x}(\\bar{x}, 0)(x-\\bar{x})+h_{\\sigma}(\\bar{x}, 0) \\sigma\n", "\\end{array}\n", "$$\n", "\n", "pero recordemos que en la solución $g_{\\sigma}(\\bar{x}, 0)=0$ y $h_{\\sigma}(\\bar{x}, 0)=0$. Usamos la función `solve_first_order_approx` para resolver por las funciones de política. Los resultados de la función son los siguientes:\n", "\n", "- $Gs = g(\\bar{x}, 0)$ Estado estacionario de las variables de control.\n", "- $Hs = h(\\bar{x}, 0)$ Estado Estacionario de las variables de estado.\n", "- $Gx = g_{x}(\\bar{x}, 0)$\n", "- $Hx = h_{x}(\\bar{x}, 0)$" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "# Solución usando una aproximación de primer orden\n", "Gs,Hs,Gx,Hx = solve_first_order_approx(xee,J,nx,ny,ne);" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2-element Array{Float64,1}:\n", " -0.08480762663445608\n", " -1.0986063362694418" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Gs" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2-element Array{Float64,1}:\n", " 2.543199866794215\n", " 0.0" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Hs" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2×2 Array{Float64,2}:\n", " 0.531512 0.469646\n", " -0.476423 1.4732" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Gx" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2×2 Array{Float64,2}:\n", " 0.941969 0.154969\n", " 0.0 0.95" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Hx" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Analisis de Impulso Respuesta" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Las funciones de política, escritas en desvíos (logaritmicos) del estado estacionario, son:\n", "\n", "$$\n", "\\begin{array}{l}\n", "\\hat{y}=g_{x}(0,0) \\hat{x} \\\\\n", "\\hat{x}^{\\prime}=h_{x}(0,0) \\hat{x}+\\eta \\sigma \\epsilon^{\\prime}\n", "\\end{array}\n", "$$\n", "\n", "Entonces, dado un shock inicial de tamaño $\\hat{x}_{0}=\\eta \\sigma \\epsilon_{0}$, las funciones de impulso respuesta son:\n", "\n", "$$\n", "FIR\\left(\\hat{x}_{t}\\right) = h_{x}^{t} \\hat{x}_{0}\n", "$$\n", "$$\n", "F I R\\left(\\hat{y}_{t}\\right)=g_{x} h_{x}^{t} \\hat{x}_{0}\n", "$$" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "# Analisis de impulso respuesta\n", "num_periodos = 12*6\n", "\n", "t = 1:num_periodos\n", "\n", "# El shock inicial es de una desviación estándar.\n", "shock_inicial = η.*σ # esto es, desvío 1%, podría ser sigma;\n", "\n", "# Situación inicial: Estado estacionario\n", "xx = zeros(num_periodos,nx);\n", "yy = zeros(num_periodos,ny);\n", "\n", "for i = 1:num_periodos\n", " xx[i,:] = (Hx^i)*shock_inicial\n", " yy[i,:] = Gx*(Hx^i)*shock_inicial\n", "end\n", "\n", "pib = xx[:,2] + α*xx[:,1] + (1-α)*yy[:,2];" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt_z = plot(t,xx[:,2], xlabel=\"Meses después del Shock\", ylabel=\"Desvío porcentual respecto del EE\", \n", " title = \"Shock en la Productividad\", color=\"red\", legend=false, linewidth = 2, \n", " grid = true)\n", "display(plt_z)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt_k = plot(t,xx[:,1], xlabel=\"Meses después del Shock\", ylabel=\"Desvío porcentual respecto del EE\", \n", " title = \"Respuesta del Capital a un Shock en la Productividad\", color=\"red\", \n", " legend=false, linewidth = 2, grid = true)\n", "display(plt_k)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt_c = plot(t,yy[:,1], xlabel=\"Meses después del Shock\", ylabel=\"Desvío porcentual respecto del EE\", \n", " title = \"Respuesta del Consumo a un Shock en la Productividad\", color=\"red\", \n", " legend=false, linewidth = 2, grid = true)\n", "display(plt_c)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt_y = plot(t,yy[:,2], xlabel=\"Meses después del Shock\", ylabel=\"Desvío porcentual respecto del EE\", \n", " title = \"Respuesta del Trabajo a un Shock en la Productividad\", color=\"red\", \n", " legend=false, linewidth = 2, grid = true)\n", "display(plt_y)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt_n = plot(t,pib, xlabel=\"Meses después del Shock\", ylabel=\"Desvío porcentual respecto del EE\", \n", " title = \"Respuesta del PIB a un Shock en la Productividad\", color=\"red\", \n", " legend=false, linewidth = 2, grid = true)\n", "display(plt_n)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Simulaciones" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "# Semilla para simulación\n", "using Random\n", "Random.seed!(12345);\n", "\n", "# Shock tecnológico\n", "periodos_sim = 600\n", "t_sim = 1:periodos_sim \n", "tdrop = 50; # Eliminamos las primeras observaciones \n", "\n", "ϵ = σ*randn(periodos_sim)\n", "\n", "# Situación inicial: Estado estacionario\n", "xx_sim = zeros(periodos_sim,nx);\n", "yy_sim = zeros(periodos_sim,ny);\n", "\n", "for i = 2:periodos_sim\n", " xx_sim[i,:] = Hx*xx_sim[i-1,:] + η*ϵ[i] \n", " yy_sim[i,:] = Gx*xx_sim[i,:]\n", "end\n", "\n", "pib_sim = xx_sim[:,2] + α*xx_sim[:,1] + (1-α)*yy_sim[:,2];" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Ahora graficamos las series simuladas:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt_z_sim = plot(collect(t_sim[tdrop:end]),xx_sim[tdrop:end,2], xlabel=\"Meses\", \n", " ylabel=\"Desvío porcentual respecto del EE\", title = \"Productividad\", color=\"blue\", \n", " legend=false, linewidth = 2, grid = true)\n", "display(plt_z_sim)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt_y_sim = plot(collect(t_sim[tdrop:end]),pib_sim[tdrop:end,1], xlabel=\"Meses\", \n", " ylabel=\"Desvío porcentual respecto del EE\", title = \"Producto\", color=\"blue\", \n", " legend=false, linewidth = 2, grid = true)\n", "display(plt_y_sim)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt_k_sim = plot(collect(t_sim[tdrop:end]),xx_sim[tdrop:end,1], xlabel=\"Meses\", \n", " ylabel=\"Desvío porcentual respecto del EE\", title = \"Capital\", color=\"blue\", \n", " legend=false, linewidth = 2, grid = true)\n", "display(plt_k_sim)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Algunos momentos de los datos simulados:" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "La varianza del PIB es 18.60725206103514\n", "La varianza del stock de capital es 15.334952682493359\n", "La varianza del consumo es 8.074703686976505\n", "La correlación entre el consumo y el pib es 0.8511815772251051\n" ] } ], "source": [ "varpib = var(pib_sim[tdrop:end,1])\n", "vark = var(xx_sim[tdrop:end,1])\n", "varc = var(yy_sim[tdrop:end,1])\n", "cor_pib_c = cor(yy_sim[tdrop:end,1],pib_sim[tdrop:end,1])\n", "\n", "println(\"La varianza del PIB es $varpib\");\n", "println(\"La varianza del stock de capital es $vark\");\n", "println(\"La varianza del consumo es $varc\");\n", "println(\"La correlación entre el consumo y el pib es $cor_pib_c\");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Aproximación de segundo orden" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Para implementar la aproximación de segundo orden usamos la función `solve_second_order_approx` la misma que requiere, además de la jacobiana del sismema, la hesiana de mismo. Para el modelo analizado, la solución vía aproximación de segundo orden es:" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "Gs,Hs,Gx,Hx,Gxx,Hxx,Gss,Hss = solve_second_order_approx(xee,J,H,η,nx,ny,ne);" ] } ], "metadata": { "kernelspec": { "display_name": "Julia 1.4.1", "language": "julia", "name": "julia-1.4" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "1.4.1" } }, "nbformat": 4, "nbformat_minor": 4 }