{
"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"
]
},
"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"
]
},
"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"
]
},
"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"
]
},
"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"
]
},
"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"
]
},
"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"
]
},
"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"
]
},
"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
}