{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "
\n", " \n", " \n", " \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# General Purpose Packages" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Contents\n", "\n", "- [General Purpose Packages](#General-Purpose-Packages) \n", " - [Overview](#Overview) \n", " - [Numerical Integration](#Numerical-Integration) \n", " - [Interpolation](#Interpolation) \n", " - [Linear Algebra](#Linear-Algebra) \n", " - [General Tools](#General-Tools) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Overview\n", "\n", "Julia has both a large number of useful, well written libraries and many incomplete poorly maintained proofs of concept.\n", "\n", "A major advantage of Julia libraries is that, because Julia itself is sufficiently fast, there is less need to mix in low level languages like C and Fortran.\n", "\n", "As a result, most Julia libraries are written exclusively in Julia.\n", "\n", "Not only does this make the libraries more portable, it makes them much easier to dive into, read, learn from and modify.\n", "\n", "In this lecture we introduce a few of the Julia libraries that we’ve found particularly useful for quantitative work in economics.\n", "\n", "Also see [data and statistical packages](data_statistical_packages.html) and [optimization, solver, and related packages](optimization_solver_packages.html) for more domain specific packages." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Setup" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "hide-output": true }, "outputs": [], "source": [ "using InstantiateFromURL\n", "# optionally add arguments to force installation: instantiate = true, precompile = true\n", "github_project(\"QuantEcon/quantecon-notebooks-julia\", version = \"0.8.0\")" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "hide-output": true }, "outputs": [], "source": [ "using LinearAlgebra, Statistics\n", "using QuantEcon, QuadGK, FastGaussQuadrature, Distributions, Expectations\n", "using Interpolations, Plots, LaTeXStrings, ProgressMeter" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Numerical Integration\n", "\n", "Many applications require directly calculating a numerical derivative and calculating expectations." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Adaptive Quadrature\n", "\n", "A high accuracy solution for calculating numerical integrals is [QuadGK](https://github.com/JuliaMath/QuadGK.jl)." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "hide-output": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(value, tol) = quadgk(cos, -2π, 2π) = (-1.5474478810961125e-14, 5.7846097329025695e-24)\n" ] } ], "source": [ "using QuadGK\n", "@show value, tol = quadgk(cos, -2π, 2π);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is an adaptive Gauss-Kronrod integration technique that’s relatively accurate for smooth functions.\n", "\n", "However, its adaptive implementation makes it slow and not well suited to inner loops." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Gaussian Quadrature\n", "\n", "Alternatively, many integrals can be done efficiently with (non-adaptive) [Gaussian quadrature](https://en.wikipedia.org/wiki/Gaussian_quadrature).\n", "\n", "For example, using [FastGaussQuadrature.jl](https://github.com/ajt60gaibb/FastGaussQuadrature.jl)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "hide-output": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "w ⋅ f.(x) = 0.6666666666666667\n" ] } ], "source": [ "using FastGaussQuadrature\n", "x, w = gausslegendre( 100_000 ); # i.e. find 100,000 nodes\n", "\n", "# integrates f(x) = x^2 from -1 to 1\n", "f(x) = x^2\n", "@show w ⋅ f.(x); # calculate integral" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The only problem with the FastGaussQuadrature package is that you will need to deal with affine transformations to the non-default domains yourself.\n", "\n", "Alternatively, QuantEcon.jl has routines for Gaussian quadrature that translate the domains." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "hide-output": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "w ⋅ cos.(x) = -3.0064051806277455e-15\n" ] } ], "source": [ "using QuantEcon\n", "\n", "x, w = qnwlege(65, -2π, 2π);\n", "@show w ⋅ cos.(x); # i.e. on [-2π, 2π] domain" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Expectations\n", "\n", "If the calculations of the numerical integral is simply for calculating mathematical expectations of a particular distribution, then [Expectations.jl](https://github.com/QuantEcon/Expectations.jl) provides a convenient interface.\n", "\n", "Under the hood, it is finding the appropriate Gaussian quadrature scheme for the distribution using FastGaussQuadrature." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "hide-output": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "E(f) = -6.991310601309959e-18\n" ] }, { "data": { "text/plain": [ "true" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "using Distributions, Expectations\n", "dist = Normal()\n", "E = expectation(dist)\n", "f(x) = x\n", "@show E(f) #i.e. identity\n", "\n", "# Or using as a linear operator\n", "f(x) = x^2\n", "x = nodes(E)\n", "w = weights(E)\n", "E * f.(x) == f.(x) ⋅ w" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Interpolation\n", "\n", "In economics we often wish to interpolate discrete data (i.e., build continuous functions that join discrete sequences of points).\n", "\n", "The package we usually turn to for this purpose is [Interpolations.jl](https://github.com/JuliaMath/Interpolations.jl).\n", "\n", "There are a variety of options, but we will only demonstrate the convenient notations." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Univariate with a Regular Grid\n", "\n", "Let’s start with the univariate case.\n", "\n", "We begin by creating some data points, using a sine function" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "hide-output": false }, "outputs": [ { "data": { "image/png": "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" }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "using Interpolations\n", "using Plots\n", "gr(fmt=:png);\n", "\n", "x = -7:7 # x points, coase grid\n", "y = sin.(x) # corresponding y points\n", "\n", "xf = -7:0.1:7 # fine grid\n", "plot(xf, sin.(xf), label = \"sin function\")\n", "scatter!(x, y, label = \"sampled data\", markersize = 4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To implement linear and cubic [spline](https://en.wikipedia.org/wiki/Spline_%28mathematics%29) interpolation" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "hide-output": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "li(0.3) = 0.25244129544236954\n" ] }, { "data": { "image/png": "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5LbbboOdIu7ce++9/f39sFPElzfffHP37mlvapjI0CUDfE1NTeja7QQDAwN6vR52ivgSCAR++OEH2CnizsGDB+N80kvsmUymqRPYkDNC3wgRBEGQhIYKIYIgCJLQoA2WufjiixsaGs444T8R+Hw+JpOJBtZOFQwGg8Fg4kyUPhs4jns8np8v7ZvgxsbGkpOT0dKMU6GPlKl27dp1xons0Aqhz+f7+bprCIIgCDKHMjIyWCzW6c+BVggRBEEQJB6glkkEQRAkoaFCiCAIgiQ0NH0NApfLdffdd0/e/OUvf3nJJZdM3mxtbX388ce7u7uXL1/+zDPPJMh8IBzH33rrrd27dw8ODioUikceeUSj0Uwevf/++3t7e6M/q9Xqp556Ck7KGAqHw88///w333yTnp7+2GOPLV26dOrRjz/++O2338Zx/JZbbrnxxhthhYwxk8n0zjvvNDY2cjicjRs33nPPPZMTcGtra1999dXJM5988smp7x8K6+vr+93vfjd5c/PmzRdeeOHkzaampieffLK3t/ecc87ZsmXLCfu/IpNQIYTA5/Pt2LHj/fffj94sLS2dPBQMBs8777zbbrvtsccee+yxx37729++++67kGLGVDAY3Llz54033piXl/f555+fc845ZrNZIpFEj+7atevaa69VKpUAgMk7qe2FF1744osv3n77bb1ef8EFF1itVqlUGj20f//+u+++e/v27Ww2+7rrrpNKpRs2bICbNjb27t0rk8mee+45n8937733jo6ObtmyJXqop6fHYrH88Y9/jN6c/F1Rntfr3b179zvvvBO9qVAoJg/5/f7169ffd999jz/++IMPPvjggw++8cYbkGLGPQKJuY6ODqFQeNJDn3zyiUqliv7c1tbG5XKHh4djGC1eZGdn79ixY/KmWq0+ePAgxDwxFolE5HL5nj17ojc3bty4devWyaNXXnnl448/Hv1569atGzduhBARtnfeeWfRokWTNz/++OP169dDzAOL2WyWSqUnPfTBBx8sWLAg+nNzczOfz/d6vTGMRiaojxCOQCBw5ZVXbtq06f3335+6D7vBYKiuro7+XFhYKBAIWltbIWWExuFwOJ3OEzZzfvrppy+77LKnn356bGwMVrCYcblc/f39ixcvjt5cvHixwWCYPGo0GicPVVdXTz2UOEwmU3Fx8dR7zGbzJZdccsstt+zduxdWKii8Xu8VV1xx/fXXb9++nZgyC8BoNE5+mKjVajqdbrPZIGWMd6hpFAI+n//000+XlZUNDg5u2bLFaDS+9NJL0UNOp1MkEk2eKRKJnE4npJhwhMPhm266afPmzdGG0KhbbrmlsLAw2o/4+eefHzt2jM1mQww53xwOB4PBmNxUQSQSORyOyaNOp3NyWn1aWtrUQwli//7977//fn19/eQ9BQUFjz76aEFBgclkuvzyy995551rrrkGYsKYEQqFW7Zs0Wq1vb29jz76aEtLy3PPPRc95HA4srKyJs9MwA+Ts4cKYYy8995727dvBwBccskl991338MPPxy9X6FQnH/++X/+85+jS2MIhUKv1zv5KJ/Pl5KSAiVwDHg8nssuuyz6886dOzkcDo7jmzdvBgC8/vrrU8+8//77oz9ceOGFOTk5Bw8eXLduXWzDxpRQKIxEIhiGRRcHGR8fn7qgjEAgmJiYiP58wqFEUFdXd9VVV33yySdTvxFWV1dHv/1s2LCBTqe/8cYbCVII5XL5gw8+GP05Pz//qquuevbZZ2k0GgBAKBROvk8A1T9MZgkVwhjZsGGDTqcDP+vGz8rKCgQCgUAgOjo0Pz//888/jx7yeDxOpzMvLy/2aWMjKSlp69at0Z9ZLBaO47feeuvAwMCOHTtO9YWPy+WKxeKRkZEYxoQgMzOTw+HY7fbo0Ee73T71bZCfn2+329evX//zQ5TX2Nh48cUXv/fee+edd96pzsnOzh4dHY1lqjiRlZXl8/lCoVD0zyc/P3/fvn3RQ263e3R0NDc3F2rAOAa7kzIRWSyWsbExgiAwDLvtttuqq6sJgvjiiy+++eabgYGBpKQkvV5PEMSLL764dOlSyFljBcfxO++8c9myZVP781taWl577bWhoaH29vboPR999FFSUlJPTw+kmLGzadOmO+64gyCI3t7e9PT0+vp6giCef/75zs7ON998s7Ky0u/3B4PB5cuXv/zyy7DDxojRaJTJZB9//PHUO9988029Xq/X64PBIEEQQ0NDy5cv/81vfgMpY6yZzebon4zf77/ppptWrVpFEMSnn366e/fu7u5uPp/f3NxMEMQzzzyzZs0ayFnjGCqEEPz1r3/l8/m5ublCoXDZsmWtra0EQdx8883Rv95t27aJRCKFQlFQUBCtiIlgcHDwhEu0bdu2/fvf/y4sLGxpaRGJRJmZmTKZLDs7+7PPPoMdNha6u7vLy8sLCgpEItETTzwRvVMgEPzwww8Yhl111VVSqTQjI+OSSy6ZmJiAGzVm7rzzzqnvkKysLIIgysrK/v73v9966618Pr+goIDH41199dWjo6Oww8bIK6+8wufz8/LykpOTV61aZbfbCYK47rrrHnjgAYIgXn/99dTUVIVCUVxc3NTUBDts/EJrjcKBYZjD4RCJRJMDIqby+/0ulys7OxvtzhGF4/jg4CCTyUyc+WFRvb29KSkpJ32TDA0NEQSRILMqz4bP53M6nXK5PNF2XQgEAg6HQywWn3TxjYmJiaGhIfRhcnqoECIIgiAJDV0jIAiCIAkNFUIEQRAkoaFCiCAIgiQ0VAgRBEGQhIYKIYIgCJLQUCFEEARBEhoqhAiCIEhCQ4UQQRAESWioECIIgiAJDRVCBEEQJKGhQoggCIIkNFQIEQRBkISGCiGCIAiS0P4f4dnJbL9188IAAAAASUVORK5CYII=" }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "li = LinearInterpolation(x, y)\n", "li_spline = CubicSplineInterpolation(x, y)\n", "\n", "@show li(0.3) # evaluate at a single point\n", "\n", "scatter(x, y, label = \"sampled data\", markersize = 4)\n", "plot!(xf, li.(xf), label = \"linear\")\n", "plot!(xf, li_spline.(xf), label = \"spline\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Univariate with Irregular Grid\n", "\n", "In the above, the LinearInterpolation function uses a specialized function\n", "for regular grids since x is a Range type.\n", "\n", "For an arbitrary, irregular grid" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "hide-output": false }, "outputs": [ { "data": { "image/png": "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" }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = log.(range(1, exp(4), length = 10)) .+ 1 # uneven grid\n", "y = log.(x) # corresponding y points\n", "\n", "interp = LinearInterpolation(x, y)\n", "\n", "xf = log.(range(1, exp(4), length = 100)) .+ 1 # finer grid\n", "\n", "plot(xf, interp.(xf), label = \"linear\")\n", "scatter!(x, y, label = \"sampled data\", markersize = 4, size = (800, 400))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "At this point, Interpolations.jl does not have support for cubic splines with irregular grids, but there are plenty of other packages that do (e.g. [Dierckx.jl](https://github.com/kbarbary/Dierckx.jl) and [GridInterpolations.jl](https://github.com/sisl/GridInterpolations.jl))." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Multivariate Interpolation\n", "\n", "Interpolating a regular multivariate function uses the same function" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "hide-output": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "interp_linear(3, 2) = 1.6094379124341003\n", "interp_linear(3.1, 2.1) = 1.6484736801441782\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "interp_cubic(3, 2) = 1.6094379124341\n", "interp_cubic(3.1, 2.1) = 1.6486586594237707\n" ] } ], "source": [ "f(x,y) = log(x+y)\n", "xs = 1:0.2:5\n", "ys = 2:0.1:5\n", "A = [f(x,y) for x in xs, y in ys]\n", "\n", "# linear interpolation\n", "interp_linear = LinearInterpolation((xs, ys), A)\n", "@show interp_linear(3, 2) # exactly log(3 + 2)\n", "@show interp_linear(3.1, 2.1) # approximately log(3.1 + 2.1)\n", "\n", "# cubic spline interpolation\n", "interp_cubic = CubicSplineInterpolation((xs, ys), A)\n", "@show interp_cubic(3, 2) # exactly log(3 + 2)\n", "@show interp_cubic(3.1, 2.1) # approximately log(3.1 + 2.1);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "See [Interpolations.jl documentation](https://github.com/JuliaMath/Interpolations.jl#convenience-notation) for more details on options and settings." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Linear Algebra" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Standard Library\n", "\n", "The standard library contains many useful routines for linear algebra, in\n", "addition to standard functions such as det(), inv(), factorize(), etc.\n", "\n", "Routines are available for\n", "\n", "- Cholesky factorization \n", "- LU decomposition \n", "- Singular value decomposition, \n", "- Schur factorization, etc. \n", "\n", "\n", "See [here](https://docs.julialang.org/en/v1/stdlib/LinearAlgebra/) for further details." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## General Tools" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### LaTeXStrings.jl\n", "\n", "When you need to properly escape latex code (e.g. for equation labels), use [LaTeXStrings.jl](https://github.com/stevengj/LaTeXStrings.jl)." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "hide-output": false }, "outputs": [ { "data": { "text/latex": [ "an equation: $1 + \\alpha^2$" ], "text/plain": [ "L\"an equation: $1 + \\alpha^2$\"" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "using LaTeXStrings\n", "L\"an equation: $1 + \\alpha^2$\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### ProgressMeter.jl\n", "\n", "For long-running operations, you can use the [ProgressMeter.jl](https://github.com/timholy/ProgressMeter.jl) package.\n", "\n", "To use the package, you simply put a macro in front of for loops, etc.\n", "\n", "From the documentation" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "hide-output": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\r", "\u001b[32mComputing... 12%|████▋ | ETA: 0:00:08\u001b[39m" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", "\u001b[32mComputing... 36%|██████████████ | ETA: 0:00:04\u001b[39m" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", "\u001b[32mComputing... 56%|█████████████████████▉ | ETA: 0:00:03\u001b[39m" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", "\u001b[32mComputing... 76%|█████████████████████████████▋ | ETA: 0:00:01\u001b[39m" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", "\u001b[32mComputing... 96%|█████████████████████████████████████▌ | ETA: 0:00:00\u001b[39m" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", "\u001b[32mComputing...100%|███████████████████████████████████████| Time: 0:00:05\u001b[39m\n" ] } ], "source": [ "using ProgressMeter\n", "\n", "@showprogress 1 \"Computing...\" for i in 1:50\n", " sleep(0.1) # some computation....\n", "end" ] } ], "metadata": { "date": 1591310622.6320398, "download_nb": 1, "download_nb_path": "https://julia.quantecon.org/", "filename": "general_packages.rst", "filename_with_path": "more_julia/general_packages", "kernelspec": { "display_name": "Julia 1.4.2", "language": "julia", "name": "julia-1.4" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "1.4.2" }, "title": "General Purpose Packages" }, "nbformat": 4, "nbformat_minor": 2 }