{
"cells": [
{
"cell_type": "markdown",
"id": "private-handle",
"metadata": {},
"source": [
"# Method of Simulated Moments (MSM)\n",
"\n",
"This tutorial shows you how to do a Method of Simulated Moments estimation in estimagic. The Method of Simulated Moments (MSM) is a nonlinear estimation principle that is very useful for fitting complicated models to the data. The only ingredient required is a function that simulates the model outcomes you observe in some empirical dataset. \n",
"\n",
"In the tutorial here, we will use a simple linear regression model. This is the same model which we use in the tutorial on maximum likelihood estimation.\n",
"\n",
"Throughout the tutorial, we only talk about MSM estimation. However, the more general case of indirect inference estimation works exactly the same way. \n",
"\n",
"\n",
"## Steps of MSM estimation\n",
"\n",
"1. Load (simulate) empirical data \n",
"2. Define a function to calculate estimation moments on the data \n",
"3. Calculate the covariance matrix of the empirical moments (with ``get_moments_cov``)\n",
"4. Define a function to simulate moments from the model \n",
"5. Estimate the model, calculate standard errors, do sensitivity analysis (with ``estimate_msm``)\n",
"\n",
"## Example: Estimate the parameters of a regression model\n",
"\n",
"The model we consider here is a simple regression model with only one explanatory variable (plus a constant). The goal is to estimate the slope coefficients and the error variance from a simulated data set.\n",
"\n",
"The estimation mechanics are exactly the same for more complicated models. A model is always defined by a function that can take parameters (here: the mean, variance and lower_cutoff and upper_cutoff) and returns a number of simulated moments (mean, variance, soft_min and soft_max of simulated exam points).\n",
"\n",
"### Model:\n",
"\n",
"$$ y = \\beta_0 + \\beta_1 x + \\epsilon, \\text{ where } \\epsilon \\sim N(0, \\sigma^2)$$\n",
"\n",
"We aim to estimate $\\beta_0, \\beta_1, \\sigma^2$."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "dirty-slovakia",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"\n",
"import estimagic as em\n",
"\n",
"rng = np.random.default_rng(seed=0)"
]
},
{
"cell_type": "markdown",
"id": "annoying-guard",
"metadata": {},
"source": [
"## 1. Simulate data"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "fdaf1542",
"metadata": {},
"outputs": [],
"source": [
"def simulate_data(params, n_draws, rng):\n",
" x = rng.normal(0, 1, size=n_draws)\n",
" e = rng.normal(0, params.loc[\"sd\", \"value\"], size=n_draws)\n",
" y = params.loc[\"intercept\", \"value\"] + params.loc[\"slope\", \"value\"] * x + e\n",
" return pd.DataFrame({\"y\": y, \"x\": x})"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "f965ccdc",
"metadata": {},
"outputs": [],
"source": [
"true_params = pd.DataFrame(\n",
" data=[[2, -np.inf], [-1, -np.inf], [1, 1e-10]],\n",
" columns=[\"value\", \"lower_bound\"],\n",
" index=[\"intercept\", \"slope\", \"sd\"],\n",
")\n",
"\n",
"data = simulate_data(true_params, n_draws=100, rng=rng)"
]
},
{
"cell_type": "markdown",
"id": "20a94f52",
"metadata": {},
"source": [
"## 2. Calculate Moments"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "diverse-validation",
"metadata": {},
"outputs": [],
"source": [
"def calculate_moments(sample):\n",
" moments = {\n",
" \"y_mean\": sample[\"y\"].mean(),\n",
" \"x_mean\": sample[\"x\"].mean(),\n",
" \"yx_mean\": (sample[\"y\"] * sample[\"x\"]).mean(),\n",
" \"y_sqrd_mean\": (sample[\"y\"] ** 2).mean(),\n",
" \"x_sqrd_mean\": (sample[\"x\"] ** 2).mean(),\n",
" }\n",
" return pd.Series(moments)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "short-flood",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"y_mean 1.868333\n",
"x_mean 0.081097\n",
"yx_mean -0.723189\n",
"y_sqrd_mean 5.227749\n",
"x_sqrd_mean 0.932272\n",
"dtype: float64"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"empirical_moments = calculate_moments(data)\n",
"empirical_moments"
]
},
{
"cell_type": "markdown",
"id": "italic-baptist",
"metadata": {},
"source": [
"## 3. Calculate the covariance matrix of empirical moments\n",
"\n",
"The covariance matrix of the empirical moments (``moments_cov``) is needed for three things:\n",
"1. to calculate the weighting matrix\n",
"2. to calculate standard errors\n",
"3. to calculate sensitivity measures\n",
"\n",
"We will calculate ``moments_cov`` via a bootstrap. Depending on your problem, there can be other ways to calculate the covariance matrix."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "rocky-willow",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" y_mean | \n",
" x_mean | \n",
" yx_mean | \n",
" y_sqrd_mean | \n",
" x_sqrd_mean | \n",
"
\n",
" \n",
" \n",
" \n",
" | y_mean | \n",
" 0.018798 | \n",
" -0.009677 | \n",
" -0.016273 | \n",
" 0.064690 | \n",
" -0.001008 | \n",
"
\n",
" \n",
" | x_mean | \n",
" -0.009677 | \n",
" 0.010296 | \n",
" 0.018855 | \n",
" -0.035908 | \n",
" 0.001664 | \n",
"
\n",
" \n",
" | yx_mean | \n",
" -0.016273 | \n",
" 0.018855 | \n",
" 0.054389 | \n",
" -0.084103 | \n",
" -0.009772 | \n",
"
\n",
" \n",
" | y_sqrd_mean | \n",
" 0.064690 | \n",
" -0.035908 | \n",
" -0.084103 | \n",
" 0.264784 | \n",
" 0.007958 | \n",
"
\n",
" \n",
" | x_sqrd_mean | \n",
" -0.001008 | \n",
" 0.001664 | \n",
" -0.009772 | \n",
" 0.007958 | \n",
" 0.012245 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" y_mean x_mean yx_mean y_sqrd_mean x_sqrd_mean\n",
"y_mean 0.018798 -0.009677 -0.016273 0.064690 -0.001008\n",
"x_mean -0.009677 0.010296 0.018855 -0.035908 0.001664\n",
"yx_mean -0.016273 0.018855 0.054389 -0.084103 -0.009772\n",
"y_sqrd_mean 0.064690 -0.035908 -0.084103 0.264784 0.007958\n",
"x_sqrd_mean -0.001008 0.001664 -0.009772 0.007958 0.012245"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"moments_cov = em.get_moments_cov(\n",
" data, calculate_moments, bootstrap_kwargs={\"n_draws\": 5_000, \"seed\": 0}\n",
")\n",
"\n",
"moments_cov"
]
},
{
"cell_type": "markdown",
"id": "hearing-dairy",
"metadata": {},
"source": [
"``get_moments_cov`` mainly just calls estimagic's bootstrap function. See our [bootstrap_tutorial](../../how_to_guides/inference/how_to_do_bootstrap_inference.ipynb) for background information. \n",
"\n"
]
},
{
"cell_type": "markdown",
"id": "worldwide-whole",
"metadata": {},
"source": [
"## 4. Define a function to calculate simulated moments\n",
"\n",
"In a real world application, this is the step that would take most of the time. However, in our very simple example, all the work is already done by numpy."
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "creative-pittsburgh",
"metadata": {},
"outputs": [],
"source": [
"def simulate_moments(params, n_draws=10_000, seed=0):\n",
" rng = np.random.default_rng(seed)\n",
" sim_data = simulate_data(params, n_draws, rng)\n",
" sim_moments = calculate_moments(sim_data)\n",
" return sim_moments"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "casual-stream",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"y_mean 1.996739\n",
"x_mean 0.006312\n",
"yx_mean -0.997919\n",
"y_sqrd_mean 5.999877\n",
"x_sqrd_mean 0.996197\n",
"dtype: float64"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"simulate_moments(true_params)"
]
},
{
"cell_type": "markdown",
"id": "sustainable-collectible",
"metadata": {},
"source": [
"## 5. Estimate the model parameters\n",
"\n",
"Estimating a model consists of the following steps:\n",
"\n",
"- Building a criterion function that measures a distance between simulated and empirical moments\n",
"- Minimizing this criterion function\n",
"- Calculating the Jacobian of the model\n",
"- Calculating standard errors, confidence intervals and p-values\n",
"- Calculating sensitivity measures\n",
"\n",
"This can all be done in one go with the ``estimate_msm`` function. This function has sensible default values, so you only need a minimum number of inputs. However, you can configure almost any aspect of the workflow via optional arguments. If you need even more control, you can call the lower level functions, which the now famliliar``estimate_msm`` function is built on, directly. "
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "finite-david",
"metadata": {},
"outputs": [],
"source": [
"start_params = true_params.assign(value=[100, 100, 100])\n",
"\n",
"res = em.estimate_msm(\n",
" simulate_moments,\n",
" empirical_moments,\n",
" moments_cov,\n",
" start_params,\n",
" optimize_options=\"scipy_lbfgsb\",\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "outside-volleyball",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" value | \n",
" standard_error | \n",
" ci_lower | \n",
" ci_upper | \n",
" p_value | \n",
" free | \n",
" stars | \n",
"
\n",
" \n",
" \n",
" \n",
" | intercept | \n",
" 1.869534 | \n",
" 0.138186 | \n",
" 1.598695 | \n",
" 2.140374 | \n",
" 1.052737e-41 | \n",
" True | \n",
" *** | \n",
"
\n",
" \n",
" | slope | \n",
" -0.721958 | \n",
" 0.236188 | \n",
" -1.184878 | \n",
" -0.259038 | \n",
" 2.237811e-03 | \n",
" True | \n",
" *** | \n",
"
\n",
" \n",
" | sd | \n",
" 1.099789 | \n",
" 0.141133 | \n",
" 0.823173 | \n",
" 1.376405 | \n",
" 6.566135e-15 | \n",
" True | \n",
" *** | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" value standard_error ci_lower ci_upper p_value free \\\n",
"intercept 1.869534 0.138186 1.598695 2.140374 1.052737e-41 True \n",
"slope -0.721958 0.236188 -1.184878 -0.259038 2.237811e-03 True \n",
"sd 1.099789 0.141133 0.823173 1.376405 6.566135e-15 True \n",
"\n",
" stars \n",
"intercept *** \n",
"slope *** \n",
"sd *** "
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"res.summary()"
]
},
{
"cell_type": "markdown",
"id": "incident-government",
"metadata": {},
"source": [
"## What's in the result?\n",
"\n",
"`MomentsResult` objects provide attributes and methods to calculate standard errors, confidence intervals and p-values. For all three, several methods are available. You can even calculate cluster robust standard errors.\n",
"\n",
"A few examples are:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "caring-scale",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" value | \n",
" lower_bound | \n",
"
\n",
" \n",
" \n",
" \n",
" | intercept | \n",
" 1.869534 | \n",
" -inf | \n",
"
\n",
" \n",
" | slope | \n",
" -0.721958 | \n",
" -inf | \n",
"
\n",
" \n",
" | sd | \n",
" 1.099789 | \n",
" 1.000000e-10 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" value lower_bound\n",
"intercept 1.869534 -inf\n",
"slope -0.721958 -inf\n",
"sd 1.099789 1.000000e-10"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"res.params"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "9fc88986",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" intercept | \n",
" slope | \n",
" sd | \n",
"
\n",
" \n",
" \n",
" \n",
" | intercept | \n",
" 0.019095 | \n",
" -0.017086 | \n",
" -0.013917 | \n",
"
\n",
" \n",
" | slope | \n",
" -0.017086 | \n",
" 0.055785 | \n",
" 0.026761 | \n",
"
\n",
" \n",
" | sd | \n",
" -0.013917 | \n",
" 0.026761 | \n",
" 0.019919 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" intercept slope sd\n",
"intercept 0.019095 -0.017086 -0.013917\n",
"slope -0.017086 0.055785 0.026761\n",
"sd -0.013917 0.026761 0.019919"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"res.cov(method=\"robust\")"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "d7dbe79c",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" value | \n",
" lower_bound | \n",
"
\n",
" \n",
" \n",
" \n",
" | intercept | \n",
" 0.138186 | \n",
" -inf | \n",
"
\n",
" \n",
" | slope | \n",
" 0.236188 | \n",
" -inf | \n",
"
\n",
" \n",
" | sd | \n",
" 0.141133 | \n",
" 1.000000e-10 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" value lower_bound\n",
"intercept 0.138186 -inf\n",
"slope 0.236188 -inf\n",
"sd 0.141133 1.000000e-10"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"res.se()"
]
},
{
"cell_type": "markdown",
"id": "blind-tractor",
"metadata": {},
"source": [
"## How to visualize sensitivity measures?\n",
"\n",
"For more background on the sensitivity measures and their interpretation, check out the [how to guide](../../how_to_guides/miscellaneous/how_to_visualize_and_interpret_sensitivity_measures.ipynb) on sensitivity measures. \n",
"\n",
"Here, we just show you how to plot them:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "fleet-qatar",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA4QAAAH0CAYAAABl8+PTAAAgAElEQVR4XuydB5hV1b2+fwqIiBENuRIF7BcVhSBqbLFiubZrR8Xeu4ldr157L7GLvRt7xb+9ROxdQaOAEilJRKUKSJX/8y1zuMMw5cxhhnXmO+9+Hp8E5py99u/9zlmsd6219ywwa9asWcEBAQhAAAIQgAAEIAABCEAAAhVHYAGEsOIyp2AIQAACEIAABCAAAQhAAAKJAELIBwECEIAABCAAAQhAAAIQgECFEkAIKzR4yoYABCAAAQhAAAIQgAAEIIAQ8hmAAAQgAAEIQAACEIAABCBQoQQQwgoNnrIhAAEIQAACEIAABCAAAQgghHwGIAABCEAAAhCAAAQgAAEIVCgBhLBCg6dsCEAAAhCAAAQgAAEIQAACCCGfAQhAAAIQgAAEIAABCEAAAhVKACGs0OApGwIQgAAEIAABCEAAAhCAAELIZwACEIAABCAAAQhAAAIQgECFEkAIKzR4yoYABCAAAQhAAAIQgAAEIIAQ8hmAAAQgAAEIQAACEIAABCBQoQQQwgoNnrLrJrD22mvH/vvvH0cddRSoIAABCJQNAfqmsomCC4FARRM4++yz4913341nn322ojm4FI8QuiRJHY1K4LHHHouVV145VltttaLPu84668Sjjz4anTp1Kvo9OV947733xoABA+LSSy/NeRm0DQEINIAAQtgAWLwUAhBoMgIIYZOhzXJihDALdhp1I/DPf/4zNt5443j11VdLFsLp06dHq1at5huaU089NX7++WeEcL4RpyEIzDsBhHDeGXIGCEBg3gkghPPOsJzOgBCWUxpcS9kQqDrouu++++Kaa66J22+/Pc4888wYNGhQ/OY3v4mjjz46dt1117RlYu+995597b169Yobb7wxZsyYEdddd11otfGHH36IpZZaKm1D3WeffdJrv/zyy9h+++3j1ltvjYsvvjgWWmihePLJJ9PPHnnkkbjppptCotmxY8c49NBDU1uFo1+/fqmNv//97/GrX/0qttlmmzjllFNi4YUXTi/p0aNHHHnkkfHNN9/Ec889F5LNP/zhD3HhhRfGEkssEXvttVe89957s8+ndrt27Vo2/LkQCFQqgffffz/+/Oc/p/5BEzarrLJKnHDCCfH73/8+IakuhB9++GFcfvnlMXDgwFhwwQWje/fucfLJJ6f/1aF+6/rrr0992Pnnnx/Dhg2LDh06xJ/+9KfYYYcdiu5TKjUP6oZAJRCor98ZNWpU/M///E+88847aczRp0+fGDNmDFtGjT4cCKFRmJTSeASqDroeeuihOOecc2LdddeN008/PTp37pxE7+abb04rgu3bt48XX3wx/vjHPyahW2aZZWLRRReNc889Nx5++OHQLNqaa64Zb731VhqQnXXWWbH77rvH119/Hf/1X/8Vv/vd75Kgrbrqqmnw98wzz8Rxxx0Xxx9/fGywwQahjloid+2116bXS/COOeaYJIm77LJLjBgxIs4444w0UNRAUsdaa62VBoc6x8477xxfffVVHHLIIbHGGmuka//xxx+TmC633HJJctu1axctWrRoPICcCQIQaDCByZMnp+/8dtttF/vtt196v7Z2ayv6G2+8kb6nVfsmTQjptZqEOvzww2PWrFmpn9CgTf3Eb3/727j77rtT/6Et7ep/NCGkPkCi+NRTT6U+p5g+pcHF8AYIQKBZECim39l3331j6NChaUfRkksumfqlF154IfVJ3EPYLGKu9yIRwnoR8YJKJFBdCCWCf/nLX9JgTMe3334bG264Ydxyyy2xySabRP/+/eOggw6avWVUwqUBmKRNM/GFQzNsEjwJpGbqN9988zj44IPT6l7hkORpVVAz+oWj0AlrhVE/19bSBx54YPbPJaInnnhivP7662kQqOtcccUV53iNVhyvvPLK+Oijj2KRRRZJK44rrLACW0Yr8QNOzWVJoLBroGpfo50G+s5269Yt2rRpM4cQXnDBBWk3wdtvvz17d8C4ceNi/fXXT5NGRxxxRNxzzz1pcuquu+5Kf69DOwbUR2hng/qNYvqUsgTGRUEAAvNMoL5+Z/z48Wm8o8njwg4n7V7YbLPNUp+EEM5zBGVxAoSwLGLgIsqNQE1C+PHHH6eVPx2TJk1K2zK1VUvbrqoLobZjatVPs2gSw8JREDf9fMKECUkIJX5bb711eok6WW3d1BYxrehVP2bOnJkedKPtoMcee+zsHxcEVTP/W221VRrs7bTTTmmLR+F45ZVX4rDDDgttN9WqAEJYbp86rqfSCUybNi3++7//O/UvkjVt81Z/sMACC8xGU7Vv2nPPPdPKvvqZqod2EnTp0iX1LQUhrNp/6bU77rhjLL300mlFsZg+pdKzoX4IuBKor995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jxA2q7i42AogcPjhh8fWW28dO+ywQ7OqFiFsVnFxsRVA4I477oghQ4bEhRde2KyqRQibVVxcbAUTqGgh/Pnnn2PBBRecK/5KE8LJM6bFyEnjYvSUidFp0SWic9slKvgrQekQKI1ATf1JpQrh4PHfhfqV9gu3pT8p7ePEuyqYwMyZM6NFixZzEEAIm/cHYvTUSTFi4thUROdFl4j2rds274K4ejsCZSWEO+64Yxx22GFpRl3Hyy+/HFdffXU89dRTtYJ//fXX46KLLoqpU6fGQgstFKecckpssskmMXLkyDjuuONi9OjRsdpqq4UGa5tttlnssssu0aNHj9BA7eabb4433ngjPvzwwzj77LNTB6yZ8dtvvz2eeeaZOlcIjzjiiOjatWsMGDAgzdrpvAsvvHC89tpr8d1336XrXnXVVWPixInp3J988km0atUq9tlnn+jTp0+qR+8988wzY8KECdG6des466yzYt11140vvvgiTj755Nh0003jgw8+SOfTzzbccMM6P4ClrBCqkzrvw2fip5nTZ5+79wo9o1fHVew+7BRUOQRK6UvUZ5x00knp+6b+Yvfdd0/9hPqWU089NfUT2jWw1lprxQ8//BCXXnpp6q/0vXv88cfTzP2KK644u99ZffXVY9KkSalPqWuF8M4770zf+WnTpsXgwYNjqaWWSn3EvffeG998800ce+yxoXp03HDDDfHEE0/EAgssEOutt15o9l393tixY9O1Dx06NF37AQccEPvtt196T8+ePdPPnn/++RgxYkTsuuuuof6rrqPUFUJJ4BUDXo6Rk34Z+Ojo0b5THNF1o8r58FGpFYHC+EL/jusYP358bLDBBtG/f//49a9/XWOt+i7ru/nRRx+F5G7NNddM/YPGCDfeeGPcd9990a5du9h5553jrrvuSuMGjTsGDRoUf/vb39IY5uijj57d76hP0DhmypQpda4QFsYOG2+8cbz33ntpbHHuueemcw8bNizWWWedNB7R8eqrr8bll18e06dPj86dO6dx1JJLLhmzZs1Kbbz00kupL9F79OeWLVuW1JewQhgxaPyo6Pt5/znGWeoT1TdyQKBcCJSVEKrTkgBp0KNDg7Dll18+DbpqOySP5513XhqkqTO85557UuelQdQyyywTJ554Yvp7DYL09xqY6bX6s+RRHd5GG20UF198cRIuddTnnHNO6uzr2jKqzlqd8y233JIGbbqOCy64IInhtddemwaVui79nQZrl112WYwbNy522mmn6Nu3b5JFXcv++++f/q5fv37pfS+88EIaFG6//fbp3Lq2p59+Ou6+++546KGH6vzclCKEdw5+O94e9fe5znvThr9IKwcEmiOBUvoSDZT+4z/+I4466qj48ccf47TTTkuDJE1I6TuovmXy5Mmp71Afov5Er9Wkk6ROg72q/Y4GdxrwFfqd2jjqvOoTnnvuuWjbtm0aDKov0vs0qDvjjDNSv6AB2hVXXJH6gUUWWSQNGDWBJPHTa3XNul6J7VZbbRWvvPJKdOjQIdZee+3YY4894oQTTohvv/02TYxJbtu0aVNrtKUK4cv/+DIeGvrRXOc9o+fWrBQ2xy8S1xyff/55HHjggfHmm28mKdLkj/69Vh9T26FbTh544IHUL0iwLrnkkthyyy2TBGqiSd/13/zmN3H88ceniWFNfuvf+Ouvvz4efvjhNHbRWETtaGLop59+it122y0JWV1bRgtjh/vvvz+9VpPi6od0zboOyd2LL76YJpTUR+gau3TpErfddlvqEzT20rVIFAsTT+rDNDG23XbbldSXzKsQfjluVPxz8rhm/Ul85R+D4vspE+eoQSuEF/6+ed1K0KxD4OLrJVBWQjhq1KjYfPPN46233koDHs2AP/LII6lzrO3QYEjSqA676us0UFKHrVU8HRrEaXVOEqYBkmRLK4Vff/11+tnHH3+cXqfVAM3sa+WxPiFUG3vvvXeaAVxllVXinXfeifbt28eTTz6Z7kHUTKBW+a688srUlg6JpwZ9xxxzTBJKrRpqZVICqVk9yas6df2jUbimL7/8Mg499NAkqYWjd+/ecyHR67Va2ZDj8gEvxZDx3831luO794qV23VoyKl4LQTKhkApfYkGQxr0aXW+W7dus7eT//GPf0zfX6266dDkjiZ5NDCTlOm1hUmr6v2OBnHqI+paIZQQSvw0IaRD8rbvvvvGNttskwROk036blefINMMvwZyGjDOmDEj/Scp1bHFFlukQagGhervtApR6Au1WqHBnlYFdKheTWpVPSS+WgEtvKfYYPsNGxhPDx8418uZDS+WIK8rRwKSJ03MaKJGcqRxisYNtR2a2P7Tn/6UJoXXX3/9tANIx1/+8pf077jGBjr0/zUBLQlTP6DvdEE0q/c7krQx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OH++EdXHcOv/doXYbplu86dxWrEgUFFCqE5RgqWOVcepp54ayy+/fBx88MGx8847x4knnpg65ptuuikefPDBWHDBBWsN+eijj44pU6bELbfckgZtkswLLrggieG1116bJO68885Lf6fB2mWXXRbjxo2LnXbaKXX0kkWJqORTf9evX7/0vhdeeCENCrfffvt07o022iiefvrpuPvuu+Ohhx5qEiEcPXVS/M97T8517uO794qV23Ww+KBTBAQak0Bj9iX33HNP6hMKA79NNtkkTf5oEKZB3RlnnJH6BQ3QrrjiitQPLLLIIqE+SBNI51T9cgAAIABJREFUEj+99scff0yDupEjR8ZWW20Vr7zySnTo0CHWXnvt2GOPPeKEE06Ib7/9NjbbbLP48MMPo02bNrUimVch/H7KjzFz1qzGRM65INAsCNzwef8Y9dOEOa51s6VXjt1XXLPG6//888/jwAMPjDfffDNJ1+OPP57GA+pjNIbQ91QTyRpbPPbYY0naajsKY4f7778/ydtxxx0XgwYNSueU6EnuXnzxxTShpD7igQceiC5dusRtt92W+gSNjTRRLlEsTDxpbHT44YfHdtttV1JfMq9COGbq5Jj284xmkX2uixw37ae44bPXYmo1Tkd03Sh6tO+U67Jot5kRqCghHDVqVGy++ebx1ltvpQGVZtgfeeSRWGaZZUKdsmbRZ86cmWbgVl657tWxwmBs7733Tu9ZZZVV4p133on27dvHk08+Gc8++2xacdQq35VXXhk9evRIH42LL744zfYdc8wxSSi1atiiRYskkJrV0wyfOvXdd989Pv744/QezQoeeuih0b9//9kfLw0iqx+aCdRqZUOPt0YNjbsGvzPX2zS7tP2yzDA1lCev9yfQmH2JvssSP00I6ZC87bvvvrHNNtskgdNkk/qCwgSWdjno0Ay/BnJaSZwxY0b6T7sUdGiHwyWXXJIGhRLCu+66K+1o0LHmmmumwZ5WBXRowkmTVlUPSafeX3hPQxN9dOjH8eHo4Q19G6+HQLMnMHrKpLlq+M92S8aJ3TevtTbJmSZ+NBEk+dI4RSv5kyZNShPHnTp1SgK355571slHYweNSdSf6NDYQxPR55xzTvpzr169Uj8jSSxIp/5e7ahf0DhIE+GTJ09O4xQduq6OHTumXQX19SVvv/12fPXVV3Nco0Rz/fXXj969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tthii9hrr71qTeyII46Irl27xoABA2LIkCGxyy67xMILLxyvvfZafPfdd3H11VfHqquuGhMnToyzzz47Pvnkk2jVqlXss88+0adPn3RevffMM8+MCRMmROvWreOss86KddddN7744os4+eSTY9NNN40PPvggnU8/23DDDev8BJUihP2GDYynhw+c47z7dVk31mcgV37fVq6o7AmU0pfceeed6Ts/bdq0GDx4cCy11FKpj7j33nvjm2++iWOPPTZ23HHHVPsNN9wQTzzxRCywwAKx3nrrhQZbCy20UIwdOzZOOumkGDp0aPz8889xwAEHxH777Zfe07Nnz/Sz559/PkaMGBG77rprqP+q6yhFCDWx1Pdv/ec47WZLrxy7r7hm2efGBUKg3Ah8+umncfTRR8dzzz0Xbdu2Td/9L7/8Mq655ppaL7Uwdth4443jvffeS2OLc889N26//fYYNmxYrLPOOmk8ouPVV1+Nyy+/PKZPnx6dO3eOiy66KJZccsmYNWtWXHjhhfHSSy+lvkTv0Z9btmxZUl9SihBKBv/nvSfnqLNLuyXjhO6bl1tMXA8EbAgghBExc+bM2HnnnePEE0+MqVOnxk033RQPPvhgLLjggrUGrY56ypQpccstt6RB29Zbbx0XXHBBEsNrr702Sdx5552X/k6DtcsuuyzGjRsXO+20U/Tt2zfJ4g477JDkU3/Xr1+/9L4XXnghDQq33377dO6NNtoonn766bj77rvjoYcemn09P/zww1zXpgGi5LQhx2Gv/2Wul2uV8EQ63oZg5LUQSARK6Uvuueee1CcUBn6bbLJJmvzRIEyDujPOOCP1CxqgXXHFFakfWGSRRdJgURNIEj+99scff0yDupEjR8ZWW20Vr7zySnTo0CHWXnvt2GOPPeKEE06Ib7/9NjbbbLP48MMPo02bNuma1S/NmDFjjgQllJdcckma9Cr2uHzAS7NXB6u+56YNf5kA44AABBpGQGMIfU81kayxxWOPPZakrbajMHa4//77k7wdd9xxMWjQoHj88ceT6EnuXnzxxTShpD7igQceiC5duqRJcfUJks6XX345iWJh4kljo8MPPzy22267evsSTYBrXFT10NhnzTXXjN69exddfE0T1Xrz8d17sYOpaIq8EAINI4AQ/pvX559/nmbRNaDTDNzKK9e9PaEwGNt7773Te1ZZZZV4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dupo37ptk9aKEEbEjjvuGIcddlhsvfXWCfbLL78cV199dTz11FO1wj/iiCOia9euMWDAgBgyZEjssssusfDCC8drr70W3333XXr/qquuGhMnToyzzz47Pvnkk2jVqlXss88+0adPn3RevffMM8+MCRMmROvWreOss86KddddN7744os4+eSTY9NNN40PPvggnU8/23DDDev8MCCETfpd4eTGBF7+x5fx0NCPZlfYpd2ScUL3zRtccSl9yZ133pm+89OmTYvBgwfHUkstlfqIe++9N7755ps49thjUx+l44YbbognnngiFlhggVhvvfVCg62FFlooxo4dGyeddFIMHTo0fv755zjggANiv/32S+/p2bNn+tnzzz8fI0aMiF133TXUf9V1NKYQ6h+zGz7vHyMnjU1NtmnRKo5YbaNYuV2HBvPlDRCoFAIXXXRRTJ06NY0fdIwfPz422GCD6N+/f/z617+uEUNh7LDxxhvHe++9l8YW5557btx+++0xbNiwWGeddWaf79VXX43LL788pk+fHp07dw61t+SSS8asWbPiwgsvjJdeein1JXqP/tyyZcuS+hKEsFI+sdTZ2ARGTBobfT/vH1WFUP92NtWkKkIYkTpLiZcGWzpOPfXUWH755ZMk1nYcffTRMWXKlLjlllvSoE0yecEFFyQxvPbaa5PEnXfeeenvNFi77LLLYty4cbHTTjtF3759kyzusMMOsf/++6e/69evX3rfCy+8kAaF22+/fTr3RhttFE8//XTcfffd8dBDDzWZEE77eWYMnzgmZvz8c2N/pjkfBMqawITpU+K2L9+c6xp7r9AzenVcpUHXXkpfcs8996Q+4bnnnou2bdvGJptskiZ/NAjToO6MM85I/YIGaFdccUXqBxZZZJFQH6QJJImfXvvjjz+mQd3IkSNjq622ildeeSU6dOgQa6+9duyxxx5xwgknxLfffhubbbZZfPjhh9GmTZtaa5tXIRw64YdQn6LjyWEDYuiE7+doSzOdF/5+hwax5cUQqCQCn3/+eRx44IHx5ptvJhl7/PHH0zhBfUxtR2HscP/99yd5O+6442LQoEHpvRI9yd2LL76YJpTURzzwwAPRpUuXuO2221KfoDGQJsQlioWJp5133jkOP/zw2G677UrqS+ZVCDUonjR9WiVFT60QyPJvJ0IYEaNGjYrNN9883nrrrTTQ0sz7I488Essss0ydQqjB2N577x0zZ86MVVZZJd55551o3759PPnkk/Hss8/GjTfemFb5rrzyyujRo0c618UXX5wGfcccc0wSSq0atmjRIgmkZvU0w6dOfffdd4+PP/44vefLL7+MQw89NM0MFg4NEqsfDz74YFqtLOWYMnN6XPPZX2PYj6NLeTvvgUCzJTArZsXMWbPmuv71Oiwf+3dZr0F1ldKXSAglfpoQ0iF523fffWObbbZJAqfJJvUF1SeqNMOvgZxWEmfMmJH+0y4FHVtssUVccsklaVAoIbzrrrvSjgYda665ZhrsaVVAx/XXXx//+te/5qjz008/Te8vvKdBECLiviHvxVujhqa3pUmmBeY+w00b/rJTggMCEKiZgKRN/9ZrgkhSpnGKVvhrOzR20JhE/YkOjT00EX3OOeekP/fq1Sv1M5LEqnI5adKk1C9IQhdccMGYPHlyGqfoUPsdO3ZMuwrq60vUr2hyveqhCXGNbXr37l1SzG98+3Xc/9X7Jb2XN0GgOROYoUnVBeb+x7Op/u1ECP/9aVEnqm1ZnTp1iksvvTQee+yxOj9Hmp2X7GlFUIe2a2pbqDpRrehJCrXC171791hsscWS9OnQtrBtt902dbJ6XdXBnGRQHbU6dc0MvvHGG+k91f+sv5N8Vj+0HXVehPDhoR/HvyaPb87fH64dAg0m8NPM6fHPSePmet92y3SL7Zft1uDzNbQvkRAOHDgw9Ts69tprrzjooIPSSt7333+fBnHaXn7IIYekPkaTVjq0nUsTUBqEffbZZ3HVVVfFmDFj0oBOk0jairrWWmulQZwmuJZddtn0vup/VtsaEFY9tLNhXoTwmeGfxWdjf5HMf0waF5pwqn401T9qDQ6MN0CgTAlI3oYPH562fa6//vrx17/+Ndq1a1fr1WqsoH5Ct67ouOaaa9J3+7TTTkt/3nLLLdMug3fffTf9bIkl/u9+Xu0w0LZyjVU0cf3111+nlUTtONDY4qijjqq3L9GWdU1uVz0efvjhtDJZqhB+8MPweOUfg8o0IS4LAk1HYMTEMbN32lRtpan+7UQI/01Z27C0ZWu55ZZLs2EakNV1FCuEhRm56jPtmvnXzySOK620UloJ0CxasUJY07VxD2HTfTE5sy8BPejkvI+ejTH/vnG7UOnx3XuVdJ9bQ/uSYoVQW6/0Hdf9gdUPrQhqF8Fuu+2WfqS+RUJXjBDWlOy8bhmtes5+wwbG08MHztHM79p3iiO7buT7oaIyCDQCAd33p4lqCaFW9G6++eY6z1qsEErcCruYqp9Qk9WauNb2c8mh+h2NiYoRwpoubl63jDYCRk4BgWZJoKZ/O0vZuVRs8Qjhv0nphm0JmWbfNZu+9NJLN4oQ6t6en376KXXo2tKlewk12NKDILSSoFVAdbras3/rrbemlQLNCNa3QogQFvsR53UQqJ+AbtruN2xA/DBlUnrCaK+OK5ckg2qpoX1JsUKoe3u0YqBdBYsuumi6/0dbzrVLQat+d9xxR6y++uppkkkPotCDrXQPcn0rhE0thDq/to8WtpDqYTLiW+lPcq3/U8krIBDpGQOjR49O9wDruQN1HcUKoR5cpZ1Kus1Ek+DagaCdBnrInSa711hjjTQprl1LRx55ZNq+rgdTldKXIIR8iiFQOgFJ4aDxo9IJmvrfToSwSk7ao68tV/U9vEVvKXaFUE8Z1f79jz76KAmhtpmefvrpaSCnDlZ7/RdffPF0f5C2cOh+xPPPPx8hLP37wzshkJ1AQ/qSYoVQRenhM9rOrr5ED77SLL4eHHPfffele5Ylitqapft29Dr1ZRpE1rVldH4IYfZAuAAINFMCmujRhLG2eer73RhC2K1btyg8ZVTPMtCtLpJB7SjQWEVjE41RdMuLdh+ccsopaTJb45SG9iUIYTP94HHZFUcAIawSubZK6OmfuoenOR5sGW2OqXHNjgSae1/SmFtGHfOlJgjMLwLaKqong2rCuDkeCGFzTI1rrkQCCOG/U9fDWLRNU/vq65uFK9cPCkJYrslwXZVEwKEvQQgr6RNLreVKQDuM9MRxbQHXds3meCCEzTE1rrkSCSCEEWkrxKOPPpq2auqxzjp007Vuoq7pWHHFFeO6664ru88LQlh2kXBBFUbApS9BCCvsg0u5ZUdAq4KSqT59+qTfJ1g49OAoiWJNh57oWW4T2ghh2X20uCAI1EgAITT6YCCERmFSCgQyEkAIM8KnaQgYEUAIjcKkFGsCCKFRvAihUZiUAoGMBBDCjPBpGgJGBBBCozApxZoAQmgUL0JoFCalQCAjAYQwI3yahoARAYTQKExKsSaAEBrFixAahUkpEMhIACHMCJ+mIWBEACE0CpNSrAkghEbxIoRGYVIKBDISQAgzwqdpCBgRQAiNwqQUawIIoVG8CKFRmJQCgYwEEMKM8GkaAkYEEEKjMCnFmgBCaBQvQmgUJqVAICMBhDAjfJqGgBEBhNAoTEqxJoAQGsWLEBqFSSkQyEgAIcwIn6YhYEQAITQKk1KsCSCERvEihEZhUgoEMhJACDPCp2kIGBFACI3CpBRrAgihUbwIoVGYlAKBjAQQwozwaRoCRgQQQqMwKcWaAEJoFC9CaBQmpUAgIwGEMCN8moaAEQGE0ChMSrEmgBAaxYsQGoVJKRDISAAhzAifpiFgRAAhNAqTUqwJIIRG8SKERmFSCgQyEkAIM8KnaQgYEUAIjcKkFGsCCKFRvAihUZiUAoGMBBDCjPBpGgJGBBBCozApxZoAQmgUL0JoFCalQCAjAYQwI3yahoARAYTQKExKsSaAEBrFixAahUkpEMhIACHMCJ+mIWBEACE0CpNSrAkghEbxIoRGYVIKBDISQAgzwqdpCBgRQAiNwqQUawIIoVG8CKFRmJQCgYwEEMKM8GkaAkYEEEKjMCnFmgBCaBQvQmgUJqVAICMBhDAjfJqGgBEBhNAoTEqxJoAQGsWLEBqFSSkQyEgAIcwIn6YhYEQAITQKk1KsCSCERvEihEZhUgoEMhJACDPCp2kIGBFACI3CpBRrAgihUbwIoVGYlAKBjAQQwozwaRoCRgQQQqMwKcWaAEJoFC9CaBQmpUAgIwGEMCN8moaAEQGE0ChMSrEmgBAaxYsQGoVJKRDISAAhzAifpiFgRAAhNAqTUqwJIIRG8SKERmFSCgQyEkAIM8KnaQgYEUAIjcKklP/f3p3H2nD+cRz/2pcg1gRBLLEvIcQWe5OiJQhatNRSe6iIvUEttcRS5Vr+sK9NbYmoitCmdrXvu9S+E9pUU1TzffK7N9yf23ud88yd+zznPf9IrnO+zzOv55yZ+cw8M8drAQKhR8NLIPRoMFkVBEIUIBCGiE/TCHgkQCD0aDBZFa8FCIQeDS+B0KPBZFUQCFGAQBgiPk0j4JEAgdCjwWRVvBYgEHo0vARCjwaTVUEgRAECYYj4NI2ARwIEQo8Gk1XxWoBA6NHwEgg9GkxWBYEQBQiEIeLTNAIeCRAIPRpMVsVrAQKhR8NLIPRoMFkVBEIUIBCGiE/TCHgkQCD0aDBZFa8FCIQeDS+B0KPBZFUQCFGAQBgiPk0j4JEAgdCjwWRVvBYgEHo0vARCjwaTVUEgRAECYYj4NI2ARwIEQo8Gk1XxWoBA6NHwEgg9GkxWBYEQBQiEIeLTNAIeCRAIPRpMVsVrAQKhR8NLIPRoMFkVBEIUIBCGiE/TCHgkQCD0aDBZFa8FCIQeDa8GQhYEEAhHoGPHjjJ+/PhwGrfcqgbCs2fPWq5KOQQQSIlApUqVZOPGjSl5aZp/jQbCtWvXpvl+0kEEfBW4ePFiilaNQJgiJv9fFBcXJ0WKFJHWrVv7v7JpcA1PnTolCxculFmzZqXB3sVGlzTQzZ49WwoUKBAbKxzQWm7btk2OHTsmw4YNC6gFyv6XQJ8+fWTo0KFSqlQpoFJZ4MSJE7Js2TKZMWNGKrfsZ3O//fabTJw40ewbfV2aNm0qW7ZskQwZMni5ir5vj6ZNmyZVqlQRHUfXFwKh6yNoqf8EQkuQEZYhEEYIZ/FtBEI7mARCO46RVvH9ACxSl9R4H4HQrjKB0K5nGNV83x4RCMP4VNFmoAIEwkB5ky1OIEyWKPAXEAjtEBMI7ThGWsX3A7BIXVLjfQRCu8oEQrueYVTzfXtEIAzjU0WbgQoQCAPlTbY4gTBZosBfQCC0Q0wgtOMYaRXfD8AidUmN9xEI7SoTCO16hlHN9+0RgTCMTxVtBipAIAyUN9niBMJkiQJ/AYHQDjGB0I5jpFV8PwCL1CU13kcgtKtMILTrGUY137dHBMIwPlW0iQACCCCAAAIIIIAAAgggYFWAh8pY5aQYAggggAACCCCAAAIIIOCOAIHQnbGipwgggAACCCCAAAIIIICAVQECoVVOiiGAAAIIIIAAAggggAAC7ggQCN0ZK3qKAAIIIIAAAggggAACCFgVIBBa5XSv2F9//SVffvml/PTTT5ItWzb54osv5OOPP3ZvRRzp8S+//CLjx4+X+/fvS7Vq1WTGjBmSP3/+N3r/999/S8WKFSVz5swJf3/vvfdk9uzZjqyle93ctGmTjB49WqZMmSLNmzd3bwXSSI8XLFggS5YskefPn0vLli1lzJgxkiFDhjTSO3+6ce3aNRk6dKicOXNGihQpIpMmTTLbk8RLu3btzGvSpUtn/itnzpyyf/9+fyDS0Jq8ePHCbM8XLlwoBw4ckLx586ah3rnXlZTsK11Zq1j9vvq0X9Xt6IABA6R+/fry1VdfvfWjp08cXbRo0Rv7vPXr10u5cuWc+KgSCJ0YpuA6+c0335gDhlmzZsndu3elU6dOsnz5cilTpkxwjcZo5adPn0qTJk2Mda1atWT69Oly+/bt/wt6GhY//PBD+fXXX2NUKnVXe/HixcZa3T///HMCYYT8e/fulZEjR8qqVaskd+7c0rNnT2nRooV88sknEVbkbUkJdOjQwRyY9OrVS37++WeZMGGCOamXKVOmN97y/vvvy9y5c6V06dJgBiygj9evUKGC8d63bx+BMArvlO4ro2giVd8ai99Xn/arR44cMSFQj4tz5MiRZCDUk8ply5aVTz/9NFU/X7YaIxDaknS0TrNmzcxVkapVq5o10DPNehZZz4Sw2BXYsmWLrFu3TnRDqcvvv/8uderUEd3YvH418MqVK+ZgeseOHXY7QLW3CugJkfLly8tnn30m+luEXCGM7IMyduxYKVy4sPTu3dsU0M+vXi1cuXJlZAV511sFHj58aE4sHT58WDJmzGhe06pVKzPTo2bNmm+8R7cvGzdulIIFC6IZsIBuRzQQ6gEhgTA67JTuK6NrJXXeHavfV5/2q1evXjUzuZYuXWpOHCd1hXDQoEHSuHFjsz12cSEQujhqFvusB8K689Iz+rqsWbNGDh48KDNnzrTYCqVUYN68efLgwQMzjS5+0QM2NS9evHjC344dOyb9+vWTkiVLyoULF8wBhk4zLVGiBJABCnTp0oVAGIWvBmqdYdC0aVNTRU9sdO7cWfbs2RNFVd6aWECDoG5Dfvjhh4T/0gMR3ZYknu6vU88bNWokhw4dknz58plppnrAwhKcAIEwetuU7iujbyn4CrH+ffVpv6pX//8rEHbv3t18oC5evCjp06cXvTLct2/f4D9kllogEFqCdLGM3uejZzRPnDhh7h/UZcOGDbJt2zbRe4FY7Aro/SV6n8nw4cMTCuvBmu78dBzil0uXLpkrK3owraEwLi7OXG15/QDQbs+opgI+7bjCGNGPPvrInMjQz7QuN2/eNFNGjx49GkZ3vG1z9+7d5oSdbqvjF92m6H0q3bp1S/jbP//8Y6bw6rTRBg0ayM6dO2Xw4MGydetWKVSokLc+Ya8YgTD6EUjpvjL6loKvEOvfV5/2q8kFwvnz55tjaT0xp/s/3R7rzA2diefCQiB0YZQC7KNeIdQDhQIFCphWli1bJsePH+cKYQDmurG4deuWud8nfqlevbroTcevXyFM3LSGyCpVqph7hJj6FcDA/K+kTzuu4JSSrty1a1fRh5hoCNTl3Llz0qNHD64QWh4MnWI+YsQIc+IuftEg3rBhw2QfCKYnmXSMXJ3SZJkykHIEwuhZI91XRt+y/Qqx/n31ab+aXCBM/OnRk/l6zKe3YrmwEAhdGKUA+/jBBx+I3vujDznRRW+K1dDRv3//AFuNzdJ6Zn7FihXmoRu63Lt3T/TpoTql5PV7CPXvT548SXgQhD51VAOhPrSDJ9cF99nxaccVnFLSlceNGyd58uSRgQMHmhdt3rxZvv/+e/OQKhZ7Ao8ePTLhT6f2Z82a1RTWq4B60FGjRo2Ehv788085f/78G08f1Sm9Ggq5T9beeCSuRCCM3jal+8roWwq+Qqx/X33aryYXCHVqfuXKlSVLlizmg/Xtt9/K48ePk7znMPhP37u1QCB8Ny/vXq3TFTWQzJkzR65fv24OFr777jszVZHFrsAff/xhAqBOh9GHP+gBnP5NnzZ6+fJluXHjhjnQ0ykmOtVL7y3UqV16lmnXrl3mgTQswQn4tOMKTinpyroz1CmJ+rnVJ7HpdBl9SE/79u3D6I7Xber9mhr+9MmWP/74o5nRsX37dvOQGX3Ue926dc1JJn0SqW4/9F/dhui9hnplUe8nZAlGgEAYvet/7Sujr576FZL6vj579sxM4dZtpD5Z1cfvq0/71bcFQv0Zn1y5cpnbfvS2Cd326klRPZ7TJ2x//fXXZsq+CwuB0IVRCrCPevVJrwrqQUL27NllyJAh0qZNmwBbjO3S+gAf9dargBoK9Xdr9KrK6tWrzY4h/mqK/paVTt/VHYZeHdSHyujvjbHYF9Dpc3rfpt5Tq7+ZpzeDa0jnKsq7W+u9r3r/sVq2bdtWRo0alfAbeO9ejXckJaDTkHRbffLkSSlWrJhMnTpVKlWqZF5eu3ZtEwI1MOrtAJMnT5Y7d+5I0aJFzXjo/7PYFdCrAPXq1TNFdZ8aP+NDf0sv8e/M2m3Z32pJ7StdXOOkvq96IlhnaemVfF18+r76tF/VUKfHaC9fvpRXr16ZE28a/nR2nf52t/4chc6q09+b1HsGT58+bUKinhTVkwGuLARCV0aKfiKAAAIIIIAAAggggAAClgUIhJZBKYcAAggggAACCCCAAAIIuCJAIHRlpOgnAggggAACCCCAAAIIIGBZgEBoGZRyCCCAAAIIIIAAAggggIArAgRCV0aKfiKAAAIIIIAAAggggAAClgUIhJZBKYcAAggggAACCCCAAAIIuCJAIHRlpOgnAggggAACCCCAAAIIIGBZgEBoGZRyCCCAAAIIIIAAAggggIArAgRCV0aKfiKAAAIIIIAAAggggAAClgUIhJZBKYcAAggggAACCCCAAAIIuCJAIHRlpOgnAggggAACCCCAAAIIIGBZgEBoGZRyCCCAAAIIIIAAAggggIArAgRCV0aKfiKAAAIIIIAAAggggAAClgUIhJZBKYcAAggggAACCCCAAAIIuCJAIHRlpOgnAggggAACCCCAAAIIIGBZgEBoGZRyCCCAAAIIIIAAAggggIArAgRCV0aKfiKAAAIIIIAAAggggAAClgUIhJZBKYcAAggggAACCCCAAAIIuCJAIHRlpOgnAggggAACCCCAAAIIIGBZgEBoGZRyCCCAAAIIIIAAAggggIArAgRCV0aKfiKAAAIIIIAAAggggAAClgUIhJZBKYcAAggggAACCCCAAAIIuCJAIHRlpOgnAggggAACCCCAAAIIIGBZgEBoGZRyCCCAAAIIIIAAAggggIArAgRCV0aKfiKAAAIIIIAAAggggAAClgUIhJZBKYcAAggggAACCCCAAAIIuCJAIHRlpOgnAggggAACCCCAAAIIIGBZgEBoGZRyCCCAAAIIIIAAAggggIArAgRCV0aKfiKAAAIIIIAAAggggAAClgUIhJZBKYcAAggggAACCCCAAAIIuCJAIHRlpOgnAggggAACCCCAAAIIIGBZgEBoGZRyCCCAAAIIIIAAAggggIArAgRCV0aKfiKAAAIIIIAAAggggAAClgUIhJZBKYcAAggggAACCCCAAAIIuCJAIHRlpOgnAggggAACCCCAAAIIIGBZgEBoGZRyCCCAAAIIIIAAAggggIArAgRCV0aKfiKAAAIIIIAAAggggAAClgUIhJZBKYcAAggggAACCCCAAAIIuCLwL757/9YI7O7vAAAAAElFTkSuQmCC"
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from estimagic.visualization.lollipop_plot import lollipop_plot\n",
"\n",
"sensitivity_data = res.sensitivity(kind=\"bias\").abs().T\n",
"\n",
"fig = lollipop_plot(sensitivity_data)\n",
"\n",
"fig = fig.update_layout(height=500, width=900)\n",
"fig.show(renderer=\"png\")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.13"
}
},
"nbformat": 4,
"nbformat_minor": 5
}