<?xml version="1.0" encoding="UTF-8"?>
<rss  xmlns:atom="http://www.w3.org/2005/Atom" 
      xmlns:media="http://search.yahoo.com/mrss/" 
      xmlns:content="http://purl.org/rss/1.0/modules/content/" 
      xmlns:dc="http://purl.org/dc/elements/1.1/" 
      version="2.0">
<channel>
<title>Alex Jones Ph.D</title>
<link>https://alexjonesphd.github.io/blog.html</link>
<atom:link href="https://alexjonesphd.github.io/blog.xml" rel="self" type="application/rss+xml"/>
<description>Associate Professor of Psychological Data Science, Swansea University</description>
<generator>quarto-1.9.30</generator>
<lastBuildDate>Mon, 10 Jul 2023 23:00:00 GMT</lastBuildDate>
<item>
  <title>Bayesian Ordinal Regression in PyMC</title>
  <link>https://alexjonesphd.github.io/posts/ordinal-regression/</link>
  <description><![CDATA[ 




<p>Ordinal data is everywhere in social and behavioural science. People indicate their responses to questionnaire items by selecting a response out of a set of available options, such as <em>disagree, neutral, agree</em>, or rate their preferences on a numeric scale with a few discrete options (e.g.&nbsp;1, 2, 3, 4). The longstanding approach to analysing this data is to simply treat it as though it were truly continuous, applying the usual techniques that assume Gaussian distributions, like OLS and ANOVA. This ignores the very real possibility that the <em>distances</em> between the categories may not be fixed and equal. Its easy to imagine situations where the gap between a 3 and a 4 on a scale is small, but a big jump exists between selecting 4 over 5.</p>
<p>Accordingly, there’s a lot of work over the last few years that convincingly demonstrates that treating ordinal data as continuous is <strong>not</strong> a good idea, and can often lead to bias in the conclusions or even getting the sign of relationships incorrect. Ordinal data is modelled much more accurately using an appropriate likelihood function that can express the ordinal nature of the observed variable. Unfortunately, fitting and interpreting these models can be difficult to do, and is something I’ve struggled with for quite a while.</p>
<p>Using Bayesian inference, its straightforward to express a model that expresses ordindal data, and then extend that to including predictors, which is almost always the needed use case in applied statistics. We’ll work through some use cases with PyMC, laying out the bare bones of the model, different approaches, and then move onto full regression modelling with an ordinal outcome through a few different datasets.</p>
<section id="are-the-latent-variables-in-the-room-with-us" class="level2">
<h2 class="anchored" data-anchor-id="are-the-latent-variables-in-the-room-with-us">Are the latent variables in the room with us?</h2>
<p>First though, some theory. Understanding this part can be tricky, but is key to grasping the way ordinal models work. Ordinal models assume a <strong>latent, continuous</strong> variable that is unobserved. This is the variable of interest - a persons tendency to endorse the statement, find a face attractive, their level of agreement to the statement, and so on. We make assumptions about the kind of distribution this variable can take - typically its the normal or logistic distribution. But to realise the discrete and ordered nature of the responses, we must impose a set of <strong>thresholds or cutpoints</strong> onto this distribution to slice it into categories. We can then work out the probability density within a category, and use those probabilities to assess the frequency with which a response will appear. If this is confusing, don’t worry. Writing down the steps and plotting some data will hopefully clear things up.</p>
<section id="simulating-ordinal-data-with-pymc-from-scratch" class="level3">
<h3 class="anchored" data-anchor-id="simulating-ordinal-data-with-pymc-from-scratch">Simulating ordinal data with PyMC from scratch</h3>
<p>First, lets import some packages, and then make some assumptions about what we want to see. Imagine we are trying to simulate a dataset where 1000 participants indicate their response to the question “I like chocolate”. We will imagine there is a latent normal distribution that governs this response, and it has a mean of zero, and a standard deviation of 1 (i.e., the standard normal). People are however forced to respond to this statement on a 1-5 scale, indicating their agreement (1 = strong dislike, 5 = strong like).</p>
<p>What might a distribution of ordinal responses to this question look like? For me, I’d imagine a lot of people might respond with a four or five - i.e., a four and five have a high probability of occuring. A smaller minority might select three, and not a lot of people might select one, two, or three. Lets see if we can have the normal distribution help us realise that, using SciPy.</p>
<div id="8489eb8c" class="cell" data-execution_count="1">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb1-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Imports</span></span>
<span id="cb1-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> arviz <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> az</span>
<span id="cb1-3"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> numpy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> np</span>
<span id="cb1-4"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> pandas <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> pd</span>
<span id="cb1-5"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> pymc <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> pm</span>
<span id="cb1-6"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> pytensor.tensor <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> pt</span>
<span id="cb1-7"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> matplotlib.pyplot <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> plt</span>
<span id="cb1-8"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> scipy.stats <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> st</span>
<span id="cb1-9"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> seaborn <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> sns</span>
<span id="cb1-10"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> seaborn.objects <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> so</span>
<span id="cb1-11"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> statsmodels.formula.api <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> smf</span>
<span id="cb1-12"></span>
<span id="cb1-13"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> formulae <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> design_matrices <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> dm</span>
<span id="cb1-14"></span>
<span id="cb1-15">rng <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.random.default_rng(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">35</span>)</span>
<span id="cb1-16">plt.style.use(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'bmh'</span>)</span>
<span id="cb1-17">plt.rcParams[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'axes.axisbelow'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span></span>
<span id="cb1-18"></span>
<span id="cb1-19"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%</span>matplotlib inline</span></code></pre></div></div>
</div>
<p>Lets remind ourselves of the normal distributions appearance:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb2-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Plot the normal</span></span>
<span id="cb2-2">x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.linspace(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1000</span>) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Values to evaluate</span></span>
<span id="cb2-3">standard_normal <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> st.norm(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Our standard normal, mean 0, SD 1</span></span>
<span id="cb2-4"></span>
<span id="cb2-5"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Plot the probability density function of normal</span></span>
<span id="cb2-6">fig, ax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plt.subplots(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, figsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>))</span>
<span id="cb2-7">ax.plot(x, standard_normal.pdf(x), lw<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span></code></pre></div></div>
<p><img src="https://alexjonesphd.github.io/posts/ordinal-regression/output_5_0.png" class="img-fluid"></p>
<p>The standard normal has most of its probability mass around zero, and less in the tails. How might we carve it up so that responses of 1 and 2 are less frequent, 3 is a bit more common, and 4 and 5 are most popular? We had to add add the thresholds in a sensible position to chop the distribution up.</p>
<p>In ordinal regression, there are <em>always K-1</em> cutpoints. If we want 5 responses, we must place 4 thresholds. But where do they go? How would they translate to probabilities of responses? Well, we can use the <em>cumulative density function</em> of the standard normal to figure things out. Lets see what we mean by this. Imagine we place a cutpoint at -2, and a cutpoint at -1, which would correspond to the responses of 1 and 2 (strong dislike to dislike of chocolate) respectively. That would look like this:</p>
<div id="47ac72ee" class="cell" data-execution_count="2">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb3-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Add two cutpoints</span></span>
<span id="cb3-2">ax.axvline(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>, lw<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># -2</span></span>
<span id="cb3-3">ax.axvline(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>, lw<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># -1</span></span>
<span id="cb3-4">fig</span></code></pre></div></div>
</div>
<p><img src="https://alexjonesphd.github.io/posts/ordinal-regression/output_7_0.png" class="img-fluid"></p>
<p>Looking at these cutpoints, we can get a sense that for the area up to the first one, there’s not much probability. Between the first and second one there’s quite a bit of a bigger amount, too. But precisely <em>how much</em> probability is there? Remember, this probability is going to exactly correspond to the probability of seeing a 1 and a 2 in our chocolate data. We can work out this using the cumulative density function (CDF) of the normal distribution. This tells us the probability of all the possible responses up to and including the threshold, and essentially is calculating the area under the curve. For cutpoint 1 (-2), the cdf can be obtained easily:</p>
<div id="93f12a48" class="cell" data-execution_count="3">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb4-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Standard normal knows the answer</span></span>
<span id="cb4-2">cut1_cdf <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> standard_normal.cdf(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb4-3"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(cut1_cdf)</span></code></pre></div></div>
</div>
<pre><code>0.022750131948179195</code></pre>
<p>We are essentially computing the area in the shaded region below:</p>
<div id="5deeb7ba" class="cell" data-execution_count="4">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb6-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Fill in the area</span></span>
<span id="cb6-2">ax.fill_between(x, standard_normal.pdf(x), where<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>standard_normal.cdf(x) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;=</span> standard_normal.cdf(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>), color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'blue'</span>)</span>
<span id="cb6-3">fig</span></code></pre></div></div>
</div>
<p><img src="https://alexjonesphd.github.io/posts/ordinal-regression/output_11_0.png" class="img-fluid"></p>
<p>There we have it - that’s the probability of seeing a 1 in our data, if we keep the threshold there. If we repeat the same thing for second threshold, we probability of all the possible responses up to and including the second threshold, we have this:</p>
<div id="3e67001b" class="cell" data-execution_count="5">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb7" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb7-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Standard normal still knows the answer</span></span>
<span id="cb7-2">cut2_cdf <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> standard_normal.cdf(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb7-3"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(cut2_cdf)</span>
<span id="cb7-4"></span>
<span id="cb7-5"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Fill in the area</span></span>
<span id="cb7-6">ax.fill_between(x, standard_normal.pdf(x), where<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>standard_normal.cdf(x) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;=</span> standard_normal.cdf(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>), color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'red'</span>)</span>
<span id="cb7-7">fig</span></code></pre></div></div>
</div>
<pre><code>0.15865525393145707</code></pre>
<p><img src="https://alexjonesphd.github.io/posts/ordinal-regression/output_13_1.png" class="img-fluid"></p>
<p>So the probability of a 2 in our data is going to be about 16%, right? Not so fast. Looking at the shaded region its clear that this is actually overshadowing the first area. What we need is the area <em>between -2 and -1</em>, between the first and second cutpoints! How do we find this? Easily enough - just subtract the cdf up to -2 from the cdf up to -1!</p>
<div id="3bf3858e" class="cell" data-execution_count="6">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb9" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb9-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Probability of a 2</span></span>
<span id="cb9-2"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(cut2_cdf <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> cut1_cdf)</span>
<span id="cb9-3">ax.fill_between(x, standard_normal.pdf(x), where<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>standard_normal.cdf(x) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;=</span> standard_normal.cdf(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>), color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'red'</span>)</span>
<span id="cb9-4">ax.fill_between(x, standard_normal.pdf(x), where<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>standard_normal.cdf(x) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;=</span> standard_normal.cdf(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>), color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'blue'</span>)</span>
<span id="cb9-5">fig</span></code></pre></div></div>
</div>
<pre><code>0.13590512198327787</code></pre>
<p><img src="https://alexjonesphd.github.io/posts/ordinal-regression/output_15_1.png" class="img-fluid"></p>
<p>So the probability of a 2 is actually about 14%, and we’ve now correctly identified the area we want. This point highlights a key aspect of ordinal models. They carve up a latent distribution, and probabilities of a given response (e.g., 1, 2) are generated by subtracting the cdf of cutpoint <em>c-1</em> from cutpoint <em>c</em>.</p>
<p>Lets now throw in the rest of the thresholds.</p>
<div id="88be8bda" class="cell" data-execution_count="7">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb11" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb11-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Define thresholds as a list</span></span>
<span id="cb11-2">thresholds <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.25</span>]</span>
<span id="cb11-3"></span>
<span id="cb11-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Plot the set of thresholds on a new figure</span></span>
<span id="cb11-5">fig, ax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plt.subplots(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, figsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>))</span>
<span id="cb11-6">ax.plot(x, standard_normal.pdf(x), lw<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>)</span>
<span id="cb11-7"></span>
<span id="cb11-8"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Shade the cutpoints and add them</span></span>
<span id="cb11-9"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> alpha, cut <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">zip</span>(np.linspace(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.1</span>, num<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>), thresholds):</span>
<span id="cb11-10">    ax.axvline(cut, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>, lw<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>)</span>
<span id="cb11-11">    ax.fill_between(x, standard_normal.pdf(x), </span>
<span id="cb11-12">                    where<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>standard_normal.cdf(x) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;=</span> standard_normal.cdf(cut),</span>
<span id="cb11-13">                    alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>alpha)</span></code></pre></div></div>
</div>
<p><img src="https://alexjonesphd.github.io/posts/ordinal-regression/output_17_0.png" class="img-fluid"></p>
<p>What are the corresponding probabilities here? Visually, its clear that the fourth shaded area (response 4’s portion of the probability pie) and the unshaded area (response 5) have larger areas. We can compute them by subtracting each category from its previous one, which is easy using NumPy slicing.</p>
<div id="bd85c03b" class="cell" data-execution_count="8">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb12" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb12-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># get the cdf of each threshold</span></span>
<span id="cb12-2">cat_probs <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> standard_normal.cdf(thresholds)</span>
<span id="cb12-3"></span>
<span id="cb12-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Subtract each probability from its previous </span></span>
<span id="cb12-5">cat_probs[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>:] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> cat_probs[:<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]</span></code></pre></div></div>
</div>
<pre><code>array([0.13590512, 0.14988228, 0.29016879])</code></pre>
<p>Not enough probabilities here. We need 5, not three! We can solve this issue with a moment’s reflection. The probability of the <em>very first category</em> <strong>is equal</strong> to its cumulative density function. So we dont need to subtract a thing from that. The final probability - of response 5 in our case - should be the remaining probability <em>left over</em> after the rest of the probabilities have been computed. After all, these values will all sum to one, since we are dividing all of the probability of responses among the available responses. A simple computational trick we can use here is to book-end the <code>cat_probs</code> variable with a zero (left) and a one (right). That way, the slice operation will allow all the probabilities to be computed easily. In fact, this trick is used in PyMC to calculate the probabilites in a proper model, so its worth stating here. Here we go:</p>
<div id="58ae4ef1" class="cell" data-execution_count="9">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb14" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb14-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Bookend</span></span>
<span id="cb14-2">cat_probs <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.concatenate(</span>
<span id="cb14-3">    [np.zeros(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>),</span>
<span id="cb14-4">     cat_probs,</span>
<span id="cb14-5">     np.ones(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)]</span>
<span id="cb14-6">)</span>
<span id="cb14-7"></span>
<span id="cb14-8"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Get the response probabilities</span></span>
<span id="cb14-9">response_probs <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> cat_probs[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>:] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> cat_probs[:<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]</span>
<span id="cb14-10">response_probs</span></code></pre></div></div>
</div>
<pre><code>array([0.02275013, 0.13590512, 0.14988228, 0.29016879, 0.40129367])</code></pre>
<p>And, <em>finally</em>, we can now get what we turned up for. A set of ordinal responses for our imaginary participants on how much they like chocolate. How to get this? Well, we can use a <em>categorical</em> distribution. This is the simplest kind of distribution. We simply provide a set of probabilities, the number of which indicate how likely each option is. PyMC has a nice Categorical distribution that we will now sample from, and compare the counts of the data to the response probabilities generated above.</p>
<div id="5ca9d9de" class="cell" data-execution_count="10">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb16" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb16-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Actually get the responses, convert to Series</span></span>
<span id="cb16-2">chocolate <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.draw(pm.Categorical.dist(p<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>response_probs), draws<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1000</span>, random_seed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>rng)</span>
<span id="cb16-3">chocolate <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.DataFrame(chocolate, columns<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'chocolate_preference'</span>])</span>
<span id="cb16-4"></span>
<span id="cb16-5"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Show</span></span>
<span id="cb16-6">sns.countplot(data<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>chocolate, x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'chocolate_preference'</span>)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb16-7"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(chocolate.value_counts(normalize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>).sort_index())</span></code></pre></div></div>
</div>
<pre><code>chocolate_preference
0                       0.016
1                       0.153
2                       0.154
3                       0.294
4                       0.383
Name: proportion, dtype: float64</code></pre>
<p><img src="https://alexjonesphd.github.io/posts/ordinal-regression/output_23_1.png" class="img-fluid"></p>
<p>That is a pretty close match to the normal distribution cutpoints we generated! You will notice the scale doesn’t run from 1-5 but zero to four. This does not matter at all, if we wanted we can add one to the output without changing anything. When working with ordinal models in PyMC we make sure the data runs from zero to K, the max response value. Add or subtract whatever you need to make sure the lowest possible response is zero.</p>
</section>
<section id="recovering-parameters-of-an-ordinal-distribution-with-pymc---the-hard-way" class="level3">
<h3 class="anchored" data-anchor-id="recovering-parameters-of-an-ordinal-distribution-with-pymc---the-hard-way">Recovering parameters of an ordinal distribution with PyMC - the <strong>Hard Way</strong></h3>
<p>So far, we’ve generated some data from scratch, working backwards from the latent distribution to the observed data. But how would we model this data if we collected it in the wild, where we can only work from the observed ordinal data to make inference about the latent distribution? PyMC will make this easy for us, but we first need to make some assumptions and pin some things down, in a statistical sense.</p>
<p>When we are working with ordinal models, we have several parameters we may want to estimate: - The K-1 thresholds. With responses that can run from zero to K (e.g.&nbsp;0, 1, 2, 3, 4, K being 5), we can estimate K-1 <em>ordered</em> thresholds. - The location or mean of the underlying latent distribution. - The scale or standard deviation of the underlying distribution.</p>
<p>This was hard for me to get my head around, but if you think about it for a while, you realise that you <em>cannot estimate all of these at once</em>. The model will be undetermined if you try to estimate all of these parameters. Without fixing down any two of these parameters, the model can’t be estimated, because each parameter set is estimated relative to another. For example, when we set the mean and standard deviation to zero and one above, we could place the thresholds wherever we liked to get the right probabilities <em>within the bounds set by the distribution</em>. As we’ll see later, we can also fix the first and last threshold to a constant value too, and then the distribution and remaining parameters will shift around those constraints to accommodate the probabilities.</p>
<p>In many examples of ordinal models, a standard normal cumulative density function is used, which implicity sets the mean and standard deviation to zero. Thats OK sometimes, but not always an assumption you’d want to make. Below, we write a very explicit PyMC model that will try to recover the thresholds we set above on the chocolate dataset. We’ll rely on the <code>dims</code> and <code>coords</code> arguments to make thing easy to manage. Note that this model will look very complex, because its explicitly layout out all the probability calculations, distributions to use, and so on. This will be simplifed later but this version could be adapted for complex problems - e.g., assuming the latent distribution is a <em>t</em>-distribution or similar.</p>
<div id="2e5e31f6" class="cell" data-execution_count="11">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb18" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb18-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Figure out K</span></span>
<span id="cb18-2">K <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># the number of possible responses</span></span>
<span id="cb18-3">Kc <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> K <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Number of cutpoints</span></span>
<span id="cb18-4">latent_mean <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Fixed mean</span></span>
<span id="cb18-5">latent_sigma <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Fixed sigma</span></span>
<span id="cb18-6"></span>
<span id="cb18-7"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Set the coordinates</span></span>
<span id="cb18-8">c <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> {<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Kc'</span>: <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(Kc), </span>
<span id="cb18-9">     <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'N'</span>: <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(chocolate))</span>
<span id="cb18-10">    }</span>
<span id="cb18-11"></span>
<span id="cb18-12"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> pm.Model(coords<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>c) <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> ordinal_chocolate:</span>
<span id="cb18-13">    </span>
<span id="cb18-14">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># First, priors on cutpoints, which are normally distributed themselves, </span></span>
<span id="cb18-15">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># and transformed to be ordered. </span></span>
<span id="cb18-16">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># We set them along the range of the latent distribution - note that we are doing this relative</span></span>
<span id="cb18-17">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># to the knowledge we are fixing mean and sigma</span></span>
<span id="cb18-18">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Notice also the small SD, which says these cuts should not vary too much around the means, revisit as needed</span></span>
<span id="cb18-19">    cutpoints <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Normal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'cutpoints'</span>,</span>
<span id="cb18-20">                          mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>np.linspace(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, num<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>Kc),</span>
<span id="cb18-21">                          sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,</span>
<span id="cb18-22">                          transform<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>pm.distributions.transforms.univariate_ordered,</span>
<span id="cb18-23">                          dims<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Kc'</span>)</span>
<span id="cb18-24">    </span>
<span id="cb18-25">    </span>
<span id="cb18-26">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Working out the threshold CDFs from a distribution of choice, we set here to be normal with parameters fixed</span></span>
<span id="cb18-27">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># if we wanted to, we could replace this with another distribution or swap out the fixed constants for priors</span></span>
<span id="cb18-28">    cdf_getter <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Normal.dist(latent_mean, latent_sigma)</span>
<span id="cb18-29">    </span>
<span id="cb18-30">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Get the CDFs of the cutpoints using logcdf, then exponentiate</span></span>
<span id="cb18-31">    cdfs <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.logcdf(cdf_getter, cutpoints).exp() <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># These are all the cumulative density probabilities now</span></span>
<span id="cb18-32">    </span>
<span id="cb18-33">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Bookend the cdfs before subtraction using PyTensor - exactly the same as NumPy, just works for PyMC tensor variables</span></span>
<span id="cb18-34">    cdfs <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pt.concatenate(</span>
<span id="cb18-35">        [pt.zeros(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>),</span>
<span id="cb18-36">         cdfs,</span>
<span id="cb18-37">         pt.ones(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)]</span>
<span id="cb18-38">    )</span>
<span id="cb18-39">    </span>
<span id="cb18-40">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Compute probabilities</span></span>
<span id="cb18-41">    p <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> cdfs[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>:] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> cdfs[:<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]</span>
<span id="cb18-42">    </span>
<span id="cb18-43">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Place into a categorical distribution likelihood</span></span>
<span id="cb18-44">    pm.Categorical(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'y'</span>, p<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>p, observed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>chocolate[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'chocolate_preference'</span>].values, dims<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'N'</span>)</span>
<span id="cb18-45">    </span>
<span id="cb18-46">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Sample the posterior and then the posterior predictive distribution</span></span>
<span id="cb18-47">    idata <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.sample(random_seed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>rng)</span>
<span id="cb18-48">    idata.extend(pm.sample_posterior_predictive(idata))</span></code></pre></div></div>
</div>
<pre><code>Auto-assigning NUTS sampler...
Initializing NUTS using jitter+adapt_diag...
Multiprocess sampling (4 chains in 4 jobs)
NUTS: [cutpoints]
/Users/alexjones/opt/anaconda3/envs/pyTen/lib/python3.10/site-packages/pytensor/compile/function/types.py:970: RuntimeWarning: invalid value encountered in add
  self.vm()</code></pre>
<style>
    /* Turns off some styling */
    progress {
        /* gets rid of default border in Firefox and Opera. */
        border: none;
        /* Needs to be in here for Safari polyfill so background images work as expected. */
        background-size: auto;
    }
    progress:not([value]), progress:not([value])::-webkit-progress-bar {
        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);
    }
    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {
        background: #F44336;
    }
</style>
<pre><code>/Users/alexjones/opt/anaconda3/envs/pyTen/lib/python3.10/site-packages/pytensor/compile/function/types.py:970: RuntimeWarning: invalid value encountered in accumulate
  self.vm()</code></pre>
<div>
<p><progress value="8000" class="" max="8000" style="width:300px; height:20px; vertical-align: middle;"></progress> 100.00% [8000/8000 00:16&lt;00:00 Sampling 4 chains, 0 divergences]</p>
</div>
<pre><code>/Users/alexjones/opt/anaconda3/envs/pyTen/lib/python3.10/site-packages/pytensor/compile/function/types.py:970: RuntimeWarning: invalid value encountered in add
  self.vm()
/Users/alexjones/opt/anaconda3/envs/pyTen/lib/python3.10/site-packages/pytensor/compile/function/types.py:970: RuntimeWarning: invalid value encountered in add
  self.vm()
Sampling 4 chains for 1_000 tune and 1_000 draw iterations (4_000 + 4_000 draws total) took 35 seconds.
Sampling: [y]</code></pre>
<style>
    /* Turns off some styling */
    progress {
        /* gets rid of default border in Firefox and Opera. */
        border: none;
        /* Needs to be in here for Safari polyfill so background images work as expected. */
        background-size: auto;
    }
    progress:not([value]), progress:not([value])::-webkit-progress-bar {
        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);
    }
    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {
        background: #F44336;
    }
</style>
<div>
<p><progress value="4000" class="" max="4000" style="width:300px; height:20px; vertical-align: middle;"></progress> 100.00% [4000/4000 00:17&lt;00:00]</p>
</div>
<p>That’s a lot to take in, but the model has sampled with a few warnings. Lets examine both the posterior of the cutpoints, as well as the posterior predictive distribution.</p>
<div id="8f8dd0a5" class="cell" data-execution_count="12">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb22" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb22-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Get distribution of cutpoints</span></span>
<span id="cb22-2">az.plot_posterior(idata,</span>
<span id="cb22-3">                  hdi_prob<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.95</span>, </span>
<span id="cb22-4">                  lw<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, </span>
<span id="cb22-5">                  color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>,</span>
<span id="cb22-6">                  ref_val<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>thresholds)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span></code></pre></div></div>
</div>
<p><img src="https://alexjonesphd.github.io/posts/ordinal-regression/output_28_0.png" class="img-fluid"></p>
<div id="f3d3e4b0" class="cell" data-execution_count="13">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb23" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb23-1">az.plot_ppc(idata)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span></code></pre></div></div>
</div>
<p><img src="https://alexjonesphd.github.io/posts/ordinal-regression/output_29_0.png" class="img-fluid"></p>
<p>While the model didn’t <em>quite</em> nail the thresholds, it managed to capture them within the 95% credible intervals of each parameter. Reassuringly though, the model has a good approximation of the data, with the posterior predictive check aligning almost perfectly with the observed data.</p>
</section>
<section id="recovering-parameters---the-easy-way" class="level3">
<h3 class="anchored" data-anchor-id="recovering-parameters---the-easy-way">Recovering parameters - the <strong>easy way</strong></h3>
<p>The above model is a lot to take in. While we will always specify priors over the cutpoints, specifying the distribution to use to calculate the cumulative density function as well as computing the category probabilities manually is a lot! Fortunately, PyMC has a convenience likelihood distribution that allows us to bypass a lot of the complexity of the above model in fewer lines of code. The above parameterisation is worth knowing though, as it allows us to expand our capabilities to more complex ordinal data. Before we leave behind the chocolate data, I’ll rewrite the model above to expand on the fantastic <code>pm.OrderedProbit</code> distribution which will encompass a lot of the code in the above model. Note that ‘probit’ simply refers to the use of a normal distribution to model ordinal data, as we’ve been doing.</p>
<div id="cdf69018" class="cell" data-execution_count="14">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb24" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb24-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Rewrite to leverage orderedProbit</span></span>
<span id="cb24-2"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> pm.Model(coords<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>c) <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> probit_chocolate:</span>
<span id="cb24-3">    </span>
<span id="cb24-4">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># First, priors on cutpoints</span></span>
<span id="cb24-5">    cutpoints <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Normal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'cutpoints'</span>,</span>
<span id="cb24-6">                          mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>np.linspace(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, num<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>Kc),</span>
<span id="cb24-7">                          sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,</span>
<span id="cb24-8">                          transform<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>pm.distributions.transforms.univariate_ordered,</span>
<span id="cb24-9">                          dims<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Kc'</span>)</span>
<span id="cb24-10">    </span>
<span id="cb24-11">    </span>
<span id="cb24-12">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Likelihood of orderedProbit</span></span>
<span id="cb24-13">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Eta is the mean of the latent normal</span></span>
<span id="cb24-14">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Sigma is the SD</span></span>
<span id="cb24-15">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Cutpoints are the cutpoints</span></span>
<span id="cb24-16">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># This function internally sets the distribution to a normal with eta and sigma</span></span>
<span id="cb24-17">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Evaluates the CDF, </span></span>
<span id="cb24-18">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># and computes probabilities to pass to a Categorical distribution</span></span>
<span id="cb24-19">    pm.OrderedProbit(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'y'</span>, eta<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,</span>
<span id="cb24-20">                     cutpoints<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>cutpoints,</span>
<span id="cb24-21">                     observed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>chocolate[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'chocolate_preference'</span>].values</span>
<span id="cb24-22">                    )</span>
<span id="cb24-23">    </span>
<span id="cb24-24">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Sample the posterior and then the posterior predictive distribution</span></span>
<span id="cb24-25">    idata <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.sample(random_seed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>rng)</span>
<span id="cb24-26">    idata.extend(pm.sample_posterior_predictive(idata))</span></code></pre></div></div>
</div>
<pre><code>Auto-assigning NUTS sampler...
Initializing NUTS using jitter+adapt_diag...
Multiprocess sampling (4 chains in 4 jobs)
NUTS: [cutpoints]</code></pre>
<style>
    /* Turns off some styling */
    progress {
        /* gets rid of default border in Firefox and Opera. */
        border: none;
        /* Needs to be in here for Safari polyfill so background images work as expected. */
        background-size: auto;
    }
    progress:not([value]), progress:not([value])::-webkit-progress-bar {
        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);
    }
    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {
        background: #F44336;
    }
</style>
<div>
<p><progress value="8000" class="" max="8000" style="width:300px; height:20px; vertical-align: middle;"></progress> 100.00% [8000/8000 00:18&lt;00:00 Sampling 4 chains, 0 divergences]</p>
</div>
<pre><code>Sampling 4 chains for 1_000 tune and 1_000 draw iterations (4_000 + 4_000 draws total) took 34 seconds.
Sampling: [y]</code></pre>
<style>
    /* Turns off some styling */
    progress {
        /* gets rid of default border in Firefox and Opera. */
        border: none;
        /* Needs to be in here for Safari polyfill so background images work as expected. */
        background-size: auto;
    }
    progress:not([value]), progress:not([value])::-webkit-progress-bar {
        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);
    }
    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {
        background: #F44336;
    }
</style>
<div>
<p><progress value="4000" class="" max="4000" style="width:300px; height:20px; vertical-align: middle;"></progress> 100.00% [4000/4000 00:17&lt;00:00]</p>
</div>
<div id="26993f50" class="cell" data-execution_count="15">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb27" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb27-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Show results again</span></span>
<span id="cb27-2">fig, ax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plt.subplots(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>, figsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>))</span>
<span id="cb27-3"></span>
<span id="cb27-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Get distribution of cutpoints</span></span>
<span id="cb27-5">az.plot_posterior(idata,</span>
<span id="cb27-6">                  hdi_prob<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.95</span>, </span>
<span id="cb27-7">                  lw<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, </span>
<span id="cb27-8">                  color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>,</span>
<span id="cb27-9">                  ref_val<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>thresholds,</span>
<span id="cb27-10">                  ax<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>ax[:<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>])</span>
<span id="cb27-11"></span>
<span id="cb27-12"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Plot PPC</span></span>
<span id="cb27-13">az.plot_ppc(idata, ax<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>ax[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>])<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span></code></pre></div></div>
</div>
<p><img src="https://alexjonesphd.github.io/posts/ordinal-regression/output_32_0.png" class="img-fluid"></p>
<p>The results look more or less the same, as you can see - but there’s no warnings from the model this time, as the PyMC developers have much cleaner functions behind the scenes to ensure stable computations.</p>
</section>
</section>
<section id="a-flag-in-the-ground---fixing-cutpoints-to-estimate-the-location-and-scale" class="level2">
<h2 class="anchored" data-anchor-id="a-flag-in-the-ground---fixing-cutpoints-to-estimate-the-location-and-scale">A flag in the ground - fixing cutpoints to estimate the location and scale</h2>
<p>We’ll now examine a dataset in which the above approach - fixing mean and sigma to 0 and 1, respectively - simply doesn’t work, and highlight an approach to orindal modelling that I am most convinced by. The example data here is from the excellent book <em>Doing Bayesian Data Analysis 2nd Edition</em>, by John Kruschke. In the chapter on ordinal modelling, Kruschke provides a dataset (<code>OrdinalProbitData-1grp-1.csv</code>, get the book/data <a href="https://sites.google.com/site/doingbayesiandataanalysis/software-installation">here</a>) in which he takes the approach of fixing the top and bottom cutpoints of the model, and estimates the mean and sigma of the latent distribution (as well as the remaining thresholds). This is a particularly convincing approach, at least to me, because it allows for clever use cases such as comparing the latent means of two ordinal distributions (no more <em>t</em>-test style analyses), as well letting the mean be estimated by a linear combination of predictor variables with an error term, as in linear regression. First, lets read in Kruschke’s data, and see what our usual approach gets us, fixing the mean and sigma to zero and one.</p>
<div id="5acb577f" class="cell" data-execution_count="16">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb28" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb28-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Read in data, subtract one from the observed data</span></span>
<span id="cb28-2">one_group <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (pd.read_csv(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'OrdinalProbitData-1grp-1.csv'</span>)</span>
<span id="cb28-3">             .assign(y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">lambda</span> x: x[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Y'</span>].sub(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>))</span>
<span id="cb28-4">            )</span>
<span id="cb28-5"></span>
<span id="cb28-6">display(one_group.head())</span>
<span id="cb28-7">sns.countplot(data<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>one_group, x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'y'</span>)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span></code></pre></div></div>
</div>
<div>

<table class="dataframe table table-sm table-striped small">
<thead>
<tr>
<th>
</th>
<th>
Y
</th>
<th>
y
</th>
</tr>
</thead>
<tbody>
<tr>
<th>
0
</th>
<td>
1
</td>
<td>
0
</td>
</tr>
<tr>
<th>
1
</th>
<td>
1
</td>
<td>
0
</td>
</tr>
<tr>
<th>
2
</th>
<td>
1
</td>
<td>
0
</td>
</tr>
<tr>
<th>
3
</th>
<td>
1
</td>
<td>
0
</td>
</tr>
<tr>
<th>
4
</th>
<td>
1
</td>
<td>
0
</td>
</tr>
</tbody>
</table>
</div>
<p><img src="https://alexjonesphd.github.io/posts/ordinal-regression/output_35_1.png" class="img-fluid"></p>
<p>Lets try to model this using the approach we’ve seen so far. We’ll see if this generates the posterior-predictive fit we want.</p>
<div id="565c81c8" class="cell" data-execution_count="17">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb29" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb29-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Set number of values</span></span>
<span id="cb29-2">K <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">7</span></span>
<span id="cb29-3">Kc <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> K <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb29-4"></span>
<span id="cb29-5"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Coords</span></span>
<span id="cb29-6">c <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> {<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Kc'</span>: <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(Kc),</span>
<span id="cb29-7">     <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'N'</span>: <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(one_group))</span>
<span id="cb29-8">    }</span>
<span id="cb29-9"></span>
<span id="cb29-10"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> pm.Model(coords<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>c) <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> dbda:</span>
<span id="cb29-11">    </span>
<span id="cb29-12">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Priors on the cutpoints as before - note they are in relation to a standard normal</span></span>
<span id="cb29-13">    cutpoints <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Normal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'cutpoints'</span>,</span>
<span id="cb29-14">                          mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>np.linspace(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, num<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>Kc),</span>
<span id="cb29-15">                          sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,</span>
<span id="cb29-16">                          transform<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>pm.distributions.transforms.univariate_ordered,</span>
<span id="cb29-17">                          dims<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Kc'</span>)</span>
<span id="cb29-18">    </span>
<span id="cb29-19">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Fix 0 and 1 in the orderedProbit</span></span>
<span id="cb29-20">    pm.OrderedProbit(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'y'</span>, eta<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,</span>
<span id="cb29-21">                     cutpoints<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>cutpoints,</span>
<span id="cb29-22">                     compute_p<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>,</span>
<span id="cb29-23">                     observed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>one_group[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'y'</span>].values)</span>
<span id="cb29-24">    </span>
<span id="cb29-25">    idata <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.sample(random_seed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>rng)</span>
<span id="cb29-26">    idata.extend(pm.sample_posterior_predictive(idata))</span></code></pre></div></div>
</div>
<pre><code>Auto-assigning NUTS sampler...
Initializing NUTS using jitter+adapt_diag...
Multiprocess sampling (4 chains in 4 jobs)
NUTS: [cutpoints]</code></pre>
<style>
    /* Turns off some styling */
    progress {
        /* gets rid of default border in Firefox and Opera. */
        border: none;
        /* Needs to be in here for Safari polyfill so background images work as expected. */
        background-size: auto;
    }
    progress:not([value]), progress:not([value])::-webkit-progress-bar {
        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);
    }
    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {
        background: #F44336;
    }
</style>
<div>
<p><progress value="8000" class="" max="8000" style="width:300px; height:20px; vertical-align: middle;"></progress> 100.00% [8000/8000 00:15&lt;00:00 Sampling 4 chains, 0 divergences]</p>
</div>
<pre><code>Sampling 4 chains for 1_000 tune and 1_000 draw iterations (4_000 + 4_000 draws total) took 33 seconds.
Sampling: [y]</code></pre>
<style>
    /* Turns off some styling */
    progress {
        /* gets rid of default border in Firefox and Opera. */
        border: none;
        /* Needs to be in here for Safari polyfill so background images work as expected. */
        background-size: auto;
    }
    progress:not([value]), progress:not([value])::-webkit-progress-bar {
        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);
    }
    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {
        background: #F44336;
    }
</style>
<div>
<p><progress value="4000" class="" max="4000" style="width:300px; height:20px; vertical-align: middle;"></progress> 100.00% [4000/4000 00:03&lt;00:00]</p>
</div>
<div id="e9d7fc00" class="cell" data-execution_count="18">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb32" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb32-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Plot the PPC</span></span>
<span id="cb32-2">az.plot_ppc(idata)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span></code></pre></div></div>
</div>
<p><img src="https://alexjonesphd.github.io/posts/ordinal-regression/output_38_0.png" class="img-fluid"></p>
<p>Overall, not too bad. The model captures pretty well the observed frequencies in the data. What about the cutpoints themselves?</p>
<div id="48dd2b7a" class="cell" data-execution_count="19">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb33" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb33-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Get cutpoints</span></span>
<span id="cb33-2">az.plot_posterior(idata)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span></code></pre></div></div>
</div>
<p><img src="https://alexjonesphd.github.io/posts/ordinal-regression/output_40_0.png" class="img-fluid"></p>
<p>The first cutpoint has an estimate of around 0, and they get progressively higher. How to make sense of this? Remember, we can interpret this on the latent normal distribution. Lets pull out the mean of each cutpoint, put them on a normal distribution, and compare it to the observed frequencies of the data:</p>
<div id="768e0516" class="cell" data-execution_count="20">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb34" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb34-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Get cutpoint means</span></span>
<span id="cb34-2">cut_ests <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> idata[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior'</span>][<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'cutpoints'</span>].mean([<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'chain'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'draw'</span>]).to_numpy()</span>
<span id="cb34-3"></span>
<span id="cb34-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Plot a normal</span></span>
<span id="cb34-5">x_eval <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.linspace(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1000</span>)</span>
<span id="cb34-6">fig, (ax1, ax) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plt.subplots(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, figsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">12</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>))</span>
<span id="cb34-7">ax.plot(x_eval, standard_normal.pdf(x_eval), lw<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>)</span>
<span id="cb34-8"></span>
<span id="cb34-9"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Add the cutpoints and shade</span></span>
<span id="cb34-10"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> alpha, c <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">zip</span>(np.linspace(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.1</span>, num<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>Kc), cut_ests):</span>
<span id="cb34-11">    ax.axvline(c, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>, lw<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>)</span>
<span id="cb34-12">    </span>
<span id="cb34-13">    ax.fill_between(x_eval, standard_normal.pdf(x_eval),</span>
<span id="cb34-14">                    where<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>standard_normal.cdf(x_eval) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;=</span> standard_normal.cdf(c),</span>
<span id="cb34-15">                    alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>alpha)</span>
<span id="cb34-16">    </span>
<span id="cb34-17">sns.countplot(one_group, x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'y'</span>, ax<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>ax1, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'grey'</span>, edgecolor<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span></code></pre></div></div>
</div>
<p><img src="https://alexjonesphd.github.io/posts/ordinal-regression/output_42_0.png" class="img-fluid"></p>
<p>This is what we discussed earlier. If you pin down two parameters - here the mean and the sigma - the cutpoints have to shift around that distribution to find the accommodating regions. Clearly, a huge chunk of the distribution is needed to fit the large number of zero responses, while the tiny amount of response 6 is in the very far reaches of the right tail of the distribution, where almost no probability exists.</p>
<p>For prediction purposes, there is nothing wrong with this parameterisation and distribution, as the predictive fit shows. But if we wanted to interpret the underlying latent normal more clearly, or indeed compare its mean to something else, we need to actually <em>estimate</em> that mean. Kruschke’s solution is elegant - pin down the first and last cutpoints on the scale of the data, by adding about 0.5 to the first observed response in the data, and subtracting 0.5 from the final response in the data. The way we can do this is by estimating the internal cutpoints, book-ending them with constants, and then placing priors on the mean and sigma values of the distribution. Lets see how this works in PyMC:</p>
<div id="57007e60" class="cell" data-execution_count="21">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb35" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb35-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Recap - number of responses</span></span>
<span id="cb35-2">K <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">7</span></span>
<span id="cb35-3"></span>
<span id="cb35-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Number of cutpoints we'd *usually estimate*</span></span>
<span id="cb35-5">Kt <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> K <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb35-6"></span>
<span id="cb35-7"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Number of cutpoints we're going to pin now is 2, so Kc is actually</span></span>
<span id="cb35-8">Kc <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Kt <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span></span>
<span id="cb35-9"></span>
<span id="cb35-10"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Coords</span></span>
<span id="cb35-11">c <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> {<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Kc'</span>: <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(Kc),</span>
<span id="cb35-12">     <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Kt'</span>: <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(Kt),</span>
<span id="cb35-13">     <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'N'</span>: <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(one_group))</span>
<span id="cb35-14">    }</span>
<span id="cb35-15"></span>
<span id="cb35-16"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> pm.Model(coords<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>c) <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> dbda_probit:</span>
<span id="cb35-17">    </span>
<span id="cb35-18">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Priors on the cutpoints we will estimate. Notice their means now traverse the values of the ordinal scale!</span></span>
<span id="cb35-19">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Also notice the sigma is small, keeping them focused around the stated mean</span></span>
<span id="cb35-20">    cutpoints_raw <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Normal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'cutpoints_raw'</span>,</span>
<span id="cb35-21">                              mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>np.linspace(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>, num<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>Kc),</span>
<span id="cb35-22">                              sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.2</span>,</span>
<span id="cb35-23">                              transform<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>pm.distributions.transforms.univariate_ordered,</span>
<span id="cb35-24">                              dims<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Kc'</span>)</span>
<span id="cb35-25">    </span>
<span id="cb35-26">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Now booked and store into a Deterministic </span></span>
<span id="cb35-27">    cutpoints <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Deterministic(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'cutpoints'</span>,</span>
<span id="cb35-28">                                 pt.concatenate(</span>
<span id="cb35-29">                                     [</span>
<span id="cb35-30">                                         pt.ones(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.5</span>, <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># The lowest observed data - remember that was 1, not zero!</span></span>
<span id="cb35-31">                                         cutpoints_raw,</span>
<span id="cb35-32">                                         pt.ones(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">6.5</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># The highest cutpoint </span></span>
<span id="cb35-33">                                     ]</span>
<span id="cb35-34">                                 ), </span>
<span id="cb35-35">                                 dims<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Kt'</span></span>
<span id="cb35-36">                                )</span>
<span id="cb35-37">    </span>
<span id="cb35-38">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Priors for mu and sigma - on the scale of the data</span></span>
<span id="cb35-39">    μ <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Normal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'μ'</span>, mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb35-40">    σ <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.HalfNormal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'σ'</span>, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>)</span>
<span id="cb35-41">    </span>
<span id="cb35-42">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Into orderedProbit</span></span>
<span id="cb35-43">    pm.OrderedProbit(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'y'</span>, eta<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>μ, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>σ,</span>
<span id="cb35-44">                     cutpoints<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>cutpoints,</span>
<span id="cb35-45">                     observed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>one_group[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'y'</span>].values)</span>
<span id="cb35-46">    </span>
<span id="cb35-47">    idata2 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.sample(random_seed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>rng)</span>
<span id="cb35-48">    idata2.extend(pm.sample_posterior_predictive(idata2))</span></code></pre></div></div>
</div>
<pre><code>Auto-assigning NUTS sampler...
Initializing NUTS using jitter+adapt_diag...
Multiprocess sampling (4 chains in 4 jobs)
NUTS: [cutpoints_raw, μ, σ]</code></pre>
<style>
    /* Turns off some styling */
    progress {
        /* gets rid of default border in Firefox and Opera. */
        border: none;
        /* Needs to be in here for Safari polyfill so background images work as expected. */
        background-size: auto;
    }
    progress:not([value]), progress:not([value])::-webkit-progress-bar {
        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);
    }
    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {
        background: #F44336;
    }
</style>
<div>
<p><progress value="8000" class="" max="8000" style="width:300px; height:20px; vertical-align: middle;"></progress> 100.00% [8000/8000 00:18&lt;00:00 Sampling 4 chains, 0 divergences]</p>
</div>
<pre><code>Sampling 4 chains for 1_000 tune and 1_000 draw iterations (4_000 + 4_000 draws total) took 35 seconds.
Sampling: [y]</code></pre>
<style>
    /* Turns off some styling */
    progress {
        /* gets rid of default border in Firefox and Opera. */
        border: none;
        /* Needs to be in here for Safari polyfill so background images work as expected. */
        background-size: auto;
    }
    progress:not([value]), progress:not([value])::-webkit-progress-bar {
        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);
    }
    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {
        background: #F44336;
    }
</style>
<div>
<p><progress value="4000" class="" max="4000" style="width:300px; height:20px; vertical-align: middle;"></progress> 100.00% [4000/4000 00:02&lt;00:00]</p>
</div>
<div id="5d223173" class="cell" data-execution_count="22">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb38" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb38-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Check the posterior predictive</span></span>
<span id="cb38-2">az.plot_ppc(idata2)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span></code></pre></div></div>
</div>
<p><img src="https://alexjonesphd.github.io/posts/ordinal-regression/output_45_0.png" class="img-fluid"></p>
<p>And take a look at the parameters, which closely match those of Kruschke’s reported data.</p>
<div id="f93d5651" class="cell" data-execution_count="23">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb39" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb39-1">az.plot_posterior(idata2, var_names<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'μ'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'σ'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'cutpoints_raw'</span>])<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span></code></pre></div></div>
</div>
<p><img src="https://alexjonesphd.github.io/posts/ordinal-regression/output_47_0.png" class="img-fluid"></p>
<p>The key insight here is that we have now estimated that the mean of the latent distribution is around 1, and the sigma is 2.1. Lets take a look at the means of the posterior and visualise <em>this</em> distribution we have estimated:</p>
<div id="cd5a62c4" class="cell" data-execution_count="24">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb40" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb40-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Aggregate parameters</span></span>
<span id="cb40-2">params <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> idata2[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior'</span>][[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'μ'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'σ'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'cutpoints'</span>]].mean([<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'chain'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'draw'</span>])</span>
<span id="cb40-3"></span>
<span id="cb40-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Build a normal that fits the estimates</span></span>
<span id="cb40-5">x_eval <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.linspace(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1000</span>)</span>
<span id="cb40-6">new_normal <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> st.norm(params[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'μ'</span>], params[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'σ'</span>])</span>
<span id="cb40-7"></span>
<span id="cb40-8"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Plot</span></span>
<span id="cb40-9">fig, ax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plt.subplots(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, figsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>))</span>
<span id="cb40-10">ax.plot(x_eval, new_normal.pdf(x_eval), lw<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>)</span>
<span id="cb40-11"></span>
<span id="cb40-12"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Add the cuts</span></span>
<span id="cb40-13">[ax.axvline(c, lw<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>) <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> c <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> params[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'cutpoints'</span>]]</span>
<span id="cb40-14"></span>
<span id="cb40-15"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Shade</span></span>
<span id="cb40-16"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> alpha, c <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">zip</span>(np.linspace(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.1</span>, num<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>Kt), params[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'cutpoints'</span>]):</span>
<span id="cb40-17">    </span>
<span id="cb40-18">    ax.fill_between(x_eval, new_normal.pdf(x_eval),</span>
<span id="cb40-19">                    where<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>new_normal.cdf(x_eval) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;=</span> new_normal.cdf(c),</span>
<span id="cb40-20">                    alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>alpha)</span>
<span id="cb40-21"></span>
<span id="cb40-22"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Clip the axis to emphasise range of data, where the original data lived</span></span>
<span id="cb40-23">ax.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">set</span>(xlim<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8</span>), xticks<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8</span>))<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span></code></pre></div></div>
</div>
<p><img src="https://alexjonesphd.github.io/posts/ordinal-regression/output_49_0.png" class="img-fluid"></p>
<p>This looks similar to the one we saw in the initial model. But its clear the distribution has ‘shifted’ along the X axis, and is spread out. Either parameterisation is OK, but this one has a lot of benefits, and extends naturally to the linear regression case, as we will see. Kruschke highlights further examples in his chapter, such as comparing the latent means/SDs of two ordinal measures, seamlessly using Bayesian inference to derive distributions of latent mean-difference effect sizes.</p>
</section>
<section id="when-looking-hot-means-not-feeling-cold" class="level2">
<h2 class="anchored" data-anchor-id="when-looking-hot-means-not-feeling-cold">When looking hot means not feeling cold</h2>
<p>We’re now at a point where we’ve pinned down a method of working with ordinal data to estimate the parameters of the underlying latent distribution. Extending this to a regression context is now natural. Consider a standard linear regression, where the goal is to estimate the expectancy of a normal distribution from a set of linear predictors, as well as the noise of the measure (i.e., the residuals).</p>
<p>To highlight the use case of a true ordinal regression, I am going to use a dataset from social psychology, a paper titled <a href="https://bpspsychub.onlinelibrary.wiley.com/doi/epdf/10.1111/bjso.12489?saml_referrer">“When looking hot means not feeling cold”</a>. In this study, the authors photographed women on a night out during a cold period in Florida.</p>
<p>The authors asked the women how cold they felt, responding on a 1 (not at all cold) to a 6 (extremely cold) scale. They also measured the tendency for their participants to <em>self-objectify</em>, i.e., show more concern about how they look, rather than how they feel. From the photographs, the researchers also quantified the amount of skin the women showed. Using standard linear regression, the authors reported a statistically significant interaction between the level of self-objectification and skin exposure (after adjusting for the actual temperature), such that only women low in self-objectification with high levels of skin exposure reported feeling colder - those with high levels of self-objectification did not “feel the cold”.</p>
<p>Its worth a read. Its an interesting paper and the authors did a good job testing their theory in an creative way. When the paper came out, the authors sadly received huge backlash because of the marginally significant <em>p</em>-value of the interaction, and lots of people jumped in to re-analyse their data with more covariates, simulations, and more, desperately trying to show the effect was not significant. In my view, all of these criticisms missed the point, which was that the data was probably better suited to being modelled by an ordinal outcome. As an aside, this is the issue with frequentist null-hypothesis significance testing approaches - focusing on that arbitrary threshold of “existence” is silly, and people can be <em>really</em> motivated to knock something to either side of it. With the Bayesian approach, we can incorporate some skepticism into the model as well as modelling it appropriately and see what we find.</p>
<p>I’ve got the data from the <a href="https://osf.io/download/w92my">Open Science Framework</a>, and am reading it in here. Huge thanks to the authors for sharing their data.</p>
<div id="bfcee53f" class="cell" data-execution_count="25">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb41" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb41-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Read in data and subset out the columns and rows we need</span></span>
<span id="cb41-2"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Also Z-score the predictor variables</span></span>
<span id="cb41-3">hotcold <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (pd.read_spss(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'field data_coded_clean.sav'</span>)</span>
<span id="cb41-4">           .query(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'`filter_$` == "Selected"'</span>)</span>
<span id="cb41-5">           .<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">filter</span>(items<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'ID'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Cold'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Self_Obj'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Temp_True'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Clothes_RF'</span>])</span>
<span id="cb41-6">           .pipe(<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">lambda</span> df_: df_.assign(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span>df_[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Self_Obj'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Temp_True'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Clothes_RF'</span>]].<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">apply</span>(st.zscore, ddof<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>).add_suffix(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'_Z'</span>)))</span>
<span id="cb41-7">          )</span>
<span id="cb41-8"></span>
<span id="cb41-9">hotcold.head()</span></code></pre></div></div>
</div>
<div>

<table class="dataframe table table-sm table-striped small">
<thead>
<tr>
<th>
</th>
<th>
ID
</th>
<th>
Cold
</th>
<th>
Self_Obj
</th>
<th>
Temp_True
</th>
<th>
Clothes_RF
</th>
<th>
Self_Obj_Z
</th>
<th>
Temp_True_Z
</th>
<th>
Clothes_RF_Z
</th>
</tr>
</thead>
<tbody>
<tr>
<th>
0
</th>
<td>
170.0
</td>
<td>
1.0
</td>
<td>
4.625
</td>
<td>
50.0
</td>
<td>
2.0
</td>
<td>
0.942003
</td>
<td>
-0.694347
</td>
<td>
-0.542569
</td>
</tr>
<tr>
<th>
1
</th>
<td>
26.0
</td>
<td>
1.0
</td>
<td>
5.375
</td>
<td>
52.0
</td>
<td>
2.0
</td>
<td>
1.745924
</td>
<td>
-0.140646
</td>
<td>
-0.542569
</td>
</tr>
<tr>
<th>
2
</th>
<td>
27.0
</td>
<td>
3.0
</td>
<td>
3.375
</td>
<td>
50.0
</td>
<td>
0.0
</td>
<td>
-0.397866
</td>
<td>
-0.694347
</td>
<td>
-1.567422
</td>
</tr>
<tr>
<th>
3
</th>
<td>
67.0
</td>
<td>
3.0
</td>
<td>
3.000
</td>
<td>
52.0
</td>
<td>
4.0
</td>
<td>
-0.799827
</td>
<td>
-0.140646
</td>
<td>
0.482284
</td>
</tr>
<tr>
<th>
4
</th>
<td>
68.0
</td>
<td>
6.0
</td>
<td>
5.250
</td>
<td>
52.0
</td>
<td>
6.0
</td>
<td>
1.611937
</td>
<td>
-0.140646
</td>
<td>
1.507137
</td>
</tr>
</tbody>
</table>
</div>
<p>Lets first recreate their analyses using good ol’ NHST and OLS, which is the prediction of Cold by the interaction of self objectification and skin exposure, adjusting for actual temperature.</p>
<div id="8acbdab9" class="cell" data-execution_count="26">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb42" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb42-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Fit an OLS model</span></span>
<span id="cb42-2">ols_mod <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> smf.ols(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Cold ~ Temp_True_Z + Self_Obj_Z * Clothes_RF_Z'</span>, data<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>hotcold).fit()</span>
<span id="cb42-3"></span>
<span id="cb42-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># display summary</span></span>
<span id="cb42-5">ols_mod.summary(slim<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span></code></pre></div></div>
</div>
<pre><code>&lt;td&gt;Cold&lt;/td&gt;    &lt;th&gt;  R-squared:         &lt;/th&gt; &lt;td&gt;   0.060&lt;/td&gt;</code></pre><pre><code>         &lt;td&gt;OLS&lt;/td&gt;    &lt;th&gt;  Adj. R-squared:    &lt;/th&gt; &lt;td&gt;   0.040&lt;/td&gt;</code></pre><table class="simpletable">
<caption>
OLS Regression Results
</caption>
<tbody><tr>
<th>
Dep. Variable:
</th>

</tr>
<tr>
<th>
Model:
</th>

</tr>
<tr>
<th>
No.&nbsp;Observations:
</th>
<td>
186
</td>
<th>
F-statistic:
</th>
<td>
2.909
</td>
</tr>
<tr>
<th>
Covariance Type:
</th>
<td>
nonrobust
</td>
<th>
Prob (F-statistic):
</th>
<td>
0.0230
</td>
</tr>
</tbody></table>
<pre><code>         &lt;td&gt;    3.4489&lt;/td&gt; &lt;td&gt;    0.103&lt;/td&gt; &lt;td&gt;   33.615&lt;/td&gt; &lt;td&gt; 0.000&lt;/td&gt; &lt;td&gt;    3.246&lt;/td&gt; &lt;td&gt;    3.651&lt;/td&gt;</code></pre><pre><code>       &lt;td&gt;   -0.1755&lt;/td&gt; &lt;td&gt;    0.100&lt;/td&gt; &lt;td&gt;   -1.758&lt;/td&gt; &lt;td&gt; 0.080&lt;/td&gt; &lt;td&gt;   -0.373&lt;/td&gt; &lt;td&gt;    0.021&lt;/td&gt;</code></pre><pre><code>        &lt;td&gt;   -0.0069&lt;/td&gt; &lt;td&gt;    0.105&lt;/td&gt; &lt;td&gt;   -0.066&lt;/td&gt; &lt;td&gt; 0.947&lt;/td&gt; &lt;td&gt;   -0.213&lt;/td&gt; &lt;td&gt;    0.200&lt;/td&gt;</code></pre><pre><code>      &lt;td&gt;    0.1458&lt;/td&gt; &lt;td&gt;    0.104&lt;/td&gt; &lt;td&gt;    1.400&lt;/td&gt; &lt;td&gt; 0.163&lt;/td&gt; &lt;td&gt;   -0.060&lt;/td&gt; &lt;td&gt;    0.351&lt;/td&gt;</code></pre><table class="simpletable">
<tbody><tr>
<td>
</td>
<th>
coef
</th>
<th>
std err
</th>
<th>
t
</th>
<th>
P&gt;|t|
</th>
<th>
[0.025]
</th>
</tr>
<tr>
<th>
Intercept
</th>

</tr>
<tr>
<th>
Temp_True_Z
</th>

</tr>
<tr>
<th>
Self_Obj_Z
</th>

</tr>
<tr>
<th>
Clothes_RF_Z
</th>

</tr>
<tr>
<th>
Self_Obj_Z:Clothes_RF_Z
</th>
<td>
-0.2063
</td>
<td>
0.098
</td>
<td>
-2.111
</td>
<td>
0.036
</td>
<td>
-0.399
</td>
<td>
-0.013
</td>
</tr>
</tbody></table>
<p><br><br>Notes:<br>[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.</p>
<p>This highlights the contentious interaction that attracted so much social media ire. Lets have this linear model make a prediction to understand the interaction a bit more, which we will also end up doing with a PyMC model. We’ll estimate the feeling of cold for hypothetical individuals with ±1 SD on the clothes variable, and ±1 SD on the self objectivation variable.</p>
<div id="ae9fb23b" class="cell" data-execution_count="27">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb49" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb49-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Prediction dataset</span></span>
<span id="cb49-2">predmat <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.DataFrame(</span>
<span id="cb49-3">    {</span>
<span id="cb49-4">        <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Self_Obj_Z'</span>: [<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>],</span>
<span id="cb49-5">        <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Clothes_RF_Z'</span>: [<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>],</span>
<span id="cb49-6">        <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Temp_True_Z'</span>: [<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span></span>
<span id="cb49-7">    }</span>
<span id="cb49-8">)</span>
<span id="cb49-9"></span>
<span id="cb49-10"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># get estimates</span></span>
<span id="cb49-11">estimates <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> ols_mod.get_prediction(predmat).summary_frame().<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">filter</span>(items<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'mean'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'mean_ci_lower'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'mean_ci_upper'</span>])</span>
<span id="cb49-12"></span>
<span id="cb49-13"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Quick plot</span></span>
<span id="cb49-14">(</span>
<span id="cb49-15">    so.Plot(data<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>predmat.assign(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span>estimates), </span>
<span id="cb49-16">            x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Clothes_RF_Z'</span>, y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'mean'</span>, </span>
<span id="cb49-17">            ymin<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'mean_ci_lower'</span>, ymax<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'mean_ci_upper'</span>, </span>
<span id="cb49-18">            linestyle<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Self_Obj_Z'</span>)</span>
<span id="cb49-19">    .add(so.Lines(color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>), so.Dodge())</span>
<span id="cb49-20">    .add(so.Dot(color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>), so.Dodge())</span>
<span id="cb49-21">    .add(so.Range(color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>, linewidth<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>), so.Dodge())</span>
<span id="cb49-22">    .scale(x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>so.Nominal())</span>
<span id="cb49-23">    .label(x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Skin Exposure'</span>, y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Predicted Cold Feeling'</span>, linestyle<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Self Objectification'</span>)</span>
<span id="cb49-24">    .theme(plt.style.library[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'bmh'</span>])</span>
<span id="cb49-25">)</span></code></pre></div></div>
</div>
<p><img src="https://alexjonesphd.github.io/posts/ordinal-regression/output_56_0.png" class="img-fluid"></p>
<p>This recreates the overall finding, such that low self-objectifiers feel colder with more skin exposure, high self objectifiers show no evidence for a change. Let’s now build an ordinal regression in PyMC to refit the data with a) a proper ordered likelihood, and b) a bit of regularisation on the priors to limit noisy inference. I only use a basic type of regularisation in the below example, but there are more elaborate ways of doing this.</p>
<p>The key thing to remember here is, when using a normal latent variable, is that the coefficients represent changes in the underlying latent distribution - i.e., if the coefficient were 1, it would indicate a 1-unit increase in the predictor leads to a 1 unit change in the underlying latent distribution.</p>
<div id="f80ede1f" class="cell" data-execution_count="28">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb50" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb50-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Use formulae to build the design matrix</span></span>
<span id="cb50-2">model_design <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> dm(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Cold ~ Temp_True_Z + Self_Obj_Z * Clothes_RF_Z'</span>, data<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>hotcold)</span>
<span id="cb50-3"></span>
<span id="cb50-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Obtain X and y</span></span>
<span id="cb50-5">y <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.array(model_design.response) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Notice subtraction</span></span>
<span id="cb50-6">X <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> model_design.common.as_dataframe().drop(columns<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Intercept'</span>) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Remove the intercept column</span></span>
<span id="cb50-7"></span>
<span id="cb50-8"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Set up the coordinate dictionary</span></span>
<span id="cb50-9">K <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># max number</span></span>
<span id="cb50-10">Kc <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> K <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># The number of cutpoints</span></span>
<span id="cb50-11">Kt <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Kc <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># We are pinning two</span></span>
<span id="cb50-12"></span>
<span id="cb50-13"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Coord dict</span></span>
<span id="cb50-14">c <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> {<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Kt'</span>: <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(Kt), <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># cutpoints to estimate</span></span>
<span id="cb50-15">     <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Kc'</span>: <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(Kc), <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># total cutpoint</span></span>
<span id="cb50-16">     <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'coefs'</span>: X.columns, <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Coefficients</span></span>
<span id="cb50-17">     <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'N'</span>: <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(y))</span>
<span id="cb50-18">    }</span>
<span id="cb50-19"></span>
<span id="cb50-20"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Build the model</span></span>
<span id="cb50-21"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> pm.Model(coords<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>c) <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> hotcold_ordinal:</span>
<span id="cb50-22">    </span>
<span id="cb50-23">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Set the X data as mutable, we will later make predictions</span></span>
<span id="cb50-24">    Xdata <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.MutableData(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Xdata'</span>, np.array(X))</span>
<span id="cb50-25">    ydata <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.MutableData(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'ydata'</span>, y)</span>
<span id="cb50-26">    </span>
<span id="cb50-27">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># First, set cupoints we will estimate</span></span>
<span id="cb50-28">    cut_raw <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Normal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'cut_raw'</span>,</span>
<span id="cb50-29">                        mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>np.linspace(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>, num<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>Kt), <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># on range of data</span></span>
<span id="cb50-30">                        sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.25</span>,</span>
<span id="cb50-31">                        transform<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>pm.distributions.transforms.univariate_ordered,</span>
<span id="cb50-32">                        dims<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Kt'</span>)</span>
<span id="cb50-33">    </span>
<span id="cb50-34">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Cutpoints</span></span>
<span id="cb50-35">    cutpoints <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Deterministic(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'cutpoints'</span>,</span>
<span id="cb50-36">                                 pt.concatenate(</span>
<span id="cb50-37">                                     [</span>
<span id="cb50-38">                                         pt.ones(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.5</span>, <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># First cutpoint</span></span>
<span id="cb50-39">                                         cut_raw,</span>
<span id="cb50-40">                                         pt.ones(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">5.5</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Second cutpoint</span></span>
<span id="cb50-41">                                     ]</span>
<span id="cb50-42">                                 ),</span>
<span id="cb50-43">                                 dims<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Kc'</span>)</span>
<span id="cb50-44">    </span>
<span id="cb50-45">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Model terms </span></span>
<span id="cb50-46">    λ <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Gamma(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'λ'</span>, alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>, beta<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># The regulariser</span></span>
<span id="cb50-47">    β<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Normal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'β0'</span>, mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Intercept</span></span>
<span id="cb50-48">    β <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Normal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'β'</span>, mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>λ, dims<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'coefs'</span>) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Coefficients with a hierarchical variability</span></span>
<span id="cb50-49">    σ <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.HalfNormal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'σ'</span>, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Model error</span></span>
<span id="cb50-50">    </span>
<span id="cb50-51">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Take linear combination</span></span>
<span id="cb50-52">    μ <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> β<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> Xdata <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">@</span> β</span>
<span id="cb50-53">    </span>
<span id="cb50-54">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Likelihood</span></span>
<span id="cb50-55">    pm.OrderedProbit(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'y'</span>, eta<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>μ, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>σ,</span>
<span id="cb50-56">                     cutpoints<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>cutpoints,</span>
<span id="cb50-57">                     compute_p<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>,</span>
<span id="cb50-58">                     observed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>ydata)    </span></code></pre></div></div>
</div>
<pre><code>Automatically removing 1/187 rows from the dataset.</code></pre>
<p>Before we sample this, lets take a look at the model structure. We’re using an ordinal likelihood but the same model structure as the standard OLS used by the authors, but we are adding some regularisation to the parameters to constrain the coefficients some.</p>
<div id="ddc3a86b" class="cell" data-execution_count="29">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb52" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb52-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># View the model</span></span>
<span id="cb52-2">pm.model_to_graphviz(hotcold_ordinal)</span></code></pre></div></div>
</div>
<p><img src="https://alexjonesphd.github.io/posts/ordinal-regression/output_60_0.svg" class="img-fluid"></p>
<p>This further highlights that ordinal regression is really a categorical prediction problem. Lets now obtain the posterior and predictive distribution of the model.</p>
<div id="a41c3ac9" class="cell" data-execution_count="30">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb53" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb53-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Obtain posterior</span></span>
<span id="cb53-2"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> hotcold_ordinal:</span>
<span id="cb53-3">    idata <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.sample(random_seed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>rng) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Posterior</span></span>
<span id="cb53-4">    idata.extend(pm.sample_posterior_predictive(idata)) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Posterior predictive</span></span>
<span id="cb53-5">    idata.extend(pm.sample_prior_predictive()) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Also get prior for later</span></span></code></pre></div></div>
</div>
<pre><code>Auto-assigning NUTS sampler...
Initializing NUTS using jitter+adapt_diag...
Multiprocess sampling (4 chains in 4 jobs)
NUTS: [cut_raw, λ, β0, β, σ]</code></pre>
<style>
    /* Turns off some styling */
    progress {
        /* gets rid of default border in Firefox and Opera. */
        border: none;
        /* Needs to be in here for Safari polyfill so background images work as expected. */
        background-size: auto;
    }
    progress:not([value]), progress:not([value])::-webkit-progress-bar {
        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);
    }
    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {
        background: #F44336;
    }
</style>
<div>
<p><progress value="8000" class="" max="8000" style="width:300px; height:20px; vertical-align: middle;"></progress> 100.00% [8000/8000 00:29&lt;00:00 Sampling 4 chains, 1 divergences]</p>
</div>
<pre><code>Sampling 4 chains for 1_000 tune and 1_000 draw iterations (4_000 + 4_000 draws total) took 46 seconds.
There were 1 divergences after tuning. Increase `target_accept` or reparameterize.
Sampling: [y]</code></pre>
<style>
    /* Turns off some styling */
    progress {
        /* gets rid of default border in Firefox and Opera. */
        border: none;
        /* Needs to be in here for Safari polyfill so background images work as expected. */
        background-size: auto;
    }
    progress:not([value]), progress:not([value])::-webkit-progress-bar {
        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);
    }
    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {
        background: #F44336;
    }
</style>
<div>
<p><progress value="4000" class="" max="4000" style="width:300px; height:20px; vertical-align: middle;"></progress> 100.00% [4000/4000 00:05&lt;00:00]</p>
</div>
<pre><code>Sampling: [cut_raw, y, β, β0, λ, σ]</code></pre>
<p>Let’s take a look at the posterior distribution of the interaction, the effect of interest in the paper, as well as the posterior predictive check. We will also submit the interaction coefficient to a Bayes Factor hypothesis test.</p>
<div id="b628626a" class="cell" data-execution_count="31">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb57" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb57-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Visualise</span></span>
<span id="cb57-2">fig, ax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plt.subplots(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>, figsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span>))</span>
<span id="cb57-3"></span>
<span id="cb57-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Plot posterior of interaction</span></span>
<span id="cb57-5">az.plot_posterior(idata, </span>
<span id="cb57-6">                  var_names<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'β'</span>, coords<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>{<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'coefs'</span>: <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Self_Obj_Z:Clothes_RF_Z'</span>},</span>
<span id="cb57-7">                  hdi_prob<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.95</span>, lw<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>,</span>
<span id="cb57-8">                  ref_val<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, ax<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>ax[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>])</span>
<span id="cb57-9"></span>
<span id="cb57-10"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Plot ppc</span></span>
<span id="cb57-11">az.plot_ppc(idata, ax<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>ax[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>])<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb57-12"></span>
<span id="cb57-13"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Bayes Factor plot</span></span>
<span id="cb57-14"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Extract data</span></span>
<span id="cb57-15">bf <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> az.from_dict(</span>
<span id="cb57-16">    posterior<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>{<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'interaction'</span>: az.extract(idata, var_names<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'β'</span>, group<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior'</span>).sel(coefs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Self_Obj_Z:Clothes_RF_Z'</span>)},</span>
<span id="cb57-17">    prior<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>{<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'interaction'</span>: az.extract(idata, var_names<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'β'</span>, group<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'prior'</span>).sel(coefs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Self_Obj_Z:Clothes_RF_Z'</span>)}</span>
<span id="cb57-18">)</span>
<span id="cb57-19"></span>
<span id="cb57-20"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Plot BF</span></span>
<span id="cb57-21">az.plot_bf(bf, var_name<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"interaction"</span>, ref_val<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, ax<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>ax[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>])<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span></code></pre></div></div>
</div>
<pre><code>/Users/alexjones/opt/anaconda3/envs/pyTen/lib/python3.10/site-packages/IPython/core/events.py:89: UserWarning: Creating legend with loc="best" can be slow with large amounts of data.
  func(*args, **kwargs)
/Users/alexjones/opt/anaconda3/envs/pyTen/lib/python3.10/site-packages/IPython/core/pylabtools.py:152: UserWarning: Creating legend with loc="best" can be slow with large amounts of data.
  fig.canvas.print_figure(bytes_io, **kw)</code></pre>
<p><img src="https://alexjonesphd.github.io/posts/ordinal-regression/output_64_1.png" class="img-fluid"></p>
<p>According to the posterior distribution of the coefficient, there is an almost 97% probability of the coefficient being less than zero - it doesn’t quite exclude that magical parameter, but based on the model and the data, we’d deem a negative relationship is likely. The predictive check looks good, mirroring the data. The Bayes Factor plot suggests that the value of zero is similarly likely under both the posterior and prior distribution of the coefficient, which most Bayes Factor proponents would deem an inconclusive finding.</p>
<p>Let’s move beyond these hypothesis tests and see if we can use the model to really dig into the predictions. As our model is Bayesian, the predictions it makes for a datapoint will be a distribution over the possible scale response options. What we’ll now do is ask the model to predict the hypothetical individuals the standard linear model predicted, and thus we can see the likely response profile of feeling cold a hypothetical individual might make. First, let’s make the model return the predictions on new data.</p>
<div id="6ccec484" class="cell" data-execution_count="32">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb59" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb59-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Have formulae create our design matrix</span></span>
<span id="cb59-2">newX <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (model_design</span>
<span id="cb59-3">        .common.evaluate_new_data(predmat) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># the data we made earlier for OLS</span></span>
<span id="cb59-4">        .as_dataframe()</span>
<span id="cb59-5">        .drop(columns<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Intercept'</span>)</span>
<span id="cb59-6">       )</span>
<span id="cb59-7"></span>
<span id="cb59-8"></span>
<span id="cb59-9"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> hotcold_ordinal:</span>
<span id="cb59-10">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Set new data</span></span>
<span id="cb59-11">    pm.set_data({<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Xdata'</span>: np.array(newX), </span>
<span id="cb59-12">                 <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'ydata'</span>: np.zeros(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(newX)) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># placeholder, not important</span></span>
<span id="cb59-13">                })</span>
<span id="cb59-14">    </span>
<span id="cb59-15">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Predict</span></span>
<span id="cb59-16">    predictions <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.sample_posterior_predictive(idata, extend_inferencedata<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>, predictions<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span></code></pre></div></div>
</div>
<pre><code>Sampling: [y]</code></pre>
<style>
    /* Turns off some styling */
    progress {
        /* gets rid of default border in Firefox and Opera. */
        border: none;
        /* Needs to be in here for Safari polyfill so background images work as expected. */
        background-size: auto;
    }
    progress:not([value]), progress:not([value])::-webkit-progress-bar {
        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);
    }
    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {
        background: #F44336;
    }
</style>
<div>
<p><progress value="4000" class="" max="4000" style="width:300px; height:20px; vertical-align: middle;"></progress> 100.00% [4000/4000 00:01&lt;00:00]</p>
</div>
<p>Now we have the predictions - which are draws from the posterior predictive distribution, conditional on the hypothetical model inputs - we can get a sense of how the pattern of responses changes at these different levels of skin exposure and self objectification. These predictions are a bit unwieldy at the moment, so it makes sense to aggregate them a bit. For each of the four predicted observations, we can take the frequency of each of the responses in the posterior:</p>
<div id="e85612ec" class="cell" data-execution_count="33">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb61" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb61-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Get frequencies and add in prediction data, and reshape</span></span>
<span id="cb61-2">freq_counts_posterior <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (predictions</span>
<span id="cb61-3">                         [<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'predictions'</span>]</span>
<span id="cb61-4">                         .to_dataframe()</span>
<span id="cb61-5">                         .add(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># adding one to resemble original data</span></span>
<span id="cb61-6">                         .groupby([<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'y_dim_2'</span>]) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Over each observation</span></span>
<span id="cb61-7">                         [<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'y'</span>]</span>
<span id="cb61-8">                         .value_counts(normalize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span>
<span id="cb61-9">                         .unstack(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'y'</span>)</span>
<span id="cb61-10">                         .pipe(<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">lambda</span> x: pd.concat([predmat, x], axis<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'columns'</span>))</span>
<span id="cb61-11">                         .melt(id_vars<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Self_Obj_Z'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Clothes_RF_Z'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Temp_True_Z'</span>],</span>
<span id="cb61-12">                                        var_name<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'response'</span>, value_name<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'pp'</span>)</span>
<span id="cb61-13">                         .replace({<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Self_Obj_Z'</span>: {<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>: <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Low Self Objectify'</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>: <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'High Self Objectify'</span>},</span>
<span id="cb61-14">                                   <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Clothes_RF_Z'</span>: {<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>: <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Low Skin Exposure'</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>: <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'High Skin Exposure'</span>}})</span>
<span id="cb61-15">                        )</span>
<span id="cb61-16"></span>
<span id="cb61-17">freq_counts_posterior.head()</span></code></pre></div></div>
</div>
<div>

<table class="dataframe table table-sm table-striped small">
<thead>
<tr>
<th>
</th>
<th>
Self_Obj_Z
</th>
<th>
Clothes_RF_Z
</th>
<th>
Temp_True_Z
</th>
<th>
response
</th>
<th>
pp
</th>
</tr>
</thead>
<tbody>
<tr>
<th>
0
</th>
<td>
Low Self Objectify
</td>
<td>
Low Skin Exposure
</td>
<td>
0
</td>
<td>
1
</td>
<td>
0.14525
</td>
</tr>
<tr>
<th>
1
</th>
<td>
Low Self Objectify
</td>
<td>
High Skin Exposure
</td>
<td>
0
</td>
<td>
1
</td>
<td>
0.06600
</td>
</tr>
<tr>
<th>
2
</th>
<td>
High Self Objectify
</td>
<td>
Low Skin Exposure
</td>
<td>
0
</td>
<td>
1
</td>
<td>
0.09750
</td>
</tr>
<tr>
<th>
3
</th>
<td>
High Self Objectify
</td>
<td>
High Skin Exposure
</td>
<td>
0
</td>
<td>
1
</td>
<td>
0.11025
</td>
</tr>
<tr>
<th>
4
</th>
<td>
Low Self Objectify
</td>
<td>
Low Skin Exposure
</td>
<td>
0
</td>
<td>
2
</td>
<td>
0.13850
</td>
</tr>
</tbody>
</table>
</div>
<p>And lets see if we can plot these implied predictions across the categories.</p>
<div id="32cafeb2" class="cell" data-execution_count="34">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb62" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb62-1">(</span>
<span id="cb62-2">    so.Plot(data<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>freq_counts_posterior, x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'response'</span>, y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'pp'</span>, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Self_Obj_Z'</span>)</span>
<span id="cb62-3">    .add(so.Bar(alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.2</span>), so.Dodge())</span>
<span id="cb62-4">    .facet(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Clothes_RF_Z'</span>)</span>
<span id="cb62-5">    .scale(x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>so.Nominal(values<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span>]))</span>
<span id="cb62-6">    .theme(plt.style.library[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'bmh'</span>])</span>
<span id="cb62-7">    .layout(size<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>))</span>
<span id="cb62-8">)</span></code></pre></div></div>
</div>
<p><img src="https://alexjonesphd.github.io/posts/ordinal-regression/output_70_0.png" class="img-fluid"></p>
<p>Here we can see the implied probabilites of a response across the conditions the model predicted. For high skin exposure, high self objectifiers are more likely to respond a 1, its about equal for 2, more likely to respond a 3, and beyond that, there is higher probability of a low self objectifier using the higher categories. For low skin exposure, its almost the opposite pattern - high self objectifiers seem to have a higher probability of responding to being colder than low self objectifiers. The highest likelihood is with the responses 3/4 in both cases.</p>
<p>Its possible to simplify (complicate?) this a bit further, by taking the odds ratio of a condition against the other. For example, we can take the odds of a “1” response for a low self objectifying individual under the low skin exposure condition, divide it by the odds of a “1” response for a high self objectifying individual, under the same condition. Lets see what that looks like:</p>
<div id="267671e1" class="cell" data-execution_count="35">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb63" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb63-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Compute odds ratios</span></span>
<span id="cb63-2">odd <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (freq_counts_posterior</span>
<span id="cb63-3">       .assign(odds<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">lambda</span> x: x[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'pp'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> x[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'pp'</span>]))</span>
<span id="cb63-4">       .groupby([<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Clothes_RF_Z'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'response'</span>]) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># comparing self objectifer here, as we will merge over those</span></span>
<span id="cb63-5">       .<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">apply</span>(<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">lambda</span> x: x.iloc[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> x.iloc[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># odds of a high self objectifier to a low</span></span>
<span id="cb63-6">       .to_frame(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'odds'</span>)</span>
<span id="cb63-7">       .reset_index()</span>
<span id="cb63-8">      )</span>
<span id="cb63-9"></span>
<span id="cb63-10"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Plot</span></span>
<span id="cb63-11">(</span>
<span id="cb63-12">    so.Plot(data<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>odd, x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'response'</span>, y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'odds'</span>, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Clothes_RF_Z'</span>)</span>
<span id="cb63-13">    .add(so.Bar(), so.Dodge())</span>
<span id="cb63-14">    .theme(plt.style.library[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'bmh'</span>])</span>
<span id="cb63-15">    .label(y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Odds of High Objectifier to Low Objectifier</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">selecting response'</span>)</span>
<span id="cb63-16">)</span></code></pre></div></div>
</div>
<p><img src="https://alexjonesphd.github.io/posts/ordinal-regression/output_72_0.png" class="img-fluid"></p>
<p>We can see a clear pattern here. For high skin exposure, the odds a high self-objectifier selects a 1 is much greater than a low self objectifier, and the pattern reverses as the response increases up to feeling very cold.</p>
</section>
<section id="a-final-note-on-priors-for-cutpoints" class="level2">
<h2 class="anchored" data-anchor-id="a-final-note-on-priors-for-cutpoints">A final note on priors for cutpoints</h2>
<p>Throughout the examples used above, I’ve been placing normally distributed priors on each of the cutpoints. This has been mostly fine, though the standard deviation of those normal distributions has sometimes been quite small to make the distribution about each cutpoint narrow. Some may object to this, and indeed, in some of the examples above, reduction of the prior width was required to get the model to estimate.</p>
<p>The Bayesian modelling community have been advocating the use of a Dirichlet prior over the cutpoints (see <a href="https://github.com/pymc-devs/pymc/discussions/5066">here</a>). The Dirichlet is a multivariate generalisation of the Beta distribution, generating a set of probabilities that all sum to one. With some tricks and transforms, its possible to use the Dirichlet to set strictly ordered cutpoints.</p>
<p>The trick is to take the cumulative sum across the draws from a Dirichlet, and add and multiply values to it to expand its range (which is naturally always between 0-1). We’ll revisit the data from Kruschke a final time to put Dirichlet priors on the cutpoints. First, lets see a draw from a Dirichlet.</p>
<div id="bb357c33" class="cell" data-execution_count="36">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb64" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb64-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Get a draw for 5 cutpoints from the Dirichlet</span></span>
<span id="cb64-2">draw1 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.draw(pm.Dirichlet.dist(a<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>np.ones(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>)), <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb64-3"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Five values in the range of 0-1'</span>, draw1.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">round</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>))</span>
<span id="cb64-4"></span>
<span id="cb64-5"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># How can we constrain order? Use a cumulative sum</span></span>
<span id="cb64-6"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Five ordered values, range 0-1:'</span>, draw1.cumsum().<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">round</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>))</span>
<span id="cb64-7"></span>
<span id="cb64-8"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Now expand them to the range of 2.5 to 5.5, like we did earlier for the normal priors</span></span>
<span id="cb64-9"><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2.5</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> draw1.cumsum() <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> (<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">5.5</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2.5</span>)</span></code></pre></div></div>
</div>
<pre><code>Five values in the range of 0-1 [0.06 0.19 0.16 0.58 0.02]
Five ordered values, range 0-1: [0.06 0.25 0.41 0.98 1.  ]





array([2.67595003, 3.24229597, 3.71680105, 5.44940491, 5.5       ])</code></pre>
<p>The final step above uses a mathematical sleight-of-hand to expand the range. We can expand 0-1 numbers in the range of [a, b] by the simple formula of a + x * (b - a).</p>
<p>More confusion awaits however. As a result of the cumulative sum, the final cutpoint will always be a constant. Before transforming, it will be fixed at 1, so will always take on the value <em>b</em> after transforming. If we want to do the Kruschke-style top and bottom pinned cutpoints, we can actually <strong>omit</strong> the top cutpoint, as it will fall out of the cumulative-sum Dirichlet, and simply pin the bottom.</p>
<p>Let’s see how to implement this in PyMC using the <code>one_group</code> data.</p>
<div id="49e115aa" class="cell" data-execution_count="37">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb66" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb66-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Reminder of one-group</span></span>
<span id="cb66-2">K <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">7</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># number of options</span></span>
<span id="cb66-3">Kc <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> K <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># number of cutpoints in total</span></span>
<span id="cb66-4">Kt <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Kc <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># We want now to only pin ONE</span></span>
<span id="cb66-5"></span>
<span id="cb66-6"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Create coordinates</span></span>
<span id="cb66-7">c <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> {<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Kc'</span>: <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(Kc),</span>
<span id="cb66-8">     <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Kt'</span>: <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(Kt)}</span>
<span id="cb66-9"></span>
<span id="cb66-10"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> pm.Model(coords<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>c) <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> dirichlet_prior:</span>
<span id="cb66-11">    </span>
<span id="cb66-12">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Cutpoints to estimate</span></span>
<span id="cb66-13">    cut_raw <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Dirichlet(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'cut_raw'</span>,</span>
<span id="cb66-14">                           a<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>np.ones(Kt),</span>
<span id="cb66-15">                           dims<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Kt'</span>)</span>
<span id="cb66-16">    </span>
<span id="cb66-17">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Pin lower and transform</span></span>
<span id="cb66-18">    cutpoints <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Deterministic(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'cutpoints'</span>,</span>
<span id="cb66-19">                                 pt.concatenate(</span>
<span id="cb66-20">                                     [</span>
<span id="cb66-21">                                         np.ones(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.5</span>, <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Fixing the first cut</span></span>
<span id="cb66-22">                                         <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2.5</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> cut_raw.cumsum() <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> (<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">6.5</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2.5</span>) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># The transform of the cumulative sum, top (which we want fixed) - lower</span></span>
<span id="cb66-23">                                     ]</span>
<span id="cb66-24">                                 ),</span>
<span id="cb66-25">                                 dims<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Kc'</span>)</span>
<span id="cb66-26">    </span>
<span id="cb66-27">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Mu and sigma</span></span>
<span id="cb66-28">    μ <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Normal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'μ'</span>, mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb66-29">    σ <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.HalfNormal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'σ'</span>, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>)</span>
<span id="cb66-30">    </span>
<span id="cb66-31">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Into orderedProbit</span></span>
<span id="cb66-32">    pm.OrderedProbit(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'y'</span>, eta<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>μ, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>σ,</span>
<span id="cb66-33">                     cutpoints<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>cutpoints,</span>
<span id="cb66-34">                     compute_p<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>,</span>
<span id="cb66-35">                     observed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>one_group[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'y'</span>].values)</span>
<span id="cb66-36">    </span>
<span id="cb66-37">    idata3 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.sample(random_seed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>rng)</span></code></pre></div></div>
</div>
<pre><code>Auto-assigning NUTS sampler...
Initializing NUTS using jitter+adapt_diag...
Multiprocess sampling (4 chains in 4 jobs)
NUTS: [cut_raw, μ, σ]</code></pre>
<style>
    /* Turns off some styling */
    progress {
        /* gets rid of default border in Firefox and Opera. */
        border: none;
        /* Needs to be in here for Safari polyfill so background images work as expected. */
        background-size: auto;
    }
    progress:not([value]), progress:not([value])::-webkit-progress-bar {
        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);
    }
    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {
        background: #F44336;
    }
</style>
<div>
<p><progress value="8000" class="" max="8000" style="width:300px; height:20px; vertical-align: middle;"></progress> 100.00% [8000/8000 00:18&lt;00:00 Sampling 4 chains, 0 divergences]</p>
</div>
<pre><code>Sampling 4 chains for 1_000 tune and 1_000 draw iterations (4_000 + 4_000 draws total) took 35 seconds.</code></pre>
<p>You definitely get a speedup in sampling! Let’s examine the estimates of the cutpoints:</p>
<div id="ad1dd397" class="cell" data-execution_count="38">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb69" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb69-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Check the output between both models</span></span>
<span id="cb69-2">pd.concat(</span>
<span id="cb69-3">    [</span>
<span id="cb69-4">        az.summary(idata3, var_names<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'cutpoints'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'μ'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'σ'</span>], kind<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'stats'</span>).assign(model<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Dirichlet Prior'</span>),</span>
<span id="cb69-5">        az.summary(idata2, var_names<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'cutpoints'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'μ'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'σ'</span>], kind<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'stats'</span>).assign(model<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Normal Prior'</span>)</span>
<span id="cb69-6">    ]</span>
<span id="cb69-7">)</span></code></pre></div></div>
</div>
<div>

<table class="dataframe table table-sm table-striped small">
<thead>
<tr>
<th>
</th>
<th>
mean
</th>
<th>
sd
</th>
<th>
hdi_3%
</th>
<th>
hdi_97%
</th>
<th>
model
</th>
</tr>
</thead>
<tbody>
<tr>
<th>
cutpoints[0]
</th>
<td>
1.500
</td>
<td>
0.000
</td>
<td>
1.500
</td>
<td>
1.500
</td>
<td>
Dirichlet Prior
</td>
</tr>
<tr>
<th>
cutpoints[1]
</th>
<td>
2.718
</td>
<td>
0.179
</td>
<td>
2.500
</td>
<td>
3.043
</td>
<td>
Dirichlet Prior
</td>
</tr>
<tr>
<th>
cutpoints[2]
</th>
<td>
3.750
</td>
<td>
0.314
</td>
<td>
3.189
</td>
<td>
4.335
</td>
<td>
Dirichlet Prior
</td>
</tr>
<tr>
<th>
cutpoints[3]
</th>
<td>
4.778
</td>
<td>
0.404
</td>
<td>
4.057
</td>
<td>
5.532
</td>
<td>
Dirichlet Prior
</td>
</tr>
<tr>
<th>
cutpoints[4]
</th>
<td>
5.671
</td>
<td>
0.389
</td>
<td>
4.945
</td>
<td>
6.317
</td>
<td>
Dirichlet Prior
</td>
</tr>
<tr>
<th>
cutpoints[5]
</th>
<td>
6.500
</td>
<td>
0.000
</td>
<td>
6.500
</td>
<td>
6.500
</td>
<td>
Dirichlet Prior
</td>
</tr>
<tr>
<th>
μ
</th>
<td>
1.044
</td>
<td>
0.357
</td>
<td>
0.361
</td>
<td>
1.693
</td>
<td>
Dirichlet Prior
</td>
</tr>
<tr>
<th>
σ
</th>
<td>
2.605
</td>
<td>
0.397
</td>
<td>
1.886
</td>
<td>
3.322
</td>
<td>
Dirichlet Prior
</td>
</tr>
<tr>
<th>
cutpoints[0]
</th>
<td>
1.500
</td>
<td>
0.000
</td>
<td>
1.500
</td>
<td>
1.500
</td>
<td>
Normal Prior
</td>
</tr>
<tr>
<th>
cutpoints[1]
</th>
<td>
2.144
</td>
<td>
0.110
</td>
<td>
1.943
</td>
<td>
2.354
</td>
<td>
Normal Prior
</td>
</tr>
<tr>
<th>
cutpoints[2]
</th>
<td>
3.048
</td>
<td>
0.148
</td>
<td>
2.767
</td>
<td>
3.318
</td>
<td>
Normal Prior
</td>
</tr>
<tr>
<th>
cutpoints[3]
</th>
<td>
4.035
</td>
<td>
0.159
</td>
<td>
3.730
</td>
<td>
4.331
</td>
<td>
Normal Prior
</td>
</tr>
<tr>
<th>
cutpoints[4]
</th>
<td>
5.106
</td>
<td>
0.181
</td>
<td>
4.763
</td>
<td>
5.442
</td>
<td>
Normal Prior
</td>
</tr>
<tr>
<th>
cutpoints[5]
</th>
<td>
6.500
</td>
<td>
0.000
</td>
<td>
6.500
</td>
<td>
6.500
</td>
<td>
Normal Prior
</td>
</tr>
<tr>
<th>
μ
</th>
<td>
1.035
</td>
<td>
0.289
</td>
<td>
0.483
</td>
<td>
1.543
</td>
<td>
Normal Prior
</td>
</tr>
<tr>
<th>
σ
</th>
<td>
2.131
</td>
<td>
0.280
</td>
<td>
1.649
</td>
<td>
2.679
</td>
<td>
Normal Prior
</td>
</tr>
</tbody>
</table>
</div>
<p>The results look broadly similar here, which is reassuring. <strong>But</strong>, the parameters of the Dirichlet prior model are <em>closer to those reported in the text</em>. While an ordered transform of the normal distribution certainly works, in cases where we know the generating parameters, a model formulation that brings us closer to that is probably to be preferred, so its really vital to understand this formulation, even if at first it is tricky to comprehend.</p>
<div id="47f20d0f" class="cell" data-execution_count="39">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb70" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb70-1"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%</span>load_ext watermark</span>
<span id="cb70-2"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%</span>watermark <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">--</span>iversions</span></code></pre></div></div>
</div>
<pre><code>statsmodels: 0.13.5
numpy      : 1.25.0
scipy      : 1.11.1
pymc       : 5.6.0
pytensor   : 2.12.3
arviz      : 0.15.1
matplotlib : 3.7.2
pandas     : 2.0.3
seaborn    : 0.12.2</code></pre>


</section>

 ]]></description>
  <category>Bayesian</category>
  <category>PyMC</category>
  <category>ordinal</category>
  <guid>https://alexjonesphd.github.io/posts/ordinal-regression/</guid>
  <pubDate>Mon, 10 Jul 2023 23:00:00 GMT</pubDate>
  <media:content url="https://alexjonesphd.github.io/posts/ordinal-regression/output_49_0.png" medium="image" type="image/png" height="73" width="144"/>
</item>
<item>
  <title>Out-of-sample predictions with PyMC: A hieararchical linear model case study</title>
  <link>https://alexjonesphd.github.io/posts/out-of-sample/</link>
  <description><![CDATA[ 




<p>PyMC is an awesome probabilistic programming language that makes it easy to build Bayesian statistical models, and I’ve used it exclusively for several years for data analysis problems. Despite its flexibility, one of the few sticking points I’ve encountered is trying to generate out-of-sample predictions. In the age of machine learning and predictive modelling, simply fitting a model to data and assessing the quality of predictions is no longer the gold standard - rather, our models should be able to predict data that they have never seen before. Python libraries like <code>scikit-learn</code> place the predictive utility of models front and centre, but it is not so straightforward to do this in PyMC. This is a shame, because Bayesian models come with free uncertainty around predictions - an incredibly powerful feature when uncertainty is so important to quantify, and yet point estimates or confusing frequentist confidence intervals are the main currency of prediction.</p>
<p>This problem is especially compounded with hierarchial models, because they several kinds of choices when doing out-of-sample predictions! For example: - A hierarchical model could predict new, unobserved data for an “average” person, omitting the group-specific effects entirely - this is common in many packages as the default, such as in <code>lme4</code> in R. - A hierarchical model could predict on new, unobserved data for a known group-specific (or random effect) value. An example would be using the model to predict new scores on an unobserved quantity for an individual <em>already in the dataset</em>. - A hierarchical model might predict unobserved data for an <em>unknown</em> group-specific effect. An example of this would be predicting scores for unseen, new groups.</p>
<p>Doing this in PyMC is possible, but not immediately obvious. Here, I’ll try some examples of out of sample predictions using PyMC. Much of this was inspired by the excellent webinar on out of sample predictions by Ricardo Vieira and Alex Andorra, on the <em>Learning Bayesian Statistics</em> podcast. Its also worth noting that the excellent <code>bambi</code> package abstracts much of this away and makes prediction very easy, but there are still many occasions when I need to write a model myself that <code>bambi</code> doesn’t yet support or I need more specific control and detail.</p>
<p>Let’s go!</p>
<div id="c503516a" class="cell" data-execution_count="1">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb1-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Imports</span></span>
<span id="cb1-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> bambi <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> bmb</span>
<span id="cb1-3"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> pymc <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> pm</span>
<span id="cb1-4"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> pandas <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> pd</span>
<span id="cb1-5"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> numpy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> np</span>
<span id="cb1-6"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> arviz <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> az</span>
<span id="cb1-7"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> seaborn <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> sns</span>
<span id="cb1-8"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> seaborn.objects <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> so</span>
<span id="cb1-9"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> matplotlib.pyplot <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> plt</span>
<span id="cb1-10"></span>
<span id="cb1-11"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> itertools <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> product</span>
<span id="cb1-12"></span>
<span id="cb1-13">rng <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.random.default_rng(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">42</span>)</span>
<span id="cb1-14">plt.style.use(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'bmh'</span>)</span></code></pre></div></div>
</div>
<p>As a working example, I’ll use the <code>sleepstudy</code> dataset that comes with <code>bambi</code>. This simple dataset is hiearchical in nature, showing reaction times on a task for people who had participated in a sleep deprivation study. Participants are measured over several days, providing reaction times once a day. Thus, the reaction times are nested within the participants, making for an ideal case of hiearchical modelling.</p>
<div id="9ba8e291" class="cell" data-execution_count="2">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb2-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Load sleep</span></span>
<span id="cb2-2">sleep <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> bmb.load_data(dataset<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'sleepstudy'</span>)</span>
<span id="cb2-3">display(sleep.head())</span>
<span id="cb2-4"></span>
<span id="cb2-5"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Visualise the reaction times for each day</span></span>
<span id="cb2-6">sns.kdeplot(data<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>sleep, x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Reaction'</span>, hue<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Days'</span>)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span></code></pre></div></div>
</div>
<div>

<table class="dataframe table table-sm table-striped small">
<thead>
<tr>
<th>
</th>
<th>
Reaction
</th>
<th>
Days
</th>
<th>
Subject
</th>
</tr>
</thead>
<tbody>
<tr>
<th>
0
</th>
<td>
249.5600
</td>
<td>
0
</td>
<td>
308
</td>
</tr>
<tr>
<th>
1
</th>
<td>
258.7047
</td>
<td>
1
</td>
<td>
308
</td>
</tr>
<tr>
<th>
2
</th>
<td>
250.8006
</td>
<td>
2
</td>
<td>
308
</td>
</tr>
<tr>
<th>
3
</th>
<td>
321.4398
</td>
<td>
3
</td>
<td>
308
</td>
</tr>
<tr>
<th>
4
</th>
<td>
356.8519
</td>
<td>
4
</td>
<td>
308
</td>
</tr>
</tbody>
</table>
</div>
<p><img src="https://alexjonesphd.github.io/posts/out-of-sample/output_3_1.png" class="img-fluid"></p>
<p>Reaction time gets a bit noisier and slower, as the length of deprivation increases, as we’d expect!</p>
<section id="out-of-sample-predictions-approach-one---pm.mutabledata" class="level3">
<h3 class="anchored" data-anchor-id="out-of-sample-predictions-approach-one---pm.mutabledata">Out of sample predictions, approach one - <code>pm.MutableData</code></h3>
<p>In situations outside of the hierarchical model, PyMC has a data container class that allows for simple switching out of predictor and observed datasets inside a model. The model is first estimated to get the posterior, and then the data is swapped out for new observations, and a posterior-predictive sample can be drawn.</p>
<p>Below, a non-hiearchical (or ‘no pooling’) model is fitted to the data. This obviously ignores the nesting withing participants, so is done only to illustrate how easy <code>pm.MutableData</code> makes swapping out predictions. First, let us build a simple linear regression, predicitng reaction time from the observed number of days, and setting the <code>Days</code> variable as a mutable object, as well as setting the dependent variable <code>Reaction</code> as one, too. The priors will be roughly informative given the scale of the data we see in the above plot.</p>
<div id="5a37adaa" class="cell" data-execution_count="3">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb3-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Build the model</span></span>
<span id="cb3-2"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> pm.Model() <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> no_pool:</span>
<span id="cb3-3">    </span>
<span id="cb3-4">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Set Days as mutable data</span></span>
<span id="cb3-5">    X <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.MutableData(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'X'</span>, sleep[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Days'</span>].to_numpy())</span>
<span id="cb3-6">    y <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.MutableData(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'y'</span>, sleep[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Reaction'</span>].to_numpy())</span>
<span id="cb3-7">    </span>
<span id="cb3-8">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Prior for intercept, roughly informative</span></span>
<span id="cb3-9">    β<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Normal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'β0'</span>, mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">300</span>)</span>
<span id="cb3-10">    </span>
<span id="cb3-11">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Prior for slope of Days, also roughly informative</span></span>
<span id="cb3-12">    β<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Normal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'β1'</span>, mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>)</span>
<span id="cb3-13">    </span>
<span id="cb3-14">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Noise variability</span></span>
<span id="cb3-15">    σ <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.HalfCauchy(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'σ'</span>, beta<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>)</span>
<span id="cb3-16">    </span>
<span id="cb3-17">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Linear predictor</span></span>
<span id="cb3-18">    μ <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> β<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> X<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>β<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb3-19">    </span>
<span id="cb3-20">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Likelihood is normal</span></span>
<span id="cb3-21">    pm.Normal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'likelihood'</span>, mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>μ, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>σ, observed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>y)</span>
<span id="cb3-22">    </span>
<span id="cb3-23">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Sample</span></span>
<span id="cb3-24">    idata <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.sample()</span></code></pre></div></div>
</div>
<pre><code>Auto-assigning NUTS sampler...
Initializing NUTS using jitter+adapt_diag...
Multiprocess sampling (4 chains in 4 jobs)
NUTS: [β0, β1, σ]</code></pre>
<style>
    /* Turns off some styling */
    progress {
        /* gets rid of default border in Firefox and Opera. */
        border: none;
        /* Needs to be in here for Safari polyfill so background images work as expected. */
        background-size: auto;
    }
    progress:not([value]), progress:not([value])::-webkit-progress-bar {
        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);
    }
    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {
        background: #F44336;
    }
</style>
<div>
<p><progress value="8000" class="" max="8000" style="width:300px; height:20px; vertical-align: middle;"></progress> 100.00% [8000/8000 00:11&lt;00:00 Sampling 4 chains, 0 divergences]</p>
</div>
<pre><code>Sampling 4 chains for 1_000 tune and 1_000 draw iterations (4_000 + 4_000 draws total) took 31 seconds.</code></pre>
<p>With the posterior in hand, we can examine distributions of the parameters if we want to. We can also sample the posterior-predictive distribution, which will inform us of the distribution of the likely future values, integrating over the uncertainty in the parameters of the model. To be very strict with definitions, this is more of a <em>retrodiction</em> than a prediction, because the model will generate likely values for the data about which it has seen. Lets generate the posterior predictive (for the in-sample data), and see how it compares to the original data.</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb6-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Sample the posterior predictive</span></span>
<span id="cb6-2"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> no_pool:</span>
<span id="cb6-3">    idata.extend(pm.sample_posterior_predictive(idata))</span>
<span id="cb6-4"></span>
<span id="cb6-5"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Visualise </span></span>
<span id="cb6-6">az.plot_ppc(idata, num_pp_samples<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">500</span>)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span></code></pre></div></div>
<pre><code>Sampling: [likelihood]</code></pre>
<style>
    /* Turns off some styling */
    progress {
        /* gets rid of default border in Firefox and Opera. */
        border: none;
        /* Needs to be in here for Safari polyfill so background images work as expected. */
        background-size: auto;
    }
    progress:not([value]), progress:not([value])::-webkit-progress-bar {
        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);
    }
    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {
        background: #F44336;
    }
</style>
<div>
<p><progress value="4000" class="" max="4000" style="width:300px; height:20px; vertical-align: middle;"></progress> 100.00% [4000/4000 00:00&lt;00:00]</p>
</div>
<p><img src="https://alexjonesphd.github.io/posts/out-of-sample/output_8_3.png" class="img-fluid"></p>
<p>This looks reasonable, but the predictions could be better, but we will move on!</p>
<p>Now lets imagine a scenario where some unpleasant experimenter wants to know what happens if we were to deprive people of sleep for 15 days - what would the reaction time look like for that? We can simply add in a new datapoint (remember our model is entirely blind to different participants) using <code>pm.set_data</code>, for our <code>X</code> mutable data, and resample the posterior predictive distribution. We will also need to add a “placeholder” value for <code>y</code>. In many cases you may <em>genuine</em> observations for Y that you are predicting, but we don’t here, so we simply add a new variable as a stopgap.</p>
<div id="74f4543d" class="cell" data-execution_count="4">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb8" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb8-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Generate a prediction for reaction time for 20 days of deprivation</span></span>
<span id="cb8-2"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> no_pool:</span>
<span id="cb8-3">    </span>
<span id="cb8-4">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Set the data, and add in a new coordinate for it</span></span>
<span id="cb8-5">    pm.set_data({<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'X'</span>: np.array([<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">15</span>]),</span>
<span id="cb8-6">                 <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'y'</span>: np.array([<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">99</span>])</span>
<span id="cb8-7">                })</span>
<span id="cb8-8">    </span>
<span id="cb8-9">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Sample posterior predictive, and set predictions = True</span></span>
<span id="cb8-10">    idata.extend(pm.sample_posterior_predictive(idata, predictions<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>))</span></code></pre></div></div>
</div>
<pre><code>Sampling: [likelihood]</code></pre>
<style>
    /* Turns off some styling */
    progress {
        /* gets rid of default border in Firefox and Opera. */
        border: none;
        /* Needs to be in here for Safari polyfill so background images work as expected. */
        background-size: auto;
    }
    progress:not([value]), progress:not([value])::-webkit-progress-bar {
        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);
    }
    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {
        background: #F44336;
    }
</style>
<div>
<p><progress value="4000" class="" max="4000" style="width:300px; height:20px; vertical-align: middle;"></progress> 100.00% [4000/4000 00:00&lt;00:00]</p>
</div>
<p>Lets see what happens by extracting the data point, and comparing it to the observed data</p>
<div id="5cb8fe3c" class="cell" data-execution_count="5">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb10" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb10-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Plot the data</span></span>
<span id="cb10-2"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> sns.plotting_context(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'poster'</span>):</span>
<span id="cb10-3">    </span>
<span id="cb10-4">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Canvas</span></span>
<span id="cb10-5">    fig, ax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plt.subplots(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, figsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>))</span>
<span id="cb10-6">    </span>
<span id="cb10-7">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Scatter the observed data</span></span>
<span id="cb10-8">    sns.scatterplot(data<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>sleep, x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Days'</span>, y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Reaction'</span>, ax<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>ax, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'white'</span>, edgecolor<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>, label<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Observed'</span>)</span>
<span id="cb10-9">    </span>
<span id="cb10-10">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Add in the predicted datapoints mean by aggregating it across chains and draws</span></span>
<span id="cb10-11">    ax.plot(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">15</span>, idata[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'predictions'</span>][<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'likelihood'</span>].mean((<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'chain'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'draw'</span>)), color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>, marker<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'s'</span>, label<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Predicted'</span>)</span>
<span id="cb10-12">    </span>
<span id="cb10-13">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Compute the HDI</span></span>
<span id="cb10-14">    hdi <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> az.hdi(idata[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'predictions'</span>][<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'likelihood'</span>],</span>
<span id="cb10-15">                 hdi_prob<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.95</span>).to_array().to_numpy()</span>
<span id="cb10-16">    </span>
<span id="cb10-17">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Plot it</span></span>
<span id="cb10-18">    ax.plot([<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">15</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">15</span>], hdi.flatten(), color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>)</span>
<span id="cb10-19">    </span>
<span id="cb10-20">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Clean up axis</span></span>
<span id="cb10-21">    ax.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">set</span>(ylabel<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Reaction Time'</span>, </span>
<span id="cb10-22">           xticks<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span>))</span>
<span id="cb10-23">    </span>
<span id="cb10-24">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Turn on legend()</span></span>
<span id="cb10-25">    ax.legend(frameon<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>)</span></code></pre></div></div>
</div>
<p><img src="https://alexjonesphd.github.io/posts/out-of-sample/output_12_0.png" class="img-fluid"></p>
<p>The model implies, with some uncertainty, that the reaction time will be pretty slow after 20 days in the study. Certainly it will be in the range of some of the highest observed reaction times in the study.</p>
</section>
<section id="fitting-the-hierarchical-model" class="level1">
<h1>Fitting the hierarchical model</h1>
<p>We can now turn to predictions with a hierarchical model. For the purposes of the <code>sleepstudy</code> data, this involves a group-specific effect for each participant who provides multiple ratings. This is achievable by taking advantages of the labelled coordinates PyMC accepts, and indexing the prior for each participant using fancy-indexing like any normal NumPy array. First we build the model, using the <code>.factorize()</code> method of a <code>pd.Series</code> object to obtain the indexes and labels for each participant.</p>
<div id="171d584a" class="cell" data-execution_count="6">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb11" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb11-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Get index locations and labels</span></span>
<span id="cb11-2">subj_ind, subj_label <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> sleep[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Subject'</span>].factorize()</span>
<span id="cb11-3"></span>
<span id="cb11-4"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(subj_ind)</span>
<span id="cb11-5"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(subj_label)</span></code></pre></div></div>
</div>
<pre><code>[ 0  0  0  0  0  0  0  0  0  0  1  1  1  1  1  1  1  1  1  1  2  2  2  2
  2  2  2  2  2  2  3  3  3  3  3  3  3  3  3  3  4  4  4  4  4  4  4  4
  4  4  5  5  5  5  5  5  5  5  5  5  6  6  6  6  6  6  6  6  6  6  7  7
  7  7  7  7  7  7  7  7  8  8  8  8  8  8  8  8  8  8  9  9  9  9  9  9
  9  9  9  9 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11
 12 12 12 12 12 12 12 12 12 12 13 13 13 13 13 13 13 13 13 13 14 14 14 14
 14 14 14 14 14 14 15 15 15 15 15 15 15 15 15 15 16 16 16 16 16 16 16 16
 16 16 17 17 17 17 17 17 17 17 17 17]
Index([308, 309, 310, 330, 331, 332, 333, 334, 335, 337, 349, 350, 351, 352,
       369, 370, 371, 372],
      dtype='int64')</code></pre>
<p>The first variable keeps track of where responses belong to which group (i.e., participant), and the second is the label. We use the first to index the prior in the model, and the second to give the prior instantiation the number of individual priors, as PyMC supports multidimensional priors:</p>
<div id="22e119ad" class="cell" data-execution_count="7">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb13" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb13-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># First set up the coords, passed as a dictionary</span></span>
<span id="cb13-2">c <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> {<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'subject'</span>: subj_label} <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># PyMC infers number of labels</span></span>
<span id="cb13-3"></span>
<span id="cb13-4"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> pm.Model(coords<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>c) <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> hierarchical:</span>
<span id="cb13-5">    </span>
<span id="cb13-6">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Add in X and y (though this is not strictly needed</span></span>
<span id="cb13-7">    X <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.MutableData(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'X'</span>, sleep[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Days'</span>].to_numpy())</span>
<span id="cb13-8">    y <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.MutableData(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'y'</span>, sleep[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Reaction'</span>].to_numpy())</span>
<span id="cb13-9">    </span>
<span id="cb13-10">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Hyperprior for the variability of the subjects</span></span>
<span id="cb13-11">    subj_σ <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.HalfCauchy(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'subj_σ'</span>, beta<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">50</span>)</span>
<span id="cb13-12">    subj_offset <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.ZeroSumNormal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'subj_offset'</span>, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>subj_σ, dims<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'subject'</span>) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Zero sum simplifies hiearchical modelling, and dims infers number of individual priors</span></span>
<span id="cb13-13">    </span>
<span id="cb13-14">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Roughly informative coefficients prior</span></span>
<span id="cb13-15">    β<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Normal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'β0'</span>, mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">300</span>)</span>
<span id="cb13-16">    β<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Normal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'β1'</span>, mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>)</span>
<span id="cb13-17">    </span>
<span id="cb13-18">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Noise variability</span></span>
<span id="cb13-19">    σ <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.HalfCauchy(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'σ'</span>, beta<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">50</span>)</span>
<span id="cb13-20">    </span>
<span id="cb13-21">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Linear predictor now includes indexing of the offset with `subj_ind`</span></span>
<span id="cb13-22">    μ <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> β<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> subj_offset[subj_ind] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> X<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>β<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb13-23">    </span>
<span id="cb13-24">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Likelihood is normal</span></span>
<span id="cb13-25">    pm.Normal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'likelihood'</span>, mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>μ, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>σ, observed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>y)</span>
<span id="cb13-26">    </span>
<span id="cb13-27">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Sample</span></span>
<span id="cb13-28">    hierarchical_idata <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.sample()</span></code></pre></div></div>
</div>
<pre><code>Auto-assigning NUTS sampler...
Initializing NUTS using jitter+adapt_diag...
Multiprocess sampling (4 chains in 4 jobs)
NUTS: [subj_σ, subj_offset, β0, β1, σ]</code></pre>
<style>
    /* Turns off some styling */
    progress {
        /* gets rid of default border in Firefox and Opera. */
        border: none;
        /* Needs to be in here for Safari polyfill so background images work as expected. */
        background-size: auto;
    }
    progress:not([value]), progress:not([value])::-webkit-progress-bar {
        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);
    }
    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {
        background: #F44336;
    }
</style>
<div>
<p><progress value="8000" class="" max="8000" style="width:300px; height:20px; vertical-align: middle;"></progress> 100.00% [8000/8000 00:18&lt;00:00 Sampling 4 chains, 0 divergences]</p>
</div>
<pre><code>Sampling 4 chains for 1_000 tune and 1_000 draw iterations (4_000 + 4_000 draws total) took 35 seconds.</code></pre>
<div id="53879b7c" class="cell" data-execution_count="8">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb16" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb16-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Examine the trace, as we'll be using this model a lot</span></span>
<span id="cb16-2">az.plot_trace(idata, figsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">15</span>))<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span></code></pre></div></div>
</div>
<p><img src="https://alexjonesphd.github.io/posts/out-of-sample/output_18_0.png" class="img-fluid"></p>
<section id="out-of-sample-predictions" class="level2">
<h2 class="anchored" data-anchor-id="out-of-sample-predictions">Out of sample predictions</h2>
<section id="type-1---predicting-for-an-average-person-or-omitting-the-group-specific-terms" class="level3">
<h3 class="anchored" data-anchor-id="type-1---predicting-for-an-average-person-or-omitting-the-group-specific-terms">Type 1 - predicting for an “average” person, or omitting the group-specific terms</h3>
<p>With a fitted hierarchical model, we can start trying to make predictions. The first kind of prediction we’ll examine is the most common - predicting with only the common, or “fixed” effects. In the case of this model, that would be relying on the intercept and slope terms (β0 and β1 respectively) to take in a new predictor value and output a prediction, with no reference to the group specific effects.</p>
<p>If we try the method above - setting new data for X and y - we will immediately encounter an error. The model will take in the new data and try to pass it through the linear predictor formula, which includes the group-specific indexing of <code>subj_offset</code>, and it won’t work.</p>
<p>The solution, which is not immediately obvious, is to build another model with an identical structure, add in a new variable we would like to sample, and have the model sample the posterior predictive distribution of it. Lets say we want to predict, for the average person, the effects of 10, 11, and 12 days of taking part in the study, but we want to omit the group specific effect entirely. There will likely be little difference in this toy example out of sample predictions in this fashion and the no-pooled model, but more complex hieararchical models would definitely show a different pattern.</p>
<div id="b34aa541" class="cell" data-execution_count="9">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb17" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb17-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># First, set the new data we want to predict</span></span>
<span id="cb17-2">newX <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.array([<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">11</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">12</span>])</span>
<span id="cb17-3"></span>
<span id="cb17-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Build a new model that is the same as the original in its structure, but omits the group-specific effect from the linear predictor</span></span>
<span id="cb17-5"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> pm.Model(coords<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>c) <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> no_group_specific:</span>
<span id="cb17-6">    </span>
<span id="cb17-7">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Prior for scale of random effects then the random effect itself - as earlier. We could even delete these lines</span></span>
<span id="cb17-8">    ppt_sigma <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.HalfCauchy(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'ppt_sigma'</span>, beta<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">50</span>)</span>
<span id="cb17-9">    ppt_ranef <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.ZeroSumNormal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'ppt_ranef'</span>, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>ppt_sigma, dims<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'subject'</span>)</span>
<span id="cb17-10">    </span>
<span id="cb17-11">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Prior for the model coefficients - as earlier</span></span>
<span id="cb17-12">    β<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Normal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'β0'</span>, mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">300</span>)</span>
<span id="cb17-13">    β<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Normal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'β1'</span>, mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>)</span>
<span id="cb17-14">    σ <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.HalfCauchy(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'σ'</span>, beta<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">50</span>)</span>
<span id="cb17-15">    </span>
<span id="cb17-16">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Take the linear combination with NO group-specific and using the newX</span></span>
<span id="cb17-17">    μ <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> β<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> newX<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>β<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span></code></pre></div></div>
</div>
<p>So far, the model is a repeat of the initial model, even including group specific effects that aren’t used. We now add in a new term and sample the posterior predictive distribution of it, <em>by passing the InferenceData of the initial model</em>. Surprisingly - and this is the non-obvious part - the new model will use the posterior contained in the inference data for all the values in the model, aside from the new one which will be sampled. The group specific effects could be deleted from the code if we wanted to; they will be ignored.</p>
<div id="67ed238c" class="cell" data-execution_count="10">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb18" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb18-1"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> no_group_specific:</span>
<span id="cb18-2">    </span>
<span id="cb18-3">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># This is the new variable we want to sample</span></span>
<span id="cb18-4">    no_group_estimate <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Normal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'no_group_estimate'</span>, mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>μ, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>σ)</span>
<span id="cb18-5">    </span>
<span id="cb18-6">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># First set of out of sample predictions</span></span>
<span id="cb18-7">    predictions1 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.sample_posterior_predictive(hierarchical_idata, var_names<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'no_group_estimate'</span>], predictions<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span></code></pre></div></div>
</div>
<pre><code>Sampling: [no_group_estimate]</code></pre>
<style>
    /* Turns off some styling */
    progress {
        /* gets rid of default border in Firefox and Opera. */
        border: none;
        /* Needs to be in here for Safari polyfill so background images work as expected. */
        background-size: auto;
    }
    progress:not([value]), progress:not([value])::-webkit-progress-bar {
        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);
    }
    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {
        background: #F44336;
    }
</style>
<div>
<p><progress value="4000" class="" max="4000" style="width:300px; height:20px; vertical-align: middle;"></progress> 100.00% [4000/4000 00:00&lt;00:00]</p>
</div>
<p>Lets take a look at these predictions, generated without any recourse to individual groups:</p>
<div id="8c046d00" class="cell" data-execution_count="11">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb20" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb20-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Plot the data</span></span>
<span id="cb20-2"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> sns.plotting_context(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'poster'</span>):</span>
<span id="cb20-3">    </span>
<span id="cb20-4">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Canvas</span></span>
<span id="cb20-5">    fig, ax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plt.subplots(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, figsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>))</span>
<span id="cb20-6">    </span>
<span id="cb20-7">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Scatter the observed data</span></span>
<span id="cb20-8">    sns.scatterplot(data<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>sleep, x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Days'</span>, y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Reaction'</span>, ax<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>ax, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'white'</span>, edgecolor<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>, label<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Observed'</span>)</span>
<span id="cb20-9">    </span>
<span id="cb20-10">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Add in the predicted datapoints mean by aggregating it across chains and draws</span></span>
<span id="cb20-11">    ax.plot(newX, predictions1[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'predictions'</span>][<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'no_group_estimate'</span>].mean((<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'chain'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'draw'</span>)), color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>, </span>
<span id="cb20-12">            marker<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'s'</span>, linestyle<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'None'</span>, label<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Predicted'</span>)</span>
<span id="cb20-13">    </span>
<span id="cb20-14">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Nicely shade the area that the points might fall in</span></span>
<span id="cb20-15">    az.plot_hdi(newX, y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>predictions1[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'predictions'</span>][<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'no_group_estimate'</span>])</span>
<span id="cb20-16">    </span>
<span id="cb20-17">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Clean up axis</span></span>
<span id="cb20-18">    ax.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">set</span>(ylabel<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Reaction Time'</span>, </span>
<span id="cb20-19">           xticks<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">13</span>), </span>
<span id="cb20-20">           axisbelow<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span>
<span id="cb20-21">    </span>
<span id="cb20-22">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Turn on legend()</span></span>
<span id="cb20-23">    ax.legend(frameon<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>)</span></code></pre></div></div>
</div>
<p><img src="https://alexjonesphd.github.io/posts/out-of-sample/output_24_0.png" class="img-fluid"></p>
</section>
<section id="type-2---predicting-new-scores-for-specific-observed-groups" class="level3">
<h3 class="anchored" data-anchor-id="type-2---predicting-new-scores-for-specific-observed-groups">Type 2 - predicting new scores for specific, observed groups</h3>
<p>One benefit of hierarchical models is that they capture differences in specific groups; in social science or psychology research, this is typically leveraged to study individual differences. Here, we could use the model to predict scores for days 10, 11, and 12, for all individuals, accounting for their variability in baseline reaction times. This can be achieved with a creation of a new dataframe that ties the new values to be predicted to the existing group labels, and using the <code>.factorize()</code> approach to reindex the priors. Let’s now predict for days 10, 11, and 12, but this time including <em>all</em> group specific effects.</p>
<div id="41da2f7d" class="cell" data-execution_count="12">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb21" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb21-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Build a new DataFrame, tying the days to predict to each unique subject ID</span></span>
<span id="cb21-2"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># use of product to cleanly create the long-format dataframe</span></span>
<span id="cb21-3">newDF <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.DataFrame([(subject, day) <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> subject, day <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> product(sleep[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Subject'</span>].unique(), newX)], </span>
<span id="cb21-4">                     columns<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Subject'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Days'</span>])</span>
<span id="cb21-5"></span>
<span id="cb21-6">newInd, _ <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> newDF[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Subject'</span>].factorize() <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Get the new indexes of the subject locations in newDF</span></span>
<span id="cb21-7"></span>
<span id="cb21-8"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> pm.Model(coords<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>c) <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> include_group_specific:</span>
<span id="cb21-9">    </span>
<span id="cb21-10">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Hyperprior for the variability of the subjects - like before</span></span>
<span id="cb21-11">    subj_σ <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.HalfCauchy(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'subj_σ'</span>, beta<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">50</span>)</span>
<span id="cb21-12">    subj_offset <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.ZeroSumNormal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'subj_offset'</span>, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>subj_σ, dims<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'subject'</span>) </span>
<span id="cb21-13">    </span>
<span id="cb21-14">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Roughly informative coefficients prior - like before</span></span>
<span id="cb21-15">    β<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Normal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'β0'</span>, mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">300</span>)</span>
<span id="cb21-16">    β<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Normal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'β1'</span>, mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>)</span>
<span id="cb21-17">    </span>
<span id="cb21-18">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Noise variability - like before</span></span>
<span id="cb21-19">    σ <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.HalfCauchy(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'σ'</span>, beta<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">50</span>)</span>
<span id="cb21-20">    </span>
<span id="cb21-21">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Linear predictor is identical but uses the new data and indexes the offset with newInd</span></span>
<span id="cb21-22">    μ <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> β<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> subj_offset[newInd] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> newDF[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Days'</span>].values<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>β<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb21-23">    </span>
<span id="cb21-24">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># And we want to sample this unobserved variable</span></span>
<span id="cb21-25">    group_predictions <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Normal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'group_predictions'</span>, mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>μ, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>σ)</span>
<span id="cb21-26">    </span>
<span id="cb21-27">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Sample and provide the inference data</span></span>
<span id="cb21-28">    predictions2 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.sample_posterior_predictive(hierarchical_idata, var_names<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'group_predictions'</span>], predictions<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span></code></pre></div></div>
</div>
<pre><code>Sampling: [group_predictions]</code></pre>
<style>
    /* Turns off some styling */
    progress {
        /* gets rid of default border in Firefox and Opera. */
        border: none;
        /* Needs to be in here for Safari polyfill so background images work as expected. */
        background-size: auto;
    }
    progress:not([value]), progress:not([value])::-webkit-progress-bar {
        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);
    }
    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {
        background: #F44336;
    }
</style>
<div>
<p><progress value="4000" class="" max="4000" style="width:300px; height:20px; vertical-align: middle;"></progress> 100.00% [4000/4000 00:00&lt;00:00]</p>
</div>
<p>Let’s examine how the predictions work across each participant. First we will precompute the mean and HDI of each prediction:</p>
<div id="0371b1ae" class="cell" data-execution_count="13">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb23" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb23-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Add these back to the original dataframe</span></span>
<span id="cb23-2">mu <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> predictions2[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'predictions'</span>][<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'group_predictions'</span>].mean((<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'chain'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'draw'</span>))</span>
<span id="cb23-3">hd <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> az.hdi(predictions2, hdi_prob<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.95</span>, group<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'predictions'</span>, var_names<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'group_predictions'</span>).to_dataframe().unstack(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'hdi'</span>).droplevel(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, axis<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'columns'</span>)</span>
<span id="cb23-4"></span>
<span id="cb23-5"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Add them in</span></span>
<span id="cb23-6">newDF <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> newDF.assign(mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>mu.values, <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span>hd)</span>
<span id="cb23-7"></span>
<span id="cb23-8"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Custom function to plot predictions and original data, per subject</span></span>
<span id="cb23-9"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> custom_plot(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span>kwargs):</span>
<span id="cb23-10">    </span>
<span id="cb23-11">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># get data, axis</span></span>
<span id="cb23-12">    data <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> kwargs.pop(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'data'</span>)</span>
<span id="cb23-13">    ax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plt.gca()</span>
<span id="cb23-14">    </span>
<span id="cb23-15">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Plot the original data</span></span>
<span id="cb23-16">    sns.scatterplot(data<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>data, x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Days'</span>, y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Reaction'</span>, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'white'</span>, edgecolor<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>, label<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Observed'</span>, ax<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>ax, zorder<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb23-17">    </span>
<span id="cb23-18">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Subset newDF and plot it plus bands</span></span>
<span id="cb23-19">    thisSubj <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> newDF.loc[newDF[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Subject'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> data[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Subject"</span>].unique()[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>]]</span>
<span id="cb23-20">    </span>
<span id="cb23-21">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Plot the predictions</span></span>
<span id="cb23-22">    ax.plot(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Days'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'mu'</span>, data<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>thisSubj, marker<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'s'</span>, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>, linestyle<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'None'</span>, label<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Predicted'</span>)</span>
<span id="cb23-23">    ax.fill_between(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Days'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'lower'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'higher'</span>, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>, alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.2</span>, data<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>thisSubj)</span>
<span id="cb23-24">    </span>
<span id="cb23-25">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Tidy</span></span>
<span id="cb23-26">    ax.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">set</span>(xticks<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">13</span>), axisbelow<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span>
<span id="cb23-27">    ax.grid(alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.3</span>)</span>
<span id="cb23-28">    </span>
<span id="cb23-29"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> sns.plotting_context(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'talk'</span>, font_scale<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.8</span>):</span>
<span id="cb23-30">    </span>
<span id="cb23-31">    (</span>
<span id="cb23-32">        sns.FacetGrid(data<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>sleep, col<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Subject'</span>, col_wrap<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span>, aspect<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.3</span>)</span>
<span id="cb23-33">        .map_dataframe(custom_plot)</span>
<span id="cb23-34">        .add_legend()</span>
<span id="cb23-35">    )</span></code></pre></div></div>
</div>
<p><img src="https://alexjonesphd.github.io/posts/out-of-sample/output_30_0.png" class="img-fluid"></p>
<p>The model makes predictions for unseen days for each of the participants in the study, and the uncertainty is naturally handled by the posterior distribution.</p>
</section>
<section id="type-3---predicting-scores-for-unobserved-groups" class="level3">
<h3 class="anchored" data-anchor-id="type-3---predicting-scores-for-unobserved-groups">Type 3 - Predicting scores for <em>unobserved</em> groups</h3>
<p>Finally, one useful property of hierarchical Bayesian models is that they can comfortably generate predictions for unseen group-level data. Once we learn the variability of the group-level effects, then new groups can be thought of as draws from this population, fed to the model, and predictions made accordingly. This sort of prediction isn’t widely seen in psychology (whereas Type 1 is), but really highlights the kind of uncertainty we’d expect to see in new data, accounting for individual variability. We can do this in PyMC below, following a similar approach as above. We can instantiate a new prior for the offsets, sample from it, and pass it to the model.</p>
<p>However, its generally a good idea to inject some prior knowledge into the unseen data. Given the model set up, drawing new groups will tend to collapse to zero (reducing the model to a noisier version of the no-group-specific effect prediction). Instead, if we pass some expected group-specific values, we can recover some predictions. An example here would be knowing a-priori that one of two new participants tend to have quite fast reaction times (a negative offset - faster than the average) and the other quite slow (a positive offset). This is easy to model in PyMC, and follows the standard approach of adding in new variables to sample.</p>
<p>First, lets make a new DataFrame containing the variables to predict - we’ll ask for each of the “Days” to be predicting for imaginary new participants, and then pass it onto the model.</p>
<div id="489d6060" class="cell" data-execution_count="14">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb24" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb24-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># New content</span></span>
<span id="cb24-2">days <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.arange(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>)</span>
<span id="cb24-3">ids <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'new1'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'new2'</span>]</span>
<span id="cb24-4"></span>
<span id="cb24-5"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Data</span></span>
<span id="cb24-6">unseen <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.DataFrame(</span>
<span id="cb24-7">    [(subject, day) <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> subject, day <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> product(ids, days)],</span>
<span id="cb24-8">    columns<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Subject'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Days'</span>])</span>
<span id="cb24-9"></span>
<span id="cb24-10"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Creates the new indexers</span></span>
<span id="cb24-11">unseen_ind, unseen_sub <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> unseen[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Subject'</span>].factorize()</span>
<span id="cb24-12"></span>
<span id="cb24-13"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Build a new model, and this time set new coordinates to ease dims</span></span>
<span id="cb24-14"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> pm.Model(coords<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>{<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'new_subject'</span>: unseen_sub}) <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> unseen_group:</span>
<span id="cb24-15">     </span>
<span id="cb24-16">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Model takes the hyperprior that has been learned</span></span>
<span id="cb24-17">    subj_σ <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.HalfCauchy(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'subj_σ'</span>, beta<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">50</span>)</span>
<span id="cb24-18">    </span>
<span id="cb24-19">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># But we add in a new unseen-offset variable, which injects corresponding prior knowledge that </span></span>
<span id="cb24-20">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># One participant is fast, and another is slow</span></span>
<span id="cb24-21">    unseen_offset <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Normal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'unseen_offset'</span>, mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">50</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">50</span>], sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>subj_σ, dims<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'new_subject'</span>) </span>
<span id="cb24-22">    </span>
<span id="cb24-23">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Same coefficients as before</span></span>
<span id="cb24-24">    β<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Normal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'β0'</span>, mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">300</span>)</span>
<span id="cb24-25">    β<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Normal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'β1'</span>, mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>)</span>
<span id="cb24-26">    </span>
<span id="cb24-27">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Noise variability - like before</span></span>
<span id="cb24-28">    σ <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.HalfCauchy(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'σ'</span>, beta<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">50</span>)</span>
<span id="cb24-29">    </span>
<span id="cb24-30">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Linear predictor is again identical, relying on the new indexer to the group specific</span></span>
<span id="cb24-31">    μ <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> β<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> unseen_offset[unseen_ind] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> unseen[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Days'</span>].values<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>β<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb24-32">    </span>
<span id="cb24-33">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># And we want to sample this unobserved variable</span></span>
<span id="cb24-34">    unseen_group_prediction <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Normal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'unseen_group_prediction'</span>, mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>μ, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>σ)</span>
<span id="cb24-35">    </span>
<span id="cb24-36">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Sample and provide the inference data, taking draws for both the predictions and the offsets</span></span>
<span id="cb24-37">    predictions3 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.sample_posterior_predictive(hierarchical_idata, var_names<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'unseen_group_prediction'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'unseen_offset'</span>], predictions<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span></code></pre></div></div>
</div>
<pre><code>Sampling: [unseen_group_prediction, unseen_offset]</code></pre>
<style>
    /* Turns off some styling */
    progress {
        /* gets rid of default border in Firefox and Opera. */
        border: none;
        /* Needs to be in here for Safari polyfill so background images work as expected. */
        background-size: auto;
    }
    progress:not([value]), progress:not([value])::-webkit-progress-bar {
        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);
    }
    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {
        background: #F44336;
    }
</style>
<div>
<p><progress value="4000" class="" max="4000" style="width:300px; height:20px; vertical-align: middle;"></progress> 100.00% [4000/4000 00:00&lt;00:00]</p>
</div>
<p>From this model, we can examine the variability of the offsets themselves, as well as the predictions. Lets first examine the offsets, which show that they centre roughly around the means we specified with corresponding high variability (there is no real data to update them, after all):</p>
<div id="47e93aa2" class="cell" data-execution_count="15">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb26" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb26-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Comparison of original model and new draws</span></span>
<span id="cb26-2">az.plot_forest([predictions3[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'predictions'</span>], hierarchical_idata],</span>
<span id="cb26-3">               combined<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>, hdi_prob<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.95</span>,</span>
<span id="cb26-4">               model_names<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Unseen Groups'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Fitted Model'</span>],</span>
<span id="cb26-5">               var_names<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'subj_offset'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'unseen_offset'</span>])<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span></code></pre></div></div>
</div>
<p><img src="https://alexjonesphd.github.io/posts/out-of-sample/output_34_0.png" class="img-fluid"></p>
<p>Finally, we can examine the predictions for the unseen participants. Lets recover their predictions from the posterior and plot them as above.</p>
<div id="6963ccef" class="cell" data-execution_count="16">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb27" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb27-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Estimate mean and HDI</span></span>
<span id="cb27-2">unseen_mu <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> predictions3[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'predictions'</span>][<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'unseen_group_prediction'</span>].mean((<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'chain'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'draw'</span>)).values</span>
<span id="cb27-3">unseen_hd <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> az.hdi(predictions3, var_names<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'unseen_group_prediction'</span>, group<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'predictions'</span>, hdi_prob<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.95</span>).to_dataframe().unstack(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'hdi'</span>).droplevel(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, axis<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'columns'</span>)</span>
<span id="cb27-4"></span>
<span id="cb27-5"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Add these to the created DataFrame</span></span>
<span id="cb27-6">unseen <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> unseen.assign(mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>unseen_mu, <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span>unseen_hd)</span>
<span id="cb27-7"></span>
<span id="cb27-8"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Another facet grid plot</span></span>
<span id="cb27-9"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> sns.plotting_context(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'poster'</span>):</span>
<span id="cb27-10">    </span>
<span id="cb27-11">    (</span>
<span id="cb27-12">        sns.FacetGrid(data<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>unseen, col<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Subject'</span>, height<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>, aspect<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.5</span>)</span>
<span id="cb27-13">        .map_dataframe(sns.scatterplot, x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Days'</span>, y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'mu'</span>, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'white'</span>, edgecolor<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>)</span>
<span id="cb27-14">        .<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">map</span>(plt.fill_between, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Days'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'lower'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'higher'</span>, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>, alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.2</span>)</span>
<span id="cb27-15">        .<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">set</span>(xticks<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>), ylabel<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Predicted Reaction Time'</span>, axisbelow<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span>
<span id="cb27-16">    )</span></code></pre></div></div>
</div>
<p><img src="https://alexjonesphd.github.io/posts/out-of-sample/output_36_0.png" class="img-fluid"></p>
<p>There is a huge range of different plausible datasets generated by the model, implying the steady increase (slowing) in reaction time estimated from the original data. The summary is shown here, but equally a few draws from the posterior could have been shown here for the two new participants:</p>
<div id="bbb258e1" class="cell" data-execution_count="17">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb28" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb28-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Shift the posterior into a dataframe and tack on the unseen data</span></span>
<span id="cb28-2">psd <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (predictions3[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'predictions'</span>][<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'unseen_group_prediction'</span>]</span>
<span id="cb28-3">       .to_dataframe()</span>
<span id="cb28-4">       .unstack((<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'chain'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'draw'</span>))</span>
<span id="cb28-5">       .droplevel([<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>], axis<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'columns'</span>)</span>
<span id="cb28-6">       .sample(n<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span>, axis<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'columns'</span>, random_state<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>rng)</span>
<span id="cb28-7">       .add_prefix(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Dataset: '</span>)</span>
<span id="cb28-8">       .pipe(<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">lambda</span> x: pd.concat((x, unseen[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Subject'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Days'</span>]]), axis<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'columns'</span>))</span>
<span id="cb28-9">       .melt(id_vars<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Subject'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Days'</span>], </span>
<span id="cb28-10">             var_name<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'simulated'</span>, value_name<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Reaction'</span>)</span>
<span id="cb28-11">      )</span>
<span id="cb28-12"></span>
<span id="cb28-13"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> sns.plotting_context(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'poster'</span>):</span>
<span id="cb28-14">    (</span>
<span id="cb28-15">        sns.FacetGrid(data<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>psd, col<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'simulated'</span>, col_wrap<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>, height<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>, aspect<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.1</span>)</span>
<span id="cb28-16">        .map_dataframe(sns.scatterplot, x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Days'</span>, y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Reaction'</span>, edgecolor<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'white'</span>)</span>
<span id="cb28-17">        .<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">set</span>(xticks<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>), ylabel<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Predicted Reaction Time'</span>, axisbelow<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span>
<span id="cb28-18">        .set_titles(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{col_name}</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'</span>)</span>
<span id="cb28-19">    )</span></code></pre></div></div>
</div>
<p><img src="https://alexjonesphd.github.io/posts/out-of-sample/output_38_0.png" class="img-fluid"></p>
<p>Finally, its worth reiterating the huge flexibility of PyMC. Using the “re-model” approach to generating predictions, other assumptions can be played with depending on the situation - for example, its possible to swap out the <code>pm.Normal</code> assumption for the observed values, and insert a Student’s T distribution. Or we could perhaps fix the variance of some of the distributions if we want to restrict our assumptions about future data more tightly. The flexibility in analysis is one of the truly great things about Bayesian inference and PyMC!</p>
<div id="df6215ea" class="cell" data-execution_count="18">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb29" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb29-1"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%</span>load_ext watermark</span>
<span id="cb29-2"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%</span>watermark <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">--</span>iversions</span></code></pre></div></div>
</div>
<pre><code>seaborn   : 0.12.2
arviz     : 0.15.1
pandas    : 2.0.0rc0
matplotlib: 3.6.3
pymc      : 5.5.0
bambi     : 0.10.0
numpy     : 1.24.2</code></pre>


</section>
</section>
</section>

 ]]></description>
  <category>Bayesian</category>
  <category>PyMC</category>
  <category>predictions</category>
  <guid>https://alexjonesphd.github.io/posts/out-of-sample/</guid>
  <pubDate>Thu, 29 Jun 2023 23:00:00 GMT</pubDate>
  <media:content url="https://alexjonesphd.github.io/posts/out-of-sample/output_24_0.png" medium="image" type="image/png" height="77" width="144"/>
</item>
<item>
  <title>Customer segmentation with Bayes, Spectral Embedding, and a second-place win</title>
  <link>https://alexjonesphd.github.io/posts/customer-segmentation/</link>
  <description><![CDATA[ 




<p>To get a break from academic work over the summer, I took part in another data science competition. This one was difficult, involving finding clusters of different customers in a multi-table database, and invovled some tricky feature engineering and data imputation. It also struck me how effective the general approach of dimension-reduction and clustering is; I’ve used it in some papers but the logic here was the same. One thing I picked up here was the utility of non-linear dimension reduction approaches like spectral embedding, which work by maintaing distances between points as the the higher dimensions are projected onto manifolds. I also had some great <strong>Altair</strong> plots in this, but on submission they all got stripped. So I had to remake some static plots last minute. The final version is <a href="https://app.datacamp.com/workspace/w/2ffb65a9-356b-45f7-941d-2e01dd8c1f87">here</a>, but I much preferred this one. Anyway, second place isn’t so bad for a stab at a very applied problem.</p>
<div id="d1806a2f" class="cell" data-execution_count="1">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb1-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Imports</span></span>
<span id="cb1-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> arviz <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> az</span>
<span id="cb1-3"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> altair <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> alt</span>
<span id="cb1-4"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> numpy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> np</span>
<span id="cb1-5"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> pandas <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> pd</span>
<span id="cb1-6"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> pymc <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> pm</span>
<span id="cb1-7"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> seaborn <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> sns</span>
<span id="cb1-8"></span>
<span id="cb1-9"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> matplotlib.pyplot <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> plt</span>
<span id="cb1-10"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> scipy.stats <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> st</span>
<span id="cb1-11"></span>
<span id="cb1-12"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> sklearn.cluster <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> KMeans</span>
<span id="cb1-13"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> sklearn.metrics <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> silhouette_score</span>
<span id="cb1-14"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> sklearn.manifold <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> SpectralEmbedding</span>
<span id="cb1-15"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> sklearn.impute <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> KNNImputer</span>
<span id="cb1-16"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> statsmodels.distributions.empirical_distribution <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> ECDF</span></code></pre></div></div>
</div>
<section id="data-driven-segmentation-reveals-three-doctor-profiles" class="level1">
<h1>Data-driven segmentation reveals three doctor profiles</h1>
<section id="executive-summary" class="level2">
<h2 class="anchored" data-anchor-id="executive-summary">Executive Summary</h2>
<p>This report highlights a new, data-driven perspective on the customer base of the company. The historical approach of segmenting doctors by their region has been shown to be a poor predictor of their support or purchasing behaviour. The analysis describes here reveals <strong>three new segments</strong> of customers with distinct profiles that will inform product and marketing development alongside customer service needs.</p>
<p>The report focuses on three key questions: 1. What is the composition of each region in terms of number of doctors and their average number of purchases? 2. Is there a relationship between purchases and number of complaints? 3. Can new segments be found, and what variables best describe these new segments if they exist?</p>
</section>
<section id="key-insights" class="level2">
<h2 class="anchored" data-anchor-id="key-insights">Key Insights</h2>
<ul>
<li>The number of doctors in each area varies a lot, from <strong>one</strong> to <strong>34</strong>, though on average there are around <strong>10</strong>. The number of purchases also varies, from <strong>13</strong> to <strong>129</strong>. There is no discernible pattern between these, and one small region has a very high purchase rate.</li>
<li>Given the data, there is a <strong>75% probability</strong> that doctors <strong>who complain more, purchase more</strong>, though this effect is relatively small, with higher-than-average numbers of complaints being associated with just a <strong>6% increase</strong> in purchases. The analysis suggests the effect could be as large as a 25% increase, or reduce purchases by 11%.</li>
<li>Segmentation analysis suggests there are <strong>three</strong> distinct groups of doctors, with a unique relationship to the company.</li>
</ul>
<section id="new-doctor-segments" class="level3">
<h3 class="anchored" data-anchor-id="new-doctor-segments">New doctor segments:</h3>
<ol type="1">
<li><strong>Segment One</strong> - Doctors here have low <em>experience</em> with the company, lower rates of <em>purchases</em>, <em>R</em> and <em>incidence</em> rates, and give fewer <em>complaints</em>. They also treat fewer <em>unique conditions</em>, and have only average reported <em>satisfaction</em>. There are more <em>general practitioner</em> in this segment.</li>
<li><strong>Segment Two</strong> - Doctors here have high <em>R</em> rates, give more <em>complaints</em>, and have a high level of <em>experience</em> with the company. They make relatively fewer <em>purchases</em> and seem to treat fewer <em>unique conditions</em>. This segment, the largest in number, is diffuse in terms of its members and their rank and category.</li>
<li><strong>Segment Three</strong>. Doctors here make a lot of <em>purchases</em> and have high <em>incidence rates</em>, are relatively <em>satisfied</em>, and treat the most number of <em>unique conditions</em>. They make fewer <em>complaints</em> but have less <em>experience</em> with the company. They are comprised of a lot of <em>Ambassadors</em>.</li>
</ol>
</section>
</section>
<section id="key-recommendations" class="level2">
<h2 class="anchored" data-anchor-id="key-recommendations">Key recommendations</h2>
<ul>
<li>Abandon use of region as a predictor of doctor behaviour.</li>
<li>Acknowledge the association between purchases and complaints, and its uncertainty.</li>
<li>Label Segment One doctors as <strong>Inexperienced and Indifferent doctors</strong>. This segment would benefit from marketing and raising awareness of the company to on-board doctors and increase satisfaction.</li>
<li>Label Segment Two doctors as <strong>Experienced but Unhappy doctors</strong>. While these doctors have a longstanding relationship with the company, they have unaddressed needs and make many complaints. These would be a good audience for focus groups to understand their needs and increase satisfaction.</li>
<li>Label Segment Three doctors as <strong>Returning, Happy, but less experienced doctors</strong>. These individuals are overall positive, treating a range of conditions, and make many purchases, but have less experience with the company. Further engagement with this audience will be important to retain them as a loyal set of customers.</li>
<li>Caveats: Despite a large dataset, doctors with matching observations across the range of tables were relatively few, with an effective sample size of 74 doctors. Statistical methods were used to help here but it is worth noting.</li>
</ul>
</section>
</section>
<section id="doctor-by-region-analysis-interactively" class="level1">
<h1>Doctor-by-region analysis; interactively</h1>
<p>The main data sources here are split across four tables, which briefly comprise the following information: - <code>doctors</code> includes information on doctor category, rank, experience with the company, satisfaction, purchases, and incidence/rework rates. - <code>orders</code> illustrates the number of orders an individual doctor has placed. - <code>complaints</code> considers doctors and the number of complaints and complaint types they make. - <code>instructions</code> highlights whether a doctor has leaves specific instructions on the order.</p>
<p>There is missing data in the <code>doctors</code> dataset about satisfaction, which will be imputed after highlighting the doctor-by-region analysis.</p>
<div id="b329ad14" class="cell" data-execution_count="2">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb2-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Read in data files</span></span>
<span id="cb2-2">doctors <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.read_csv(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'data/doctors.csv'</span>)            <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># doctor details</span></span>
<span id="cb2-3">orders <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.read_csv(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'data/orders.csv'</span>)              <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># order details</span></span>
<span id="cb2-4">complaints <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.read_csv(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'data/complaints.csv'</span>)      <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># complaint details</span></span>
<span id="cb2-5">instructions <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.read_csv(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'data/instructions.csv'</span>)  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># instruction details (y/n)</span></span>
<span id="cb2-6"></span>
<span id="cb2-7"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Aggregate the doctors dataset</span></span>
<span id="cb2-8">query1 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (doctors</span>
<span id="cb2-9">          .groupby(by<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Region'</span>, as_index<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>)</span>
<span id="cb2-10">          .agg(number_of_doctors<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'DoctorID'</span>, pd.Series.nunique),</span>
<span id="cb2-11">               average_purchase_number<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Purchases'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'mean'</span>))</span>
<span id="cb2-12">          .<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">round</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>))</span>
<span id="cb2-13"></span>
<span id="cb2-14"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">## Display interactively with Altair ##</span></span>
<span id="cb2-15">input_dropdown <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> alt.binding_select(options<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>query1[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Region'</span>].unique(), name<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Select Region! '</span>)</span>
<span id="cb2-16">selection <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> alt.selection_single(fields<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Region'</span>], bind<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>input_dropdown)</span>
<span id="cb2-17"></span>
<span id="cb2-18">query1_chart <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (alt.Chart(query1, width<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">900</span>, height<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">400</span>)</span>
<span id="cb2-19">                .mark_point(filled<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>, size<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">300</span>, opacity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.75</span>)</span>
<span id="cb2-20">                .encode(x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>alt.X(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'number_of_doctors'</span>, title<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Number of Doctors in Region'</span>),</span>
<span id="cb2-21">                        y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>alt.Y(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'average_purchase_number'</span>, title<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Average Number of Purchases in Region'</span>, scale<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>alt.Scale(domain<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">140</span>))),</span>
<span id="cb2-22">                        color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>alt.condition(selection, alt.Color(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Region:N'</span>, legend<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">None</span>), alt.value(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'grey'</span>)),</span>
<span id="cb2-23">                        tooltip<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[alt.Tooltip(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Region'</span>),</span>
<span id="cb2-24">                                 alt.Tooltip(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'number_of_doctors'</span>, title<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Number of Doctors'</span>),</span>
<span id="cb2-25">                                 alt.Tooltip(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'average_purchase_number'</span>, title<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Average Purchase #'</span>)])</span>
<span id="cb2-26">                .configure_axis(labelFontSize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span>,</span>
<span id="cb2-27">                                titleFontSize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span>)</span>
<span id="cb2-28">                .configure_legend(labelFontSize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span>,</span>
<span id="cb2-29">                                  titleFontSize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span>)   </span>
<span id="cb2-30">               ).add_selection(selection)</span>
<span id="cb2-31"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Render</span></span>
<span id="cb2-32">query1_chart</span></code></pre></div></div>
</div>
<div id="altair-viz-1708d2b0bbd1426d8437d763fdacc845">

</div>
<script type="text/javascript">
  var VEGA_DEBUG = (typeof VEGA_DEBUG == "undefined") ? {} : VEGA_DEBUG;
  (function(spec, embedOpt){
    let outputDiv = document.currentScript.previousElementSibling;
    if (outputDiv.id !== "altair-viz-1708d2b0bbd1426d8437d763fdacc845") {
      outputDiv = document.getElementById("altair-viz-1708d2b0bbd1426d8437d763fdacc845");
    }
    const paths = {
      "vega": "https://cdn.jsdelivr.net/npm//vega@5?noext",
      "vega-lib": "https://cdn.jsdelivr.net/npm//vega-lib?noext",
      "vega-lite": "https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext",
      "vega-embed": "https://cdn.jsdelivr.net/npm//vega-embed@6?noext",
    };

    function maybeLoadScript(lib, version) {
      var key = `${lib.replace("-", "")}_version`;
      return (VEGA_DEBUG[key] == version) ?
        Promise.resolve(paths[lib]) :
        new Promise(function(resolve, reject) {
          var s = document.createElement('script');
          document.getElementsByTagName("head")[0].appendChild(s);
          s.async = true;
          s.onload = () => {
            VEGA_DEBUG[key] = version;
            return resolve(paths[lib]);
          };
          s.onerror = () => reject(`Error loading script: ${paths[lib]}`);
          s.src = paths[lib];
        });
    }

    function showError(err) {
      outputDiv.innerHTML = `<div class="error" style="color:red;">${err}</div>`;
      throw err;
    }

    function displayChart(vegaEmbed) {
      vegaEmbed(outputDiv, spec, embedOpt)
        .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));
    }

    if(typeof define === "function" && define.amd) {
      requirejs.config({paths});
      require(["vega-embed"], displayChart, err => showError(`Error loading script: ${err.message}`));
    } else {
      maybeLoadScript("vega", "5")
        .then(() => maybeLoadScript("vega-lite", "4.17.0"))
        .then(() => maybeLoadScript("vega-embed", "6"))
        .catch(showError)
        .then(() => displayChart(vegaEmbed));
    }
  })({"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}, "axis": {"labelFontSize": 16, "titleFontSize": 16}, "legend": {"labelFontSize": 16, "titleFontSize": 16}}, "data": {"name": "data-61f18c838a15daa8a7342fcd53b613b7"}, "mark": {"type": "point", "filled": true, "opacity": 0.75, "size": 300}, "encoding": {"color": {"condition": {"field": "Region", "legend": null, "type": "nominal", "selection": "selector001"}, "value": "grey"}, "tooltip": [{"field": "Region", "type": "nominal"}, {"field": "number_of_doctors", "title": "Number of Doctors", "type": "quantitative"}, {"field": "average_purchase_number", "title": "Average Purchase #", "type": "quantitative"}], "x": {"field": "number_of_doctors", "title": "Number of Doctors in Region", "type": "quantitative"}, "y": {"field": "average_purchase_number", "scale": {"domain": [0, 140]}, "title": "Average Number of Purchases in Region", "type": "quantitative"}}, "height": 400, "selection": {"selector001": {"type": "single", "fields": ["Region"], "bind": {"input": "select", "options": ["1 10", "1 10 T3", "1 11", "1 12", "1 12 T3", "1 12 T4", "1 13", "1 13 T3", "1 13 T4", "1 14", "1 14 T3", "1 14 T4", "1 19", "1 19 20", "1 19 T3", "1 19 T4", "1 21 T3", "1 21 T4", "1 4CP", "1 8", "1 8 T3", "1 8 T4", "1 9", "1 9 T3", "1 9 T4", "17", "2 11", "2 6 10", "2 6 12", "2 6 13", "2 6 14", "2 6 19", "2 6 8", "2 6 9", "2 7 10", "2 7 12", "2 7 13", "2 7 14", "2 7 19", "2 7 8", "2 7 9", "22 18", "23 3", "3 16", "4 15", "5 18"], "name": "Select Region! "}}}, "width": 900, "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json", "datasets": {"data-61f18c838a15daa8a7342fcd53b613b7": [{"Region": "1 10", "number_of_doctors": 15, "average_purchase_number": 15.0}, {"Region": "1 10 T3", "number_of_doctors": 8, "average_purchase_number": 11.375}, {"Region": "1 11", "number_of_doctors": 23, "average_purchase_number": 10.565}, {"Region": "1 12", "number_of_doctors": 23, "average_purchase_number": 14.913}, {"Region": "1 12 T3", "number_of_doctors": 6, "average_purchase_number": 14.833}, {"Region": "1 12 T4", "number_of_doctors": 2, "average_purchase_number": 22.5}, {"Region": "1 13", "number_of_doctors": 34, "average_purchase_number": 10.382}, {"Region": "1 13 T3", "number_of_doctors": 11, "average_purchase_number": 9.909}, {"Region": "1 13 T4", "number_of_doctors": 1, "average_purchase_number": 30.0}, {"Region": "1 14", "number_of_doctors": 32, "average_purchase_number": 12.156}, {"Region": "1 14 T3", "number_of_doctors": 15, "average_purchase_number": 11.667}, {"Region": "1 14 T4", "number_of_doctors": 4, "average_purchase_number": 19.5}, {"Region": "1 19", "number_of_doctors": 31, "average_purchase_number": 9.065}, {"Region": "1 19 20", "number_of_doctors": 1, "average_purchase_number": 129.0}, {"Region": "1 19 T3", "number_of_doctors": 13, "average_purchase_number": 10.769}, {"Region": "1 19 T4", "number_of_doctors": 9, "average_purchase_number": 25.333}, {"Region": "1 21 T3", "number_of_doctors": 4, "average_purchase_number": 8.75}, {"Region": "1 21 T4", "number_of_doctors": 2, "average_purchase_number": 11.0}, {"Region": "1 4CP", "number_of_doctors": 1, "average_purchase_number": 6.0}, {"Region": "1 8", "number_of_doctors": 21, "average_purchase_number": 10.81}, {"Region": "1 8 T3", "number_of_doctors": 14, "average_purchase_number": 10.929}, {"Region": "1 8 T4", "number_of_doctors": 6, "average_purchase_number": 18.5}, {"Region": "1 9", "number_of_doctors": 32, "average_purchase_number": 10.812}, {"Region": "1 9 T3", "number_of_doctors": 11, "average_purchase_number": 7.636}, {"Region": "1 9 T4", "number_of_doctors": 7, "average_purchase_number": 23.429}, {"Region": "17", "number_of_doctors": 6, "average_purchase_number": 4.5}, {"Region": "2 11", "number_of_doctors": 9, "average_purchase_number": 5.667}, {"Region": "2 6 10", "number_of_doctors": 1, "average_purchase_number": 5.0}, {"Region": "2 6 12", "number_of_doctors": 5, "average_purchase_number": 3.8}, {"Region": "2 6 13", "number_of_doctors": 6, "average_purchase_number": 4.5}, {"Region": "2 6 14", "number_of_doctors": 2, "average_purchase_number": 3.0}, {"Region": "2 6 19", "number_of_doctors": 5, "average_purchase_number": 3.6}, {"Region": "2 6 8", "number_of_doctors": 4, "average_purchase_number": 4.25}, {"Region": "2 6 9", "number_of_doctors": 5, "average_purchase_number": 5.2}, {"Region": "2 7 10", "number_of_doctors": 7, "average_purchase_number": 5.143}, {"Region": "2 7 12", "number_of_doctors": 6, "average_purchase_number": 6.167}, {"Region": "2 7 13", "number_of_doctors": 6, "average_purchase_number": 7.667}, {"Region": "2 7 14", "number_of_doctors": 7, "average_purchase_number": 3.571}, {"Region": "2 7 19", "number_of_doctors": 14, "average_purchase_number": 4.786}, {"Region": "2 7 8", "number_of_doctors": 5, "average_purchase_number": 4.6}, {"Region": "2 7 9", "number_of_doctors": 8, "average_purchase_number": 4.125}, {"Region": "22 18", "number_of_doctors": 7, "average_purchase_number": 6.286}, {"Region": "23 3", "number_of_doctors": 1, "average_purchase_number": 14.0}, {"Region": "3 16", "number_of_doctors": 1, "average_purchase_number": 14.0}, {"Region": "4 15", "number_of_doctors": 3, "average_purchase_number": 23.333}, {"Region": "5 18", "number_of_doctors": 3, "average_purchase_number": 5.0}]}}, {"mode": "vega-lite"});
</script>
<p><strong>Hover over a point to view detailed information, or use the dropdown to isolate a specific region</strong>. A brief glance at this chart highlights why region is a poor predictor of the number of purchases that can be made. Overall, there is no relationship between number of doctors and their average number of purchases across regions, aside from a large outlier.</p>
</section>
<section id="assessing-the-purchase-complaint-association-probabilistically" class="level1">
<h1>Assessing the purchase ~ complaint association probabilistically</h1>
<p>While there may be a simple association between purchases and complaints, the relationship may be driven by other variables (e.g.&nbsp;satisfaction). Using a combination of careful feature engineering and a Bayesian linear model, the influence of other variables in the dataset (see <strong>Technical Annexe</strong> for details) can be controlled, and the relationship between complaint number as a predictor of purchase number examined. Before modelling, 55 missing datapoints in the <code>satisfaction</code> variable were imputed, and a final sample of 74 doctors were analysed.</p>
<div id="12d3a426" class="cell" data-execution_count="3">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb3-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">## Feature engineering</span></span>
<span id="cb3-2"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Doctors cleaning</span></span>
<span id="cb3-3">doctors_processed <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (doctors</span>
<span id="cb3-4">                     .assign(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span>pd.get_dummies(doctors[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Category'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Rank'</span>]], drop_first<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>))     <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># One hot encodes category and rank</span></span>
<span id="cb3-5">                     .assign(Satisfaction<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>pd.to_numeric(doctors[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Satisfaction'</span>], errors<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'coerce'</span>)) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Fixes the string column of Satisfaction</span></span>
<span id="cb3-6">                     .set_index(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'DoctorID'</span>)</span>
<span id="cb3-7">                     .<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">filter</span>(regex<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'rate|Satisfaction|Experience|Purchases|Rank_|Category_'</span>)       <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Select relevant variables</span></span>
<span id="cb3-8">                    )</span>
<span id="cb3-9"></span>
<span id="cb3-10"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Orders cleaning - calculate unique-condition-count - number of unique treatments</span></span>
<span id="cb3-11">orders_processed <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (orders</span>
<span id="cb3-12">                    .set_index(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'DoctorID'</span>)               <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Push doctor ID into index</span></span>
<span id="cb3-13">                    .<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">filter</span>(regex<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Condition [A-I]'</span>)     <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Keep conditions A-I; J seems related to when devices are administered</span></span>
<span id="cb3-14">                    .groupby(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'DoctorID'</span>)                 <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Groupby Doctor as some doctors appear more than once</span></span>
<span id="cb3-15">                    .<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">apply</span>(<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">lambda</span> x: x.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">sum</span>(axis<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'rows'</span>)) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Take the sum across rows - each doctor then has a count of how many times they treat a condition</span></span>
<span id="cb3-16">                    .gt(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)                               <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># where that is above zero, indicate true</span></span>
<span id="cb3-17">                    .<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">sum</span>(axis<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'columns'</span>)                 <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># The sum of those booleans indicates a condition has been treated by this doctor</span></span>
<span id="cb3-18">                    .to_frame(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Unique Condition Index'</span>)</span>
<span id="cb3-19">                   )</span>
<span id="cb3-20"></span>
<span id="cb3-21"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Complaints - count the total number of complaints a given doctor gives, across complaint types</span></span>
<span id="cb3-22">complaints_processed <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (complaints</span>
<span id="cb3-23">                        .groupby(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'DoctorID'</span>)</span>
<span id="cb3-24">                        .agg(Complaints<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Qty'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'sum'</span>))</span>
<span id="cb3-25">                       )</span>
<span id="cb3-26"></span>
<span id="cb3-27"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Merge the data and scale appropriately</span></span>
<span id="cb3-28">z_score_these <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Incidence rate'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'R rate'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Satisfaction'</span>, </span>
<span id="cb3-29">                 <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Experience'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Complaints'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Unique Condition Index'</span>]</span>
<span id="cb3-30"></span>
<span id="cb3-31"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Merge the data together</span></span>
<span id="cb3-32">df <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (complaints_processed</span>
<span id="cb3-33">      .join(doctors_processed, how<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'inner'</span>)</span>
<span id="cb3-34">      .join(orders_processed, how<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'left'</span>)</span>
<span id="cb3-35">     )</span>
<span id="cb3-36"></span>
<span id="cb3-37"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Impute the missing data in Satisfaction</span></span>
<span id="cb3-38">imputed_data <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> KNNImputer(n_neighbors<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>).fit_transform(df)</span>
<span id="cb3-39"></span>
<span id="cb3-40"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Recreate a dataframe, scale necessary variables</span></span>
<span id="cb3-41">df <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.DataFrame(imputed_data, index<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>df.index, columns<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>df.columns).<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">apply</span>(<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">lambda</span> z: st.zscore(z) <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> z.name <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> z_score_these <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span> z)</span></code></pre></div></div>
</div>
<div id="40a41994" class="cell" data-execution_count="4">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb4-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Test association using a PyMC negative binomial model</span></span>
<span id="cb4-2">X <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> df.drop(columns<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Purchases'</span>)</span>
<span id="cb4-3">y <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> df[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Purchases'</span>].values</span>
<span id="cb4-4"></span>
<span id="cb4-5"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> pm.Model(coords<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>{<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'coefs'</span>: X.columns}) <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> bayesian_negbinom_regression:</span>
<span id="cb4-6">    </span>
<span id="cb4-7">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Define priors over intercept and all coefficients</span></span>
<span id="cb4-8">    β<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Normal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'β0'</span>, mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb4-9">    β <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Normal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'β'</span>, mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, dims<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'coefs'</span>)</span>
<span id="cb4-10">    </span>
<span id="cb4-11">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Compute linear predictor</span></span>
<span id="cb4-12">    λ <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> β<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> pm.math.dot(X.values, β)</span>
<span id="cb4-13">    </span>
<span id="cb4-14">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Take the exponent</span></span>
<span id="cb4-15">    λ_exp <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Deterministic(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'λ_exp'</span>, pm.math.exp(λ))</span>
<span id="cb4-16">    </span>
<span id="cb4-17">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Send to a Poisson likelihood which models the count of a variable</span></span>
<span id="cb4-18">    α <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Exponential(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'nb'</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.01</span>)</span>
<span id="cb4-19">    pm.NegativeBinomial(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'likelihood'</span>, mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>λ_exp, alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>α, observed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>y)</span>
<span id="cb4-20">    </span>
<span id="cb4-21">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Sample</span></span>
<span id="cb4-22">    trace <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.sample(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2000</span>, tune<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2000</span>, target_accept<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.90</span>, random_seed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">42</span>)</span></code></pre></div></div>
</div>
<pre><code>Auto-assigning NUTS sampler...
Initializing NUTS using jitter+adapt_diag...
Multiprocess sampling (4 chains in 4 jobs)
NUTS: [β0, β, nb]</code></pre>
<style>
    /* Turns off some styling */
    progress {
        /* gets rid of default border in Firefox and Opera. */
        border: none;
        /* Needs to be in here for Safari polyfill so background images work as expected. */
        background-size: auto;
    }
    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {
        background: #F44336;
    }
</style>
<div>
<p><progress value="16000" class="" max="16000" style="width:300px; height:20px; vertical-align: middle;"></progress> 100.00% [16000/16000 00:19&lt;00:00 Sampling 4 chains, 0 divergences]</p>
</div>
<pre><code>Sampling 4 chains for 2_000 tune and 2_000 draw iterations (8_000 + 8_000 draws total) took 43 seconds.</code></pre>
<div id="022abdab" class="cell" data-execution_count="5">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb7" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb7-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Extract the posterior distribution of the "complaints" predictor</span></span>
<span id="cb7-2">coef_trace <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.exp(trace[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior'</span>].sel(coefs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Complaints'</span>)[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'β'</span>].values.flatten())</span>
<span id="cb7-3"></span>
<span id="cb7-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Take its empirical cumulative distribution</span></span>
<span id="cb7-5">ecdf <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> ECDF(coef_trace)([coef_trace]).ravel()</span>
<span id="cb7-6"></span>
<span id="cb7-7"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># and its survival function</span></span>
<span id="cb7-8">esf <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> ecdf</span>
<span id="cb7-9"></span>
<span id="cb7-10"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Build a kernel density estimate and its probability density function of the coefficient</span></span>
<span id="cb7-11">kde <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> st.gaussian_kde(coef_trace).pdf(coef_trace)</span>
<span id="cb7-12"></span>
<span id="cb7-13"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Store as a df</span></span>
<span id="cb7-14">traceplot <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.DataFrame({<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'trace'</span>: coef_trace, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'density'</span>: kde, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'ecdf'</span>: ecdf, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'esf'</span>: esf}).<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">round</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>)</span>
<span id="cb7-15"></span>
<span id="cb7-16"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># The kdeplot</span></span>
<span id="cb7-17">alt.data_transformers.enable(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'default'</span>, max_rows<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8_000</span>)</span>
<span id="cb7-18">kdeplot <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (alt.Chart(traceplot, width<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">500</span>, height<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">500</span>)</span>
<span id="cb7-19">           .mark_area(opacity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.5</span>, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>, width<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>, point<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>alt.OverlayMarkDef(color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>))</span>
<span id="cb7-20">           .encode(x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>alt.X(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'trace:Q'</span>, title<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Change in rate of purchasing with increasing complaints'</span>),</span>
<span id="cb7-21">                   y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>alt.Y(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'density:Q'</span>, title<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">''</span>, axis<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>alt.Axis(labels<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>)),</span>
<span id="cb7-22">                   tooltip<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[alt.Tooltip(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'trace:Q'</span>, title<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Plausible purchase change rate'</span>),</span>
<span id="cb7-23">                            alt.Tooltip(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'ecdf:O'</span>, title<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Probability effect is less than X'</span>),</span>
<span id="cb7-24">                            alt.Tooltip(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'esf:O'</span>, title<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Probability effect is bigger than X'</span>)])</span>
<span id="cb7-25">          )</span>
<span id="cb7-26"></span>
<span id="cb7-27"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Text labels</span></span>
<span id="cb7-28">text_μ <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (alt.Chart({<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'values'</span>: [{<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'x'</span>: <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.40</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'y'</span>: <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.84</span>}]})</span>
<span id="cb7-29">          .mark_text(text<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">f'Average effect = </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span>coef_trace<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.</span>mean()<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:.2f}</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">'</span>, size<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span>)</span>
<span id="cb7-30">          .encode(x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'x:Q'</span>, y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'y:Q'</span>))</span>
<span id="cb7-31">text_θ <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (alt.Chart({<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'values'</span>: [{<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'x'</span>: <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.40</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'y'</span>: <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.60</span>}]})</span>
<span id="cb7-32">          .mark_text(text<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'95</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">% i</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">nterval [</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{0:.2f}</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">, </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{1:.2f}</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">]'</span>.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">format</span>(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>az.hdi(coef_trace, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.95</span>)), size<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span>)</span>
<span id="cb7-33">          .encode(x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'x:Q'</span>, y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'y:Q'</span>))</span>
<span id="cb7-34"></span>
<span id="cb7-35"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Add together in a layer, adjust font size</span></span>
<span id="cb7-36">(kdeplot <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> text_μ <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> text_θ).configure_axis(labelFontSize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span>, titleFontSize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span>)</span></code></pre></div></div>
</div>
<div id="altair-viz-d3e507224e864d1194edd2227565622b">

</div>
<script type="text/javascript">
  var VEGA_DEBUG = (typeof VEGA_DEBUG == "undefined") ? {} : VEGA_DEBUG;
  (function(spec, embedOpt){
    let outputDiv = document.currentScript.previousElementSibling;
    if (outputDiv.id !== "altair-viz-d3e507224e864d1194edd2227565622b") {
      outputDiv = document.getElementById("altair-viz-d3e507224e864d1194edd2227565622b");
    }
    const paths = {
      "vega": "https://cdn.jsdelivr.net/npm//vega@5?noext",
      "vega-lib": "https://cdn.jsdelivr.net/npm//vega-lib?noext",
      "vega-lite": "https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext",
      "vega-embed": "https://cdn.jsdelivr.net/npm//vega-embed@6?noext",
    };

    function maybeLoadScript(lib, version) {
      var key = `${lib.replace("-", "")}_version`;
      return (VEGA_DEBUG[key] == version) ?
        Promise.resolve(paths[lib]) :
        new Promise(function(resolve, reject) {
          var s = document.createElement('script');
          document.getElementsByTagName("head")[0].appendChild(s);
          s.async = true;
          s.onload = () => {
            VEGA_DEBUG[key] = version;
            return resolve(paths[lib]);
          };
          s.onerror = () => reject(`Error loading script: ${paths[lib]}`);
          s.src = paths[lib];
        });
    }

    function showError(err) {
      outputDiv.innerHTML = `<div class="error" style="color:red;">${err}</div>`;
      throw err;
    }

    function displayChart(vegaEmbed) {
      vegaEmbed(outputDiv, spec, embedOpt)
        .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));
    }

    if(typeof define === "function" && define.amd) {
      requirejs.config({paths});
      require(["vega-embed"], displayChart, err => showError(`Error loading script: ${err.message}`));
    } else {
      maybeLoadScript("vega", "5")
        .then(() => maybeLoadScript("vega-lite", "4.17.0"))
        .then(() => maybeLoadScript("vega-embed", "6"))
        .catch(showError)
        .then(() => displayChart(vegaEmbed));
    }
  })({"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}, "axis": {"labelFontSize": 16, "titleFontSize": 16}}, "layer": [{"data": {"name": "data-e3f776e5706aa92feefd3ceada2eb5ff"}, "mark": {"type": "area", "color": "black", "opacity": 0.5, "point": {"color": "black"}, "width": 10}, "encoding": {"tooltip": [{"field": "trace", "title": "Plausible purchase change rate", "type": "quantitative"}, {"field": "ecdf", "title": "Probability effect is less than X", "type": "ordinal"}, {"field": "esf", "title": "Probability effect is bigger than X", "type": "ordinal"}], "x": {"field": "trace", "title": "Change in rate of purchasing with increasing complaints", "type": "quantitative"}, "y": {"axis": {"labels": false}, "field": "density", "title": "", "type": "quantitative"}}, "height": 500, "width": 500}, {"data": {"name": "data-cc89e1a883d94a4bb40c15b1a1c9f640"}, "mark": {"type": "text", "size": 16, "text": "Average effect = 1.06"}, "encoding": {"x": {"field": "x", "type": "quantitative"}, "y": {"field": "y", "type": "quantitative"}}}, {"data": {"name": "data-1395cfaebbe2c8ea89a79e8befc657d6"}, "mark": {"type": "text", "size": 16, "text": "95% interval [0.90, 1.24]"}, "encoding": {"x": {"field": "x", "type": "quantitative"}, "y": {"field": "y", "type": "quantitative"}}}], "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json", "datasets": {"data-e3f776e5706aa92feefd3ceada2eb5ff": [{"trace": 1.032, "density": 4.415, "ecdf": 0.379, "esf": 0.621}, {"trace": 1.184, "density": 1.609, "ecdf": 0.91, "esf": 0.09}, {"trace": 1.101, "density": 3.864, "ecdf": 0.679, "esf": 0.321}, {"trace": 1.043, "density": 4.447, "ecdf": 0.434, "esf": 0.566}, {"trace": 1.062, "density": 4.384, "ecdf": 0.515, "esf": 0.485}, {"trace": 1.155, "density": 2.399, "ecdf": 0.853, "esf": 0.147}, {"trace": 1.095, "density": 3.971, "ecdf": 0.654, "esf": 0.346}, {"trace": 1.075, "density": 4.252, "ecdf": 0.574, "esf": 0.426}, {"trace": 0.972, "density": 2.901, "ecdf": 0.149, "esf": 0.851}, {"trace": 1.044, "density": 4.448, "ecdf": 0.438, "esf": 0.562}, {"trace": 1.139, "density": 2.854, "ecdf": 0.81, "esf": 0.19}, {"trace": 1.108, "density": 3.723, "ecdf": 0.707, "esf": 0.293}, {"trace": 1.136, "density": 2.946, "ecdf": 0.8, "esf": 0.2}, {"trace": 1.201, "density": 1.262, "ecdf": 0.934, "esf": 0.066}, {"trace": 0.896, "density": 0.646, "ecdf": 0.02, "esf": 0.98}, {"trace": 1.122, "density": 3.348, "ecdf": 0.759, "esf": 0.241}, {"trace": 1.092, "density": 4.009, "ecdf": 0.645, "esf": 0.355}, {"trace": 1.253, "density": 0.517, "ecdf": 0.975, "esf": 0.025}, {"trace": 1.194, "density": 1.4, "ecdf": 0.923, "esf": 0.077}, {"trace": 1.229, "density": 0.76, "ecdf": 0.961, "esf": 0.039}, {"trace": 1.064, "density": 4.367, "ecdf": 0.526, "esf": 0.474}, {"trace": 0.974, "density": 2.94, "ecdf": 0.153, "esf": 0.847}, {"trace": 0.998, "density": 3.878, "ecdf": 0.232, "esf": 0.768}, {"trace": 1.019, "density": 4.341, "ecdf": 0.327, "esf": 0.673}, {"trace": 0.992, "density": 3.646, "ecdf": 0.208, "esf": 0.792}, {"trace": 1.001, "density": 3.99, "ecdf": 0.246, "esf": 0.754}, {"trace": 0.994, "density": 3.748, "ecdf": 0.216, "esf": 0.784}, {"trace": 1.052, "density": 4.433, "ecdf": 0.476, "esf": 0.524}, {"trace": 1.153, "density": 2.476, "ecdf": 0.845, "esf": 0.155}, {"trace": 1.125, "density": 3.269, "ecdf": 0.768, "esf": 0.232}, {"trace": 1.001, "density": 4.007, "ecdf": 0.249, "esf": 0.751}, {"trace": 1.065, "density": 4.359, "ecdf": 0.532, "esf": 0.468}, {"trace": 1.098, "density": 3.91, "ecdf": 0.668, "esf": 0.332}, {"trace": 1.051, "density": 4.438, "ecdf": 0.47, "esf": 0.53}, {"trace": 1.126, "density": 3.234, "ecdf": 0.772, "esf": 0.228}, {"trace": 0.996, "density": 3.807, "ecdf": 0.223, "esf": 0.777}, {"trace": 1.108, "density": 3.728, "ecdf": 0.704, "esf": 0.296}, {"trace": 1.078, "density": 4.217, "ecdf": 0.586, "esf": 0.414}, {"trace": 1.065, "density": 4.362, "ecdf": 0.53, "esf": 0.47}, {"trace": 1.059, "density": 4.399, "ecdf": 0.505, "esf": 0.495}, {"trace": 1.115, "density": 3.547, "ecdf": 0.734, "esf": 0.266}, {"trace": 1.034, "density": 4.427, "ecdf": 0.391, "esf": 0.609}, {"trace": 1.145, "density": 2.695, "ecdf": 0.826, "esf": 0.174}, {"trace": 1.086, "density": 4.102, "ecdf": 0.622, "esf": 0.378}, {"trace": 1.057, "density": 4.415, "ecdf": 0.492, "esf": 0.508}, {"trace": 1.083, "density": 4.141, "ecdf": 0.611, "esf": 0.389}, {"trace": 1.185, "density": 1.587, "ecdf": 0.911, "esf": 0.089}, {"trace": 1.256, "density": 0.492, "ecdf": 0.976, "esf": 0.024}, {"trace": 0.997, "density": 3.852, "ecdf": 0.229, "esf": 0.771}, {"trace": 1.003, "density": 4.049, "ecdf": 0.253, "esf": 0.747}, {"trace": 1.084, "density": 4.127, "ecdf": 0.616, "esf": 0.384}, {"trace": 1.075, "density": 4.259, "ecdf": 0.571, "esf": 0.429}, {"trace": 1.051, "density": 4.438, "ecdf": 0.469, "esf": 0.531}, {"trace": 1.069, "density": 4.319, "ecdf": 0.549, "esf": 0.451}, {"trace": 1.156, "density": 2.385, "ecdf": 0.855, "esf": 0.145}, {"trace": 1.136, "density": 2.946, "ecdf": 0.8, "esf": 0.2}, {"trace": 0.94, "density": 1.89, "ecdf": 0.074, "esf": 0.926}, {"trace": 0.978, "density": 3.095, "ecdf": 0.167, "esf": 0.833}, {"trace": 0.976, "density": 3.017, "ecdf": 0.16, "esf": 0.84}, {"trace": 1.061, "density": 4.386, "ecdf": 0.514, "esf": 0.486}, {"trace": 1.12, "density": 3.426, "ecdf": 0.749, "esf": 0.251}, {"trace": 1.164, "density": 2.15, "ecdf": 0.874, "esf": 0.126}, {"trace": 0.994, "density": 3.732, "ecdf": 0.215, "esf": 0.785}, {"trace": 1.068, "density": 4.336, "ecdf": 0.542, "esf": 0.458}, {"trace": 1.021, "density": 4.353, "ecdf": 0.334, "esf": 0.666}, {"trace": 1.012, "density": 4.26, "ecdf": 0.295, "esf": 0.705}, {"trace": 0.991, "density": 3.599, "ecdf": 0.203, "esf": 0.797}, {"trace": 1.006, "density": 4.138, "ecdf": 0.268, "esf": 0.732}, {"trace": 1.086, "density": 4.102, "ecdf": 0.621, "esf": 0.379}, {"trace": 1.054, "density": 4.426, "ecdf": 0.481, "esf": 0.519}, {"trace": 1.11, "density": 3.669, "ecdf": 0.716, "esf": 0.284}, {"trace": 1.079, "density": 4.208, "ecdf": 0.588, "esf": 0.412}, {"trace": 1.106, "density": 3.754, "ecdf": 0.702, "esf": 0.298}, {"trace": 1.036, "density": 4.433, "ecdf": 0.4, "esf": 0.6}, {"trace": 1.01, "density": 4.219, "ecdf": 0.286, "esf": 0.714}, {"trace": 1.105, "density": 3.791, "ecdf": 0.696, "esf": 0.304}, {"trace": 1.044, "density": 4.448, "ecdf": 0.438, "esf": 0.562}, {"trace": 1.028, "density": 4.399, "ecdf": 0.365, "esf": 0.635}, {"trace": 0.816, "density": 0.042, "ecdf": 0.001, "esf": 0.999}, {"trace": 1.06, "density": 4.396, "ecdf": 0.506, "esf": 0.494}, {"trace": 1.075, "density": 4.256, "ecdf": 0.572, "esf": 0.428}, {"trace": 1.023, "density": 4.368, "ecdf": 0.344, "esf": 0.656}, {"trace": 1.072, "density": 4.285, "ecdf": 0.561, "esf": 0.439}, {"trace": 1.088, "density": 4.071, "ecdf": 0.629, "esf": 0.371}, {"trace": 1.124, "density": 3.291, "ecdf": 0.765, "esf": 0.235}, {"trace": 1.055, "density": 4.423, "ecdf": 0.485, "esf": 0.515}, {"trace": 1.001, "density": 4.001, "ecdf": 0.248, "esf": 0.752}, {"trace": 1.029, "density": 4.404, "ecdf": 0.369, "esf": 0.631}, {"trace": 1.121, "density": 3.396, "ecdf": 0.752, "esf": 0.248}, {"trace": 1.096, "density": 3.942, "ecdf": 0.663, "esf": 0.337}, {"trace": 1.096, "density": 3.944, "ecdf": 0.662, "esf": 0.338}, {"trace": 1.083, "density": 4.154, "ecdf": 0.608, "esf": 0.392}, {"trace": 1.111, "density": 3.641, "ecdf": 0.72, "esf": 0.28}, {"trace": 1.076, "density": 4.237, "ecdf": 0.578, "esf": 0.422}, {"trace": 1.016, "density": 4.303, "ecdf": 0.312, "esf": 0.688}, {"trace": 1.064, "density": 4.363, "ecdf": 0.529, "esf": 0.471}, {"trace": 1.043, "density": 4.447, "ecdf": 0.431, "esf": 0.569}, {"trace": 1.112, "density": 3.618, "ecdf": 0.724, "esf": 0.276}, {"trace": 0.959, "density": 2.475, "ecdf": 0.112, "esf": 0.888}, {"trace": 1.185, "density": 1.57, "ecdf": 0.912, "esf": 0.088}, {"trace": 1.154, "density": 2.434, "ecdf": 0.85, "esf": 0.15}, {"trace": 0.997, "density": 3.876, "ecdf": 0.232, "esf": 0.768}, {"trace": 1.102, "density": 3.839, "ecdf": 0.686, "esf": 0.314}, {"trace": 1.063, "density": 4.376, "ecdf": 0.521, "esf": 0.479}, {"trace": 1.12, "density": 3.421, "ecdf": 0.75, "esf": 0.25}, {"trace": 1.398, "density": 0.029, "ecdf": 0.999, "esf": 0.001}, {"trace": 0.966, "density": 2.689, "ecdf": 0.131, "esf": 0.869}, {"trace": 0.995, "density": 3.778, "ecdf": 0.218, "esf": 0.782}, {"trace": 1.106, "density": 3.761, "ecdf": 0.701, "esf": 0.299}, {"trace": 1.017, "density": 4.319, "ecdf": 0.318, "esf": 0.682}, {"trace": 1.142, "density": 2.767, "ecdf": 0.817, "esf": 0.183}, {"trace": 1.057, "density": 4.415, "ecdf": 0.492, "esf": 0.508}, {"trace": 1.144, "density": 2.705, "ecdf": 0.824, "esf": 0.176}, {"trace": 1.141, "density": 2.79, "ecdf": 0.815, "esf": 0.185}, {"trace": 1.144, "density": 2.7, "ecdf": 0.825, "esf": 0.175}, {"trace": 0.942, "density": 1.95, "ecdf": 0.077, "esf": 0.923}, {"trace": 1.187, "density": 1.534, "ecdf": 0.913, "esf": 0.087}, {"trace": 1.259, "density": 0.467, "ecdf": 0.978, "esf": 0.022}, {"trace": 1.145, "density": 2.684, "ecdf": 0.827, "esf": 0.173}, {"trace": 0.977, "density": 3.078, "ecdf": 0.165, "esf": 0.835}, {"trace": 0.983, "density": 3.274, "ecdf": 0.179, "esf": 0.821}, {"trace": 1.001, "density": 4.0, "ecdf": 0.248, "esf": 0.752}, {"trace": 1.089, "density": 4.067, "ecdf": 0.63, "esf": 0.37}, {"trace": 1.027, "density": 4.39, "ecdf": 0.359, "esf": 0.641}, {"trace": 1.198, "density": 1.331, "ecdf": 0.928, "esf": 0.072}, {"trace": 1.026, "density": 4.386, "ecdf": 0.356, "esf": 0.645}, {"trace": 1.175, "density": 1.834, "ecdf": 0.894, "esf": 0.106}, {"trace": 1.157, "density": 2.352, "ecdf": 0.858, "esf": 0.142}, {"trace": 0.996, "density": 3.831, "ecdf": 0.226, "esf": 0.774}, {"trace": 0.984, "density": 3.331, "ecdf": 0.183, "esf": 0.817}, {"trace": 1.101, "density": 3.864, "ecdf": 0.679, "esf": 0.321}, {"trace": 1.077, "density": 4.234, "ecdf": 0.579, "esf": 0.421}, {"trace": 1.238, "density": 0.658, "ecdf": 0.967, "esf": 0.033}, {"trace": 0.899, "density": 0.694, "ecdf": 0.021, "esf": 0.979}, {"trace": 1.059, "density": 4.403, "ecdf": 0.501, "esf": 0.499}, {"trace": 0.994, "density": 3.726, "ecdf": 0.215, "esf": 0.785}, {"trace": 1.153, "density": 2.459, "ecdf": 0.847, "esf": 0.153}, {"trace": 1.18, "density": 1.686, "ecdf": 0.904, "esf": 0.096}, {"trace": 0.896, "density": 0.646, "ecdf": 0.02, "esf": 0.98}, {"trace": 1.035, "density": 4.429, "ecdf": 0.394, "esf": 0.606}, {"trace": 1.049, "density": 4.444, "ecdf": 0.458, "esf": 0.542}, {"trace": 1.174, "density": 1.862, "ecdf": 0.892, "esf": 0.108}, {"trace": 0.953, "density": 2.275, "ecdf": 0.098, "esf": 0.902}, {"trace": 1.074, "density": 4.267, "ecdf": 0.568, "esf": 0.432}, {"trace": 1.115, "density": 3.539, "ecdf": 0.734, "esf": 0.265}, {"trace": 1.084, "density": 4.131, "ecdf": 0.615, "esf": 0.385}, {"trace": 0.99, "density": 3.591, "ecdf": 0.203, "esf": 0.797}, {"trace": 1.102, "density": 3.839, "ecdf": 0.685, "esf": 0.315}, {"trace": 1.008, "density": 4.175, "ecdf": 0.277, "esf": 0.723}, {"trace": 1.147, "density": 2.617, "ecdf": 0.832, "esf": 0.168}, {"trace": 1.043, "density": 4.447, "ecdf": 0.431, "esf": 0.569}, {"trace": 1.046, "density": 4.447, "ecdf": 0.446, "esf": 0.554}, {"trace": 1.107, "density": 3.742, "ecdf": 0.703, "esf": 0.297}, {"trace": 0.945, "density": 2.04, "ecdf": 0.082, "esf": 0.918}, {"trace": 0.915, "density": 1.078, "ecdf": 0.033, "esf": 0.967}, {"trace": 1.058, "density": 4.41, "ecdf": 0.497, "esf": 0.503}, {"trace": 0.85, "density": 0.169, "ecdf": 0.004, "esf": 0.996}, {"trace": 1.055, "density": 4.425, "ecdf": 0.483, "esf": 0.517}, {"trace": 1.108, "density": 3.711, "ecdf": 0.709, "esf": 0.291}, {"trace": 1.006, "density": 4.129, "ecdf": 0.267, "esf": 0.733}, {"trace": 1.04, "density": 4.444, "ecdf": 0.421, "esf": 0.579}, {"trace": 1.078, "density": 4.221, "ecdf": 0.584, "esf": 0.416}, {"trace": 1.104, "density": 3.807, "ecdf": 0.693, "esf": 0.307}, {"trace": 1.072, "density": 4.284, "ecdf": 0.561, "esf": 0.439}, {"trace": 0.952, "density": 2.24, "ecdf": 0.095, "esf": 0.905}, {"trace": 1.096, "density": 3.944, "ecdf": 0.662, "esf": 0.338}, {"trace": 1.154, "density": 2.433, "ecdf": 0.85, "esf": 0.15}, {"trace": 1.081, "density": 4.181, "ecdf": 0.598, "esf": 0.401}, {"trace": 1.051, "density": 4.437, "ecdf": 0.471, "esf": 0.529}, {"trace": 1.046, "density": 4.447, "ecdf": 0.444, "esf": 0.556}, {"trace": 1.064, "density": 4.364, "ecdf": 0.528, "esf": 0.472}, {"trace": 1.142, "density": 2.766, "ecdf": 0.817, "esf": 0.183}, {"trace": 1.033, "density": 4.421, "ecdf": 0.383, "esf": 0.617}, {"trace": 1.248, "density": 0.562, "ecdf": 0.973, "esf": 0.027}, {"trace": 1.014, "density": 4.285, "ecdf": 0.305, "esf": 0.695}, {"trace": 1.171, "density": 1.951, "ecdf": 0.887, "esf": 0.113}, {"trace": 0.975, "density": 2.995, "ecdf": 0.158, "esf": 0.842}, {"trace": 0.978, "density": 3.094, "ecdf": 0.167, "esf": 0.833}, {"trace": 1.057, "density": 4.415, "ecdf": 0.492, "esf": 0.508}, {"trace": 1.035, "density": 4.429, "ecdf": 0.395, "esf": 0.605}, {"trace": 1.037, "density": 4.435, "ecdf": 0.403, "esf": 0.597}, {"trace": 0.892, "density": 0.587, "ecdf": 0.018, "esf": 0.982}, {"trace": 1.418, "density": 0.021, "ecdf": 1.0, "esf": 0.0}, {"trace": 0.962, "density": 2.562, "ecdf": 0.119, "esf": 0.881}, {"trace": 0.935, "density": 1.729, "ecdf": 0.063, "esf": 0.937}, {"trace": 1.072, "density": 4.288, "ecdf": 0.56, "esf": 0.44}, {"trace": 1.094, "density": 3.977, "ecdf": 0.652, "esf": 0.348}, {"trace": 1.025, "density": 4.38, "ecdf": 0.351, "esf": 0.649}, {"trace": 1.156, "density": 2.388, "ecdf": 0.855, "esf": 0.145}, {"trace": 1.105, "density": 3.791, "ecdf": 0.696, "esf": 0.304}, {"trace": 1.057, "density": 4.411, "ecdf": 0.496, "esf": 0.504}, {"trace": 1.017, "density": 4.318, "ecdf": 0.318, "esf": 0.682}, {"trace": 1.077, "density": 4.228, "ecdf": 0.581, "esf": 0.419}, {"trace": 1.084, "density": 4.14, "ecdf": 0.612, "esf": 0.388}, {"trace": 1.091, "density": 4.035, "ecdf": 0.637, "esf": 0.363}, {"trace": 1.084, "density": 4.135, "ecdf": 0.614, "esf": 0.386}, {"trace": 1.004, "density": 4.092, "ecdf": 0.26, "esf": 0.74}, {"trace": 1.019, "density": 4.336, "ecdf": 0.325, "esf": 0.675}, {"trace": 1.228, "density": 0.784, "ecdf": 0.96, "esf": 0.04}, {"trace": 1.219, "density": 0.92, "ecdf": 0.953, "esf": 0.047}, {"trace": 0.915, "density": 1.096, "ecdf": 0.034, "esf": 0.966}, {"trace": 0.934, "density": 1.708, "ecdf": 0.062, "esf": 0.938}, {"trace": 1.029, "density": 4.405, "ecdf": 0.37, "esf": 0.63}, {"trace": 1.07, "density": 4.306, "ecdf": 0.554, "esf": 0.446}, {"trace": 1.05, "density": 4.44, "ecdf": 0.466, "esf": 0.534}, {"trace": 1.014, "density": 4.29, "ecdf": 0.307, "esf": 0.693}, {"trace": 1.245, "density": 0.588, "ecdf": 0.971, "esf": 0.029}, {"trace": 1.052, "density": 4.434, "ecdf": 0.476, "esf": 0.524}, {"trace": 0.986, "density": 3.394, "ecdf": 0.188, "esf": 0.812}, {"trace": 1.021, "density": 4.352, "ecdf": 0.333, "esf": 0.667}, {"trace": 1.162, "density": 2.209, "ecdf": 0.869, "esf": 0.131}, {"trace": 1.16, "density": 2.258, "ecdf": 0.865, "esf": 0.135}, {"trace": 1.217, "density": 0.954, "ecdf": 0.952, "esf": 0.048}, {"trace": 0.937, "density": 1.785, "ecdf": 0.067, "esf": 0.933}, {"trace": 1.152, "density": 2.484, "ecdf": 0.844, "esf": 0.156}, {"trace": 0.938, "density": 1.835, "ecdf": 0.071, "esf": 0.929}, {"trace": 0.971, "density": 2.854, "ecdf": 0.146, "esf": 0.854}, {"trace": 1.106, "density": 3.77, "ecdf": 0.699, "esf": 0.301}, {"trace": 0.947, "density": 2.104, "ecdf": 0.085, "esf": 0.915}, {"trace": 0.941, "density": 1.915, "ecdf": 0.076, "esf": 0.924}, {"trace": 0.931, "density": 1.62, "ecdf": 0.055, "esf": 0.945}, {"trace": 1.128, "density": 3.174, "ecdf": 0.779, "esf": 0.221}, {"trace": 1.018, "density": 4.332, "ecdf": 0.323, "esf": 0.677}, {"trace": 0.946, "density": 2.056, "ecdf": 0.083, "esf": 0.917}, {"trace": 0.963, "density": 2.606, "ecdf": 0.123, "esf": 0.877}, {"trace": 1.118, "density": 3.479, "ecdf": 0.742, "esf": 0.258}, {"trace": 1.098, "density": 3.914, "ecdf": 0.668, "esf": 0.332}, {"trace": 0.997, "density": 3.87, "ecdf": 0.231, "esf": 0.769}, {"trace": 0.998, "density": 3.913, "ecdf": 0.236, "esf": 0.764}, {"trace": 0.961, "density": 2.528, "ecdf": 0.116, "esf": 0.884}, {"trace": 0.947, "density": 2.1, "ecdf": 0.085, "esf": 0.915}, {"trace": 1.06, "density": 4.398, "ecdf": 0.505, "esf": 0.495}, {"trace": 1.084, "density": 4.132, "ecdf": 0.614, "esf": 0.386}, {"trace": 1.025, "density": 4.381, "ecdf": 0.352, "esf": 0.648}, {"trace": 0.966, "density": 2.696, "ecdf": 0.132, "esf": 0.868}, {"trace": 1.143, "density": 2.731, "ecdf": 0.821, "esf": 0.179}, {"trace": 1.233, "density": 0.716, "ecdf": 0.963, "esf": 0.037}, {"trace": 0.917, "density": 1.145, "ecdf": 0.036, "esf": 0.964}, {"trace": 1.209, "density": 1.109, "ecdf": 0.944, "esf": 0.056}, {"trace": 1.144, "density": 2.709, "ecdf": 0.824, "esf": 0.176}, {"trace": 1.05, "density": 4.441, "ecdf": 0.463, "esf": 0.537}, {"trace": 1.172, "density": 1.919, "ecdf": 0.889, "esf": 0.111}, {"trace": 1.129, "density": 3.134, "ecdf": 0.783, "esf": 0.217}, {"trace": 1.077, "density": 4.224, "ecdf": 0.582, "esf": 0.418}, {"trace": 1.05, "density": 4.441, "ecdf": 0.464, "esf": 0.536}, {"trace": 1.209, "density": 1.119, "ecdf": 0.943, "esf": 0.057}, {"trace": 1.041, "density": 4.445, "ecdf": 0.422, "esf": 0.578}, {"trace": 1.123, "density": 3.329, "ecdf": 0.761, "esf": 0.239}, {"trace": 1.074, "density": 4.266, "ecdf": 0.568, "esf": 0.432}, {"trace": 1.035, "density": 4.429, "ecdf": 0.393, "esf": 0.607}, {"trace": 1.047, "density": 4.447, "ecdf": 0.448, "esf": 0.552}, {"trace": 1.115, "density": 3.563, "ecdf": 0.731, "esf": 0.269}, {"trace": 1.16, "density": 2.266, "ecdf": 0.864, "esf": 0.136}, {"trace": 1.102, "density": 3.841, "ecdf": 0.685, "esf": 0.315}, {"trace": 1.122, "density": 3.364, "ecdf": 0.757, "esf": 0.243}, {"trace": 1.178, "density": 1.749, "ecdf": 0.9, "esf": 0.1}, {"trace": 1.11, "density": 3.684, "ecdf": 0.713, "esf": 0.287}, {"trace": 0.937, "density": 1.801, "ecdf": 0.068, "esf": 0.932}, {"trace": 1.082, "density": 4.164, "ecdf": 0.604, "esf": 0.396}, {"trace": 1.121, "density": 3.395, "ecdf": 0.753, "esf": 0.247}, {"trace": 1.151, "density": 2.513, "ecdf": 0.842, "esf": 0.158}, {"trace": 1.113, "density": 3.614, "ecdf": 0.724, "esf": 0.276}, {"trace": 1.075, "density": 4.252, "ecdf": 0.573, "esf": 0.427}, {"trace": 0.921, "density": 1.277, "ecdf": 0.04, "esf": 0.96}, {"trace": 1.042, "density": 4.446, "ecdf": 0.426, "esf": 0.574}, {"trace": 1.017, "density": 4.315, "ecdf": 0.317, "esf": 0.683}, {"trace": 1.062, "density": 4.385, "ecdf": 0.515, "esf": 0.485}, {"trace": 1.052, "density": 4.433, "ecdf": 0.477, "esf": 0.523}, {"trace": 1.043, "density": 4.447, "ecdf": 0.432, "esf": 0.568}, {"trace": 1.122, "density": 3.347, "ecdf": 0.759, "esf": 0.241}, {"trace": 1.134, "density": 2.991, "ecdf": 0.796, "esf": 0.204}, {"trace": 1.013, "density": 4.265, "ecdf": 0.297, "esf": 0.703}, {"trace": 1.007, "density": 4.167, "ecdf": 0.275, "esf": 0.724}, {"trace": 0.948, "density": 2.115, "ecdf": 0.086, "esf": 0.914}, {"trace": 0.958, "density": 2.444, "ecdf": 0.109, "esf": 0.891}, {"trace": 0.972, "density": 2.889, "ecdf": 0.148, "esf": 0.852}, {"trace": 0.976, "density": 3.042, "ecdf": 0.162, "esf": 0.838}, {"trace": 1.133, "density": 3.032, "ecdf": 0.792, "esf": 0.208}, {"trace": 1.034, "density": 4.428, "ecdf": 0.392, "esf": 0.608}, {"trace": 1.057, "density": 4.413, "ecdf": 0.494, "esf": 0.506}, {"trace": 1.06, "density": 4.396, "ecdf": 0.507, "esf": 0.493}, {"trace": 1.054, "density": 4.428, "ecdf": 0.481, "esf": 0.519}, {"trace": 1.022, "density": 4.358, "ecdf": 0.338, "esf": 0.662}, {"trace": 1.137, "density": 2.922, "ecdf": 0.803, "esf": 0.197}, {"trace": 1.108, "density": 3.716, "ecdf": 0.708, "esf": 0.292}, {"trace": 1.169, "density": 2.008, "ecdf": 0.882, "esf": 0.118}, {"trace": 1.052, "density": 4.435, "ecdf": 0.474, "esf": 0.526}, {"trace": 1.052, "density": 4.435, "ecdf": 0.473, "esf": 0.527}, {"trace": 0.983, "density": 3.28, "ecdf": 0.179, "esf": 0.821}, {"trace": 0.892, "density": 0.585, "ecdf": 0.018, "esf": 0.982}, {"trace": 0.848, "density": 0.152, "ecdf": 0.003, "esf": 0.997}, {"trace": 0.827, "density": 0.067, "ecdf": 0.001, "esf": 0.999}, {"trace": 1.267, "density": 0.407, "ecdf": 0.982, "esf": 0.018}, {"trace": 1.13, "density": 3.125, "ecdf": 0.784, "esf": 0.216}, {"trace": 0.999, "density": 3.926, "ecdf": 0.238, "esf": 0.762}, {"trace": 1.178, "density": 1.753, "ecdf": 0.9, "esf": 0.1}, {"trace": 1.071, "density": 4.3, "ecdf": 0.556, "esf": 0.444}, {"trace": 0.966, "density": 2.701, "ecdf": 0.133, "esf": 0.867}, {"trace": 1.069, "density": 4.318, "ecdf": 0.55, "esf": 0.45}, {"trace": 1.234, "density": 0.698, "ecdf": 0.964, "esf": 0.036}, {"trace": 1.16, "density": 2.261, "ecdf": 0.865, "esf": 0.135}, {"trace": 0.968, "density": 2.759, "ecdf": 0.137, "esf": 0.863}, {"trace": 1.128, "density": 3.171, "ecdf": 0.78, "esf": 0.22}, {"trace": 1.184, "density": 1.602, "ecdf": 0.91, "esf": 0.09}, {"trace": 0.875, "density": 0.393, "ecdf": 0.01, "esf": 0.99}, {"trace": 1.167, "density": 2.074, "ecdf": 0.878, "esf": 0.122}, {"trace": 1.0, "density": 3.976, "ecdf": 0.244, "esf": 0.756}, {"trace": 1.074, "density": 4.262, "ecdf": 0.57, "esf": 0.43}, {"trace": 1.03, "density": 4.409, "ecdf": 0.373, "esf": 0.627}, {"trace": 1.247, "density": 0.574, "ecdf": 0.972, "esf": 0.027}, {"trace": 1.236, "density": 0.678, "ecdf": 0.965, "esf": 0.035}, {"trace": 0.923, "density": 1.355, "ecdf": 0.043, "esf": 0.957}, {"trace": 1.13, "density": 3.123, "ecdf": 0.784, "esf": 0.216}, {"trace": 1.006, "density": 4.145, "ecdf": 0.27, "esf": 0.73}, {"trace": 1.108, "density": 3.724, "ecdf": 0.706, "esf": 0.294}, {"trace": 1.005, "density": 4.122, "ecdf": 0.265, "esf": 0.735}, {"trace": 1.004, "density": 4.099, "ecdf": 0.261, "esf": 0.739}, {"trace": 0.991, "density": 3.624, "ecdf": 0.206, "esf": 0.794}, {"trace": 0.949, "density": 2.163, "ecdf": 0.089, "esf": 0.911}, {"trace": 1.003, "density": 4.062, "ecdf": 0.254, "esf": 0.746}, {"trace": 0.989, "density": 3.548, "ecdf": 0.2, "esf": 0.8}, {"trace": 1.188, "density": 1.51, "ecdf": 0.915, "esf": 0.085}, {"trace": 1.121, "density": 3.374, "ecdf": 0.755, "esf": 0.245}, {"trace": 1.102, "density": 3.841, "ecdf": 0.685, "esf": 0.315}, {"trace": 1.186, "density": 1.547, "ecdf": 0.913, "esf": 0.087}, {"trace": 1.175, "density": 1.82, "ecdf": 0.896, "esf": 0.104}, {"trace": 0.92, "density": 1.23, "ecdf": 0.039, "esf": 0.961}, {"trace": 1.031, "density": 4.411, "ecdf": 0.374, "esf": 0.626}, {"trace": 1.133, "density": 3.023, "ecdf": 0.793, "esf": 0.207}, {"trace": 1.104, "density": 3.813, "ecdf": 0.692, "esf": 0.308}, {"trace": 1.0, "density": 3.974, "ecdf": 0.244, "esf": 0.756}, {"trace": 0.967, "density": 2.721, "ecdf": 0.134, "esf": 0.866}, {"trace": 1.047, "density": 4.446, "ecdf": 0.45, "esf": 0.55}, {"trace": 1.128, "density": 3.183, "ecdf": 0.778, "esf": 0.222}, {"trace": 1.136, "density": 2.928, "ecdf": 0.803, "esf": 0.197}, {"trace": 1.045, "density": 4.448, "ecdf": 0.442, "esf": 0.558}, {"trace": 1.101, "density": 3.869, "ecdf": 0.678, "esf": 0.322}, {"trace": 0.974, "density": 2.94, "ecdf": 0.153, "esf": 0.847}, {"trace": 1.069, "density": 4.321, "ecdf": 0.548, "esf": 0.452}, {"trace": 1.072, "density": 4.284, "ecdf": 0.561, "esf": 0.439}, {"trace": 0.928, "density": 1.501, "ecdf": 0.048, "esf": 0.952}, {"trace": 0.906, "density": 0.84, "ecdf": 0.027, "esf": 0.973}, {"trace": 1.004, "density": 4.079, "ecdf": 0.258, "esf": 0.742}, {"trace": 1.184, "density": 1.604, "ecdf": 0.91, "esf": 0.09}, {"trace": 1.0, "density": 3.961, "ecdf": 0.242, "esf": 0.758}, {"trace": 1.077, "density": 4.225, "ecdf": 0.582, "esf": 0.418}, {"trace": 1.032, "density": 4.419, "ecdf": 0.382, "esf": 0.618}, {"trace": 1.024, "density": 4.374, "ecdf": 0.348, "esf": 0.652}, {"trace": 0.99, "density": 3.569, "ecdf": 0.201, "esf": 0.799}, {"trace": 1.013, "density": 4.272, "ecdf": 0.3, "esf": 0.7}, {"trace": 1.052, "density": 4.436, "ecdf": 0.472, "esf": 0.528}, {"trace": 1.164, "density": 2.154, "ecdf": 0.873, "esf": 0.127}, {"trace": 0.96, "density": 2.508, "ecdf": 0.115, "esf": 0.885}, {"trace": 0.93, "density": 1.587, "ecdf": 0.053, "esf": 0.947}, {"trace": 0.958, "density": 2.427, "ecdf": 0.108, "esf": 0.892}, {"trace": 1.081, "density": 4.177, "ecdf": 0.599, "esf": 0.401}, {"trace": 0.961, "density": 2.548, "ecdf": 0.118, "esf": 0.882}, {"trace": 1.058, "density": 4.407, "ecdf": 0.498, "esf": 0.502}, {"trace": 1.075, "density": 4.26, "ecdf": 0.57, "esf": 0.43}, {"trace": 0.933, "density": 1.663, "ecdf": 0.058, "esf": 0.942}, {"trace": 1.104, "density": 3.811, "ecdf": 0.692, "esf": 0.308}, {"trace": 1.023, "density": 4.365, "ecdf": 0.343, "esf": 0.657}, {"trace": 1.062, "density": 4.379, "ecdf": 0.519, "esf": 0.481}, {"trace": 1.077, "density": 4.225, "ecdf": 0.582, "esf": 0.418}, {"trace": 1.125, "density": 3.262, "ecdf": 0.769, "esf": 0.231}, {"trace": 1.087, "density": 4.084, "ecdf": 0.626, "esf": 0.374}, {"trace": 1.03, "density": 4.406, "ecdf": 0.37, "esf": 0.63}, {"trace": 0.955, "density": 2.337, "ecdf": 0.102, "esf": 0.898}, {"trace": 0.98, "density": 3.191, "ecdf": 0.173, "esf": 0.827}, {"trace": 1.122, "density": 3.345, "ecdf": 0.76, "esf": 0.24}, {"trace": 1.241, "density": 0.623, "ecdf": 0.969, "esf": 0.031}, {"trace": 1.027, "density": 4.392, "ecdf": 0.361, "esf": 0.639}, {"trace": 1.05, "density": 4.441, "ecdf": 0.464, "esf": 0.536}, {"trace": 1.21, "density": 1.102, "ecdf": 0.945, "esf": 0.055}, {"trace": 0.933, "density": 1.684, "ecdf": 0.06, "esf": 0.94}, {"trace": 1.022, "density": 4.362, "ecdf": 0.34, "esf": 0.66}, {"trace": 1.053, "density": 4.429, "ecdf": 0.479, "esf": 0.521}, {"trace": 1.056, "density": 4.418, "ecdf": 0.489, "esf": 0.511}, {"trace": 1.048, "density": 4.445, "ecdf": 0.454, "esf": 0.546}, {"trace": 0.978, "density": 3.106, "ecdf": 0.168, "esf": 0.832}, {"trace": 1.057, "density": 4.414, "ecdf": 0.493, "esf": 0.507}, {"trace": 1.0, "density": 3.974, "ecdf": 0.244, "esf": 0.756}, {"trace": 1.041, "density": 4.445, "ecdf": 0.424, "esf": 0.576}, {"trace": 0.907, "density": 0.866, "ecdf": 0.028, "esf": 0.972}, {"trace": 1.099, "density": 3.898, "ecdf": 0.671, "esf": 0.329}, {"trace": 1.139, "density": 2.855, "ecdf": 0.81, "esf": 0.19}, {"trace": 1.12, "density": 3.418, "ecdf": 0.75, "esf": 0.25}, {"trace": 1.064, "density": 4.368, "ecdf": 0.526, "esf": 0.474}, {"trace": 0.963, "density": 2.58, "ecdf": 0.121, "esf": 0.879}, {"trace": 1.037, "density": 4.437, "ecdf": 0.406, "esf": 0.594}, {"trace": 1.309, "density": 0.169, "ecdf": 0.993, "esf": 0.007}, {"trace": 1.103, "density": 3.828, "ecdf": 0.688, "esf": 0.312}, {"trace": 1.096, "density": 3.945, "ecdf": 0.661, "esf": 0.339}, {"trace": 1.034, "density": 4.427, "ecdf": 0.391, "esf": 0.609}, {"trace": 1.077, "density": 4.23, "ecdf": 0.58, "esf": 0.42}, {"trace": 1.075, "density": 4.253, "ecdf": 0.573, "esf": 0.427}, {"trace": 1.021, "density": 4.356, "ecdf": 0.336, "esf": 0.664}, {"trace": 1.122, "density": 3.352, "ecdf": 0.758, "esf": 0.242}, {"trace": 1.024, "density": 4.377, "ecdf": 0.35, "esf": 0.65}, {"trace": 0.892, "density": 0.591, "ecdf": 0.018, "esf": 0.982}, {"trace": 0.942, "density": 1.96, "ecdf": 0.078, "esf": 0.922}, {"trace": 1.262, "density": 0.444, "ecdf": 0.98, "esf": 0.02}, {"trace": 0.887, "density": 0.516, "ecdf": 0.016, "esf": 0.984}, {"trace": 1.115, "density": 3.556, "ecdf": 0.732, "esf": 0.268}, {"trace": 1.092, "density": 4.015, "ecdf": 0.642, "esf": 0.358}, {"trace": 1.01, "density": 4.229, "ecdf": 0.288, "esf": 0.712}, {"trace": 1.011, "density": 4.243, "ecdf": 0.292, "esf": 0.708}, {"trace": 1.041, "density": 4.445, "ecdf": 0.422, "esf": 0.578}, {"trace": 0.973, "density": 2.916, "ecdf": 0.15, "esf": 0.85}, {"trace": 1.102, "density": 3.842, "ecdf": 0.684, "esf": 0.316}, {"trace": 1.096, "density": 3.946, "ecdf": 0.661, "esf": 0.339}, {"trace": 1.084, "density": 4.131, "ecdf": 0.615, "esf": 0.385}, {"trace": 1.048, "density": 4.445, "ecdf": 0.455, "esf": 0.545}, {"trace": 1.032, "density": 4.417, "ecdf": 0.38, "esf": 0.62}, {"trace": 0.949, "density": 2.164, "ecdf": 0.089, "esf": 0.911}, {"trace": 1.122, "density": 3.369, "ecdf": 0.756, "esf": 0.244}, {"trace": 0.911, "density": 0.981, "ecdf": 0.03, "esf": 0.97}, {"trace": 0.976, "density": 3.04, "ecdf": 0.161, "esf": 0.839}, {"trace": 1.034, "density": 4.427, "ecdf": 0.39, "esf": 0.61}, {"trace": 0.978, "density": 3.109, "ecdf": 0.168, "esf": 0.832}, {"trace": 0.928, "density": 1.511, "ecdf": 0.049, "esf": 0.951}, {"trace": 1.012, "density": 4.25, "ecdf": 0.294, "esf": 0.706}, {"trace": 0.992, "density": 3.672, "ecdf": 0.211, "esf": 0.789}, {"trace": 1.068, "density": 4.327, "ecdf": 0.547, "esf": 0.453}, {"trace": 1.12, "density": 3.406, "ecdf": 0.752, "esf": 0.248}, {"trace": 1.141, "density": 2.787, "ecdf": 0.815, "esf": 0.185}, {"trace": 0.968, "density": 2.75, "ecdf": 0.137, "esf": 0.863}, {"trace": 0.98, "density": 3.179, "ecdf": 0.172, "esf": 0.828}, {"trace": 1.121, "density": 3.394, "ecdf": 0.753, "esf": 0.247}, {"trace": 0.967, "density": 2.731, "ecdf": 0.135, "esf": 0.864}, {"trace": 1.154, "density": 2.435, "ecdf": 0.849, "esf": 0.151}, {"trace": 1.073, "density": 4.28, "ecdf": 0.563, "esf": 0.437}, {"trace": 1.059, "density": 4.403, "ecdf": 0.501, "esf": 0.499}, {"trace": 1.007, "density": 4.164, "ecdf": 0.275, "esf": 0.725}, {"trace": 1.156, "density": 2.391, "ecdf": 0.854, "esf": 0.146}, {"trace": 0.961, "density": 2.518, "ecdf": 0.115, "esf": 0.885}, {"trace": 0.995, "density": 3.77, "ecdf": 0.218, "esf": 0.782}, {"trace": 0.929, "density": 1.548, "ecdf": 0.051, "esf": 0.949}, {"trace": 0.935, "density": 1.742, "ecdf": 0.064, "esf": 0.936}, {"trace": 1.041, "density": 4.445, "ecdf": 0.422, "esf": 0.578}, {"trace": 0.962, "density": 2.569, "ecdf": 0.12, "esf": 0.88}, {"trace": 0.917, "density": 1.16, "ecdf": 0.036, "esf": 0.964}, {"trace": 1.166, "density": 2.085, "ecdf": 0.878, "esf": 0.122}, {"trace": 1.01, "density": 4.232, "ecdf": 0.288, "esf": 0.712}, {"trace": 1.051, "density": 4.439, "ecdf": 0.468, "esf": 0.532}, {"trace": 1.212, "density": 1.05, "ecdf": 0.947, "esf": 0.053}, {"trace": 1.108, "density": 3.711, "ecdf": 0.709, "esf": 0.291}, {"trace": 1.033, "density": 4.423, "ecdf": 0.386, "esf": 0.614}, {"trace": 0.862, "density": 0.266, "ecdf": 0.006, "esf": 0.994}, {"trace": 1.156, "density": 2.374, "ecdf": 0.856, "esf": 0.144}, {"trace": 1.106, "density": 3.763, "ecdf": 0.7, "esf": 0.3}, {"trace": 1.176, "density": 1.815, "ecdf": 0.896, "esf": 0.104}, {"trace": 1.099, "density": 3.9, "ecdf": 0.671, "esf": 0.329}, {"trace": 1.126, "density": 3.232, "ecdf": 0.772, "esf": 0.228}, {"trace": 1.021, "density": 4.357, "ecdf": 0.337, "esf": 0.663}, {"trace": 1.007, "density": 4.162, "ecdf": 0.274, "esf": 0.726}, {"trace": 1.021, "density": 4.356, "ecdf": 0.336, "esf": 0.664}, {"trace": 1.066, "density": 4.347, "ecdf": 0.537, "esf": 0.463}, {"trace": 1.137, "density": 2.913, "ecdf": 0.804, "esf": 0.196}, {"trace": 1.108, "density": 3.726, "ecdf": 0.705, "esf": 0.295}, {"trace": 0.961, "density": 2.53, "ecdf": 0.116, "esf": 0.884}, {"trace": 1.1, "density": 3.879, "ecdf": 0.675, "esf": 0.325}, {"trace": 1.005, "density": 4.11, "ecdf": 0.263, "esf": 0.737}, {"trace": 1.042, "density": 4.446, "ecdf": 0.428, "esf": 0.572}, {"trace": 1.032, "density": 4.418, "ecdf": 0.381, "esf": 0.619}, {"trace": 1.25, "density": 0.546, "ecdf": 0.974, "esf": 0.026}, {"trace": 0.877, "density": 0.408, "ecdf": 0.01, "esf": 0.99}, {"trace": 1.2, "density": 1.278, "ecdf": 0.932, "esf": 0.068}, {"trace": 0.98, "density": 3.181, "ecdf": 0.172, "esf": 0.828}, {"trace": 0.971, "density": 2.846, "ecdf": 0.144, "esf": 0.856}, {"trace": 1.13, "density": 3.122, "ecdf": 0.785, "esf": 0.215}, {"trace": 1.029, "density": 4.401, "ecdf": 0.367, "esf": 0.633}, {"trace": 1.138, "density": 2.87, "ecdf": 0.808, "esf": 0.192}, {"trace": 1.048, "density": 4.445, "ecdf": 0.454, "esf": 0.546}, {"trace": 1.129, "density": 3.137, "ecdf": 0.783, "esf": 0.217}, {"trace": 0.964, "density": 2.621, "ecdf": 0.125, "esf": 0.875}, {"trace": 1.051, "density": 4.438, "ecdf": 0.468, "esf": 0.532}, {"trace": 1.158, "density": 2.337, "ecdf": 0.86, "esf": 0.14}, {"trace": 1.127, "density": 3.214, "ecdf": 0.774, "esf": 0.226}, {"trace": 1.104, "density": 3.801, "ecdf": 0.694, "esf": 0.306}, {"trace": 1.11, "density": 3.677, "ecdf": 0.715, "esf": 0.285}, {"trace": 1.087, "density": 4.091, "ecdf": 0.625, "esf": 0.375}, {"trace": 1.003, "density": 4.072, "ecdf": 0.256, "esf": 0.744}, {"trace": 1.025, "density": 4.378, "ecdf": 0.35, "esf": 0.65}, {"trace": 1.025, "density": 4.379, "ecdf": 0.351, "esf": 0.649}, {"trace": 1.129, "density": 3.151, "ecdf": 0.782, "esf": 0.218}, {"trace": 1.132, "density": 3.067, "ecdf": 0.79, "esf": 0.21}, {"trace": 1.061, "density": 4.386, "ecdf": 0.513, "esf": 0.487}, {"trace": 1.098, "density": 3.909, "ecdf": 0.669, "esf": 0.331}, {"trace": 1.002, "density": 4.033, "ecdf": 0.251, "esf": 0.749}, {"trace": 1.081, "density": 4.175, "ecdf": 0.601, "esf": 0.399}, {"trace": 0.925, "density": 1.427, "ecdf": 0.046, "esf": 0.954}, {"trace": 1.064, "density": 4.368, "ecdf": 0.525, "esf": 0.475}, {"trace": 1.06, "density": 4.399, "ecdf": 0.505, "esf": 0.495}, {"trace": 1.066, "density": 4.352, "ecdf": 0.535, "esf": 0.465}, {"trace": 0.989, "density": 3.539, "ecdf": 0.199, "esf": 0.801}, {"trace": 1.163, "density": 2.175, "ecdf": 0.872, "esf": 0.128}, {"trace": 0.969, "density": 2.793, "ecdf": 0.14, "esf": 0.86}, {"trace": 1.172, "density": 1.903, "ecdf": 0.891, "esf": 0.109}, {"trace": 0.944, "density": 1.992, "ecdf": 0.079, "esf": 0.921}, {"trace": 1.022, "density": 4.363, "ecdf": 0.341, "esf": 0.659}, {"trace": 1.17, "density": 1.977, "ecdf": 0.885, "esf": 0.115}, {"trace": 1.072, "density": 4.286, "ecdf": 0.56, "esf": 0.44}, {"trace": 1.004, "density": 4.081, "ecdf": 0.258, "esf": 0.742}, {"trace": 1.149, "density": 2.569, "ecdf": 0.837, "esf": 0.163}, {"trace": 0.928, "density": 1.512, "ecdf": 0.049, "esf": 0.951}, {"trace": 1.101, "density": 3.867, "ecdf": 0.678, "esf": 0.322}, {"trace": 1.039, "density": 4.441, "ecdf": 0.416, "esf": 0.584}, {"trace": 1.047, "density": 4.446, "ecdf": 0.45, "esf": 0.55}, {"trace": 1.007, "density": 4.167, "ecdf": 0.275, "esf": 0.725}, {"trace": 1.03, "density": 4.408, "ecdf": 0.372, "esf": 0.628}, {"trace": 1.019, "density": 4.338, "ecdf": 0.326, "esf": 0.674}, {"trace": 0.978, "density": 3.085, "ecdf": 0.166, "esf": 0.834}, {"trace": 0.997, "density": 3.855, "ecdf": 0.229, "esf": 0.77}, {"trace": 1.008, "density": 4.193, "ecdf": 0.28, "esf": 0.72}, {"trace": 1.083, "density": 4.148, "ecdf": 0.61, "esf": 0.39}, {"trace": 1.103, "density": 3.829, "ecdf": 0.688, "esf": 0.312}, {"trace": 0.925, "density": 1.421, "ecdf": 0.045, "esf": 0.955}, {"trace": 0.865, "density": 0.29, "ecdf": 0.006, "esf": 0.994}, {"trace": 0.913, "density": 1.015, "ecdf": 0.032, "esf": 0.968}, {"trace": 0.926, "density": 1.445, "ecdf": 0.046, "esf": 0.954}, {"trace": 1.023, "density": 4.369, "ecdf": 0.344, "esf": 0.656}, {"trace": 0.934, "density": 1.708, "ecdf": 0.061, "esf": 0.939}, {"trace": 0.982, "density": 3.265, "ecdf": 0.178, "esf": 0.822}, {"trace": 0.889, "density": 0.541, "ecdf": 0.016, "esf": 0.984}, {"trace": 1.148, "density": 2.609, "ecdf": 0.834, "esf": 0.166}, {"trace": 0.93, "density": 1.566, "ecdf": 0.052, "esf": 0.948}, {"trace": 0.946, "density": 2.062, "ecdf": 0.083, "esf": 0.917}, {"trace": 1.126, "density": 3.222, "ecdf": 0.773, "esf": 0.227}, {"trace": 1.217, "density": 0.953, "ecdf": 0.952, "esf": 0.048}, {"trace": 0.966, "density": 2.677, "ecdf": 0.13, "esf": 0.87}, {"trace": 1.168, "density": 2.034, "ecdf": 0.881, "esf": 0.119}, {"trace": 1.079, "density": 4.201, "ecdf": 0.593, "esf": 0.407}, {"trace": 0.95, "density": 2.19, "ecdf": 0.091, "esf": 0.909}, {"trace": 0.989, "density": 3.546, "ecdf": 0.2, "esf": 0.8}, {"trace": 0.968, "density": 2.765, "ecdf": 0.137, "esf": 0.863}, {"trace": 0.957, "density": 2.392, "ecdf": 0.106, "esf": 0.894}, {"trace": 1.051, "density": 4.439, "ecdf": 0.467, "esf": 0.533}, {"trace": 1.244, "density": 0.597, "ecdf": 0.971, "esf": 0.029}, {"trace": 1.247, "density": 0.573, "ecdf": 0.973, "esf": 0.027}, {"trace": 0.931, "density": 1.603, "ecdf": 0.054, "esf": 0.946}, {"trace": 0.932, "density": 1.631, "ecdf": 0.056, "esf": 0.944}, {"trace": 0.999, "density": 3.947, "ecdf": 0.241, "esf": 0.759}, {"trace": 1.184, "density": 1.598, "ecdf": 0.911, "esf": 0.089}, {"trace": 1.258, "density": 0.48, "ecdf": 0.977, "esf": 0.023}, {"trace": 1.064, "density": 4.366, "ecdf": 0.527, "esf": 0.473}, {"trace": 1.116, "density": 3.513, "ecdf": 0.737, "esf": 0.263}, {"trace": 1.068, "density": 4.328, "ecdf": 0.546, "esf": 0.454}, {"trace": 1.124, "density": 3.294, "ecdf": 0.765, "esf": 0.235}, {"trace": 1.06, "density": 4.396, "ecdf": 0.507, "esf": 0.493}, {"trace": 1.066, "density": 4.347, "ecdf": 0.538, "esf": 0.462}, {"trace": 1.246, "density": 0.58, "ecdf": 0.972, "esf": 0.028}, {"trace": 1.047, "density": 4.446, "ecdf": 0.45, "esf": 0.55}, {"trace": 1.103, "density": 3.823, "ecdf": 0.689, "esf": 0.311}, {"trace": 1.052, "density": 4.433, "ecdf": 0.476, "esf": 0.524}, {"trace": 1.019, "density": 4.341, "ecdf": 0.327, "esf": 0.673}, {"trace": 1.102, "density": 3.834, "ecdf": 0.687, "esf": 0.313}, {"trace": 1.133, "density": 3.041, "ecdf": 0.792, "esf": 0.208}, {"trace": 0.932, "density": 1.655, "ecdf": 0.058, "esf": 0.942}, {"trace": 1.126, "density": 3.231, "ecdf": 0.772, "esf": 0.228}, {"trace": 1.0, "density": 3.972, "ecdf": 0.243, "esf": 0.757}, {"trace": 1.0, "density": 3.974, "ecdf": 0.244, "esf": 0.756}, {"trace": 1.081, "density": 4.176, "ecdf": 0.6, "esf": 0.4}, {"trace": 1.053, "density": 4.43, "ecdf": 0.478, "esf": 0.522}, {"trace": 1.041, "density": 4.446, "ecdf": 0.425, "esf": 0.575}, {"trace": 0.994, "density": 3.757, "ecdf": 0.217, "esf": 0.783}, {"trace": 0.993, "density": 3.697, "ecdf": 0.213, "esf": 0.787}, {"trace": 1.115, "density": 3.548, "ecdf": 0.733, "esf": 0.267}, {"trace": 0.998, "density": 3.902, "ecdf": 0.235, "esf": 0.765}, {"trace": 1.209, "density": 1.122, "ecdf": 0.943, "esf": 0.057}, {"trace": 1.062, "density": 4.381, "ecdf": 0.517, "esf": 0.483}, {"trace": 1.067, "density": 4.336, "ecdf": 0.542, "esf": 0.458}, {"trace": 1.013, "density": 4.267, "ecdf": 0.298, "esf": 0.702}, {"trace": 1.052, "density": 4.434, "ecdf": 0.475, "esf": 0.525}, {"trace": 1.02, "density": 4.342, "ecdf": 0.328, "esf": 0.672}, {"trace": 0.983, "density": 3.302, "ecdf": 0.18, "esf": 0.82}, {"trace": 1.007, "density": 4.159, "ecdf": 0.273, "esf": 0.727}, {"trace": 1.07, "density": 4.312, "ecdf": 0.551, "esf": 0.449}, {"trace": 1.096, "density": 3.947, "ecdf": 0.661, "esf": 0.339}, {"trace": 0.933, "density": 1.672, "ecdf": 0.059, "esf": 0.941}, {"trace": 1.13, "density": 3.105, "ecdf": 0.786, "esf": 0.214}, {"trace": 1.065, "density": 4.361, "ecdf": 0.53, "esf": 0.47}, {"trace": 1.171, "density": 1.946, "ecdf": 0.888, "esf": 0.112}, {"trace": 1.152, "density": 2.502, "ecdf": 0.843, "esf": 0.157}, {"trace": 1.304, "density": 0.188, "ecdf": 0.992, "esf": 0.008}, {"trace": 1.055, "density": 4.424, "ecdf": 0.483, "esf": 0.517}, {"trace": 1.063, "density": 4.371, "ecdf": 0.523, "esf": 0.477}, {"trace": 1.034, "density": 4.426, "ecdf": 0.389, "esf": 0.611}, {"trace": 1.099, "density": 3.894, "ecdf": 0.672, "esf": 0.328}, {"trace": 1.095, "density": 3.973, "ecdf": 0.653, "esf": 0.347}, {"trace": 0.953, "density": 2.27, "ecdf": 0.097, "esf": 0.903}, {"trace": 0.976, "density": 3.04, "ecdf": 0.161, "esf": 0.838}, {"trace": 1.139, "density": 2.847, "ecdf": 0.811, "esf": 0.189}, {"trace": 0.964, "density": 2.616, "ecdf": 0.125, "esf": 0.875}, {"trace": 0.985, "density": 3.376, "ecdf": 0.187, "esf": 0.813}, {"trace": 0.949, "density": 2.146, "ecdf": 0.088, "esf": 0.912}, {"trace": 1.039, "density": 4.441, "ecdf": 0.415, "esf": 0.585}, {"trace": 1.098, "density": 3.91, "ecdf": 0.669, "esf": 0.331}, {"trace": 1.05, "density": 4.44, "ecdf": 0.465, "esf": 0.535}, {"trace": 1.007, "density": 4.17, "ecdf": 0.276, "esf": 0.724}, {"trace": 1.063, "density": 4.378, "ecdf": 0.52, "esf": 0.48}, {"trace": 1.099, "density": 3.895, "ecdf": 0.672, "esf": 0.328}, {"trace": 1.066, "density": 4.352, "ecdf": 0.535, "esf": 0.465}, {"trace": 0.968, "density": 2.741, "ecdf": 0.136, "esf": 0.864}, {"trace": 1.078, "density": 4.221, "ecdf": 0.584, "esf": 0.416}, {"trace": 1.023, "density": 4.365, "ecdf": 0.343, "esf": 0.657}, {"trace": 1.136, "density": 2.927, "ecdf": 0.803, "esf": 0.197}, {"trace": 1.057, "density": 4.415, "ecdf": 0.492, "esf": 0.508}, {"trace": 0.977, "density": 3.073, "ecdf": 0.164, "esf": 0.836}, {"trace": 0.963, "density": 2.6, "ecdf": 0.123, "esf": 0.877}, {"trace": 0.988, "density": 3.505, "ecdf": 0.196, "esf": 0.804}, {"trace": 1.06, "density": 4.398, "ecdf": 0.505, "esf": 0.495}, {"trace": 1.168, "density": 2.019, "ecdf": 0.882, "esf": 0.118}, {"trace": 0.961, "density": 2.534, "ecdf": 0.116, "esf": 0.884}, {"trace": 1.025, "density": 4.382, "ecdf": 0.353, "esf": 0.647}, {"trace": 1.052, "density": 4.434, "ecdf": 0.475, "esf": 0.525}, {"trace": 1.122, "density": 3.357, "ecdf": 0.758, "esf": 0.242}, {"trace": 0.988, "density": 3.481, "ecdf": 0.195, "esf": 0.805}, {"trace": 1.094, "density": 3.987, "ecdf": 0.65, "esf": 0.35}, {"trace": 1.065, "density": 4.354, "ecdf": 0.534, "esf": 0.466}, {"trace": 1.157, "density": 2.364, "ecdf": 0.857, "esf": 0.143}, {"trace": 1.101, "density": 3.859, "ecdf": 0.68, "esf": 0.32}, {"trace": 1.063, "density": 4.376, "ecdf": 0.52, "esf": 0.48}, {"trace": 1.117, "density": 3.488, "ecdf": 0.74, "esf": 0.26}, {"trace": 1.007, "density": 4.159, "ecdf": 0.273, "esf": 0.727}, {"trace": 1.032, "density": 4.416, "ecdf": 0.38, "esf": 0.62}, {"trace": 0.901, "density": 0.738, "ecdf": 0.023, "esf": 0.977}, {"trace": 1.113, "density": 3.604, "ecdf": 0.726, "esf": 0.274}, {"trace": 1.016, "density": 4.308, "ecdf": 0.313, "esf": 0.687}, {"trace": 1.119, "density": 3.448, "ecdf": 0.746, "esf": 0.254}, {"trace": 0.978, "density": 3.095, "ecdf": 0.167, "esf": 0.833}, {"trace": 0.986, "density": 3.408, "ecdf": 0.19, "esf": 0.81}, {"trace": 1.27, "density": 0.383, "ecdf": 0.983, "esf": 0.017}, {"trace": 1.171, "density": 1.957, "ecdf": 0.887, "esf": 0.113}, {"trace": 1.073, "density": 4.278, "ecdf": 0.564, "esf": 0.436}, {"trace": 1.041, "density": 4.445, "ecdf": 0.424, "esf": 0.576}, {"trace": 1.031, "density": 4.412, "ecdf": 0.376, "esf": 0.624}, {"trace": 0.954, "density": 2.325, "ecdf": 0.101, "esf": 0.899}, {"trace": 1.077, "density": 4.224, "ecdf": 0.583, "esf": 0.417}, {"trace": 1.038, "density": 4.439, "ecdf": 0.411, "esf": 0.589}, {"trace": 1.082, "density": 4.16, "ecdf": 0.605, "esf": 0.395}, {"trace": 0.958, "density": 2.422, "ecdf": 0.108, "esf": 0.892}, {"trace": 0.981, "density": 3.221, "ecdf": 0.175, "esf": 0.825}, {"trace": 1.134, "density": 2.993, "ecdf": 0.795, "esf": 0.205}, {"trace": 1.029, "density": 4.403, "ecdf": 0.368, "esf": 0.632}, {"trace": 1.08, "density": 4.186, "ecdf": 0.597, "esf": 0.403}, {"trace": 0.979, "density": 3.129, "ecdf": 0.169, "esf": 0.831}, {"trace": 1.161, "density": 2.248, "ecdf": 0.866, "esf": 0.134}, {"trace": 1.066, "density": 4.35, "ecdf": 0.536, "esf": 0.464}, {"trace": 1.069, "density": 4.325, "ecdf": 0.547, "esf": 0.453}, {"trace": 1.108, "density": 3.725, "ecdf": 0.706, "esf": 0.294}, {"trace": 1.086, "density": 4.1, "ecdf": 0.622, "esf": 0.378}, {"trace": 0.989, "density": 3.522, "ecdf": 0.198, "esf": 0.802}, {"trace": 1.154, "density": 2.446, "ecdf": 0.848, "esf": 0.152}, {"trace": 1.035, "density": 4.431, "ecdf": 0.398, "esf": 0.602}, {"trace": 1.016, "density": 4.311, "ecdf": 0.315, "esf": 0.685}, {"trace": 1.048, "density": 4.444, "ecdf": 0.456, "esf": 0.544}, {"trace": 1.122, "density": 3.366, "ecdf": 0.757, "esf": 0.243}, {"trace": 1.04, "density": 4.443, "ecdf": 0.419, "esf": 0.581}, {"trace": 1.083, "density": 4.153, "ecdf": 0.609, "esf": 0.391}, {"trace": 1.048, "density": 4.444, "ecdf": 0.456, "esf": 0.544}, {"trace": 0.936, "density": 1.755, "ecdf": 0.064, "esf": 0.936}, {"trace": 1.134, "density": 3.0, "ecdf": 0.795, "esf": 0.205}, {"trace": 1.299, "density": 0.207, "ecdf": 0.991, "esf": 0.009}, {"trace": 1.331, "density": 0.103, "ecdf": 0.995, "esf": 0.005}, {"trace": 0.913, "density": 1.038, "ecdf": 0.032, "esf": 0.968}, {"trace": 0.928, "density": 1.504, "ecdf": 0.049, "esf": 0.951}, {"trace": 1.086, "density": 4.111, "ecdf": 0.619, "esf": 0.381}, {"trace": 1.008, "density": 4.189, "ecdf": 0.279, "esf": 0.72}, {"trace": 1.14, "density": 2.826, "ecdf": 0.812, "esf": 0.188}, {"trace": 1.124, "density": 3.297, "ecdf": 0.765, "esf": 0.235}, {"trace": 1.12, "density": 3.404, "ecdf": 0.752, "esf": 0.248}, {"trace": 1.068, "density": 4.327, "ecdf": 0.547, "esf": 0.453}, {"trace": 1.159, "density": 2.305, "ecdf": 0.862, "esf": 0.138}, {"trace": 1.01, "density": 4.221, "ecdf": 0.286, "esf": 0.714}, {"trace": 1.018, "density": 4.331, "ecdf": 0.323, "esf": 0.677}, {"trace": 1.052, "density": 4.433, "ecdf": 0.476, "esf": 0.524}, {"trace": 1.094, "density": 3.974, "ecdf": 0.653, "esf": 0.347}, {"trace": 1.204, "density": 1.215, "ecdf": 0.938, "esf": 0.062}, {"trace": 0.958, "density": 2.422, "ecdf": 0.108, "esf": 0.892}, {"trace": 0.985, "density": 3.39, "ecdf": 0.188, "esf": 0.812}, {"trace": 1.004, "density": 4.079, "ecdf": 0.258, "esf": 0.742}, {"trace": 1.115, "density": 3.539, "ecdf": 0.734, "esf": 0.266}, {"trace": 0.992, "density": 3.651, "ecdf": 0.209, "esf": 0.791}, {"trace": 1.184, "density": 1.603, "ecdf": 0.91, "esf": 0.09}, {"trace": 1.135, "density": 2.966, "ecdf": 0.799, "esf": 0.201}, {"trace": 0.969, "density": 2.774, "ecdf": 0.138, "esf": 0.862}, {"trace": 0.96, "density": 2.49, "ecdf": 0.113, "esf": 0.887}, {"trace": 1.337, "density": 0.092, "ecdf": 0.996, "esf": 0.004}, {"trace": 1.138, "density": 2.869, "ecdf": 0.808, "esf": 0.192}, {"trace": 1.05, "density": 4.441, "ecdf": 0.462, "esf": 0.538}, {"trace": 1.086, "density": 4.111, "ecdf": 0.618, "esf": 0.381}, {"trace": 1.087, "density": 4.092, "ecdf": 0.624, "esf": 0.376}, {"trace": 1.026, "density": 4.388, "ecdf": 0.358, "esf": 0.642}, {"trace": 1.171, "density": 1.936, "ecdf": 0.888, "esf": 0.112}, {"trace": 1.045, "density": 4.448, "ecdf": 0.44, "esf": 0.56}, {"trace": 1.036, "density": 4.432, "ecdf": 0.398, "esf": 0.602}, {"trace": 1.009, "density": 4.214, "ecdf": 0.284, "esf": 0.716}, {"trace": 1.022, "density": 4.364, "ecdf": 0.341, "esf": 0.659}, {"trace": 0.903, "density": 0.777, "ecdf": 0.024, "esf": 0.976}, {"trace": 1.135, "density": 2.969, "ecdf": 0.799, "esf": 0.201}, {"trace": 0.97, "density": 2.814, "ecdf": 0.142, "esf": 0.858}, {"trace": 1.108, "density": 3.711, "ecdf": 0.708, "esf": 0.292}, {"trace": 1.077, "density": 4.222, "ecdf": 0.583, "esf": 0.417}, {"trace": 0.984, "density": 3.348, "ecdf": 0.184, "esf": 0.816}, {"trace": 1.073, "density": 4.273, "ecdf": 0.566, "esf": 0.434}, {"trace": 1.043, "density": 4.447, "ecdf": 0.433, "esf": 0.567}, {"trace": 1.147, "density": 2.623, "ecdf": 0.832, "esf": 0.168}, {"trace": 1.043, "density": 4.447, "ecdf": 0.43, "esf": 0.57}, {"trace": 0.975, "density": 2.998, "ecdf": 0.158, "esf": 0.842}, {"trace": 1.004, "density": 4.094, "ecdf": 0.26, "esf": 0.74}, {"trace": 0.956, "density": 2.371, "ecdf": 0.104, "esf": 0.896}, {"trace": 1.056, "density": 4.418, "ecdf": 0.489, "esf": 0.511}, {"trace": 1.021, "density": 4.356, "ecdf": 0.336, "esf": 0.664}, {"trace": 1.142, "density": 2.755, "ecdf": 0.818, "esf": 0.182}, {"trace": 0.963, "density": 2.607, "ecdf": 0.123, "esf": 0.877}, {"trace": 1.045, "density": 4.448, "ecdf": 0.441, "esf": 0.559}, {"trace": 1.049, "density": 4.442, "ecdf": 0.46, "esf": 0.54}, {"trace": 1.028, "density": 4.4, "ecdf": 0.366, "esf": 0.634}, {"trace": 1.165, "density": 2.12, "ecdf": 0.876, "esf": 0.124}, {"trace": 0.971, "density": 2.863, "ecdf": 0.146, "esf": 0.854}, {"trace": 1.141, "density": 2.808, "ecdf": 0.814, "esf": 0.186}, {"trace": 0.973, "density": 2.914, "ecdf": 0.15, "esf": 0.85}, {"trace": 1.079, "density": 4.197, "ecdf": 0.595, "esf": 0.405}, {"trace": 1.035, "density": 4.428, "ecdf": 0.392, "esf": 0.608}, {"trace": 1.122, "density": 3.364, "ecdf": 0.757, "esf": 0.243}, {"trace": 1.039, "density": 4.441, "ecdf": 0.416, "esf": 0.584}, {"trace": 1.108, "density": 3.727, "ecdf": 0.705, "esf": 0.295}, {"trace": 1.104, "density": 3.8, "ecdf": 0.694, "esf": 0.306}, {"trace": 1.073, "density": 4.274, "ecdf": 0.565, "esf": 0.435}, {"trace": 0.964, "density": 2.626, "ecdf": 0.125, "esf": 0.875}, {"trace": 0.999, "density": 3.935, "ecdf": 0.239, "esf": 0.761}, {"trace": 1.043, "density": 4.447, "ecdf": 0.431, "esf": 0.569}, {"trace": 0.962, "density": 2.553, "ecdf": 0.119, "esf": 0.882}, {"trace": 1.057, "density": 4.413, "ecdf": 0.494, "esf": 0.506}, {"trace": 1.037, "density": 4.437, "ecdf": 0.406, "esf": 0.594}, {"trace": 1.163, "density": 2.181, "ecdf": 0.871, "esf": 0.129}, {"trace": 1.017, "density": 4.322, "ecdf": 0.32, "esf": 0.68}, {"trace": 1.027, "density": 4.395, "ecdf": 0.362, "esf": 0.638}, {"trace": 1.038, "density": 4.438, "ecdf": 0.409, "esf": 0.591}, {"trace": 1.127, "density": 3.197, "ecdf": 0.776, "esf": 0.224}, {"trace": 0.988, "density": 3.489, "ecdf": 0.195, "esf": 0.805}, {"trace": 1.158, "density": 2.317, "ecdf": 0.861, "esf": 0.139}, {"trace": 1.108, "density": 3.723, "ecdf": 0.706, "esf": 0.294}, {"trace": 1.039, "density": 4.441, "ecdf": 0.415, "esf": 0.585}, {"trace": 1.061, "density": 4.389, "ecdf": 0.512, "esf": 0.488}, {"trace": 1.115, "density": 3.541, "ecdf": 0.734, "esf": 0.266}, {"trace": 1.169, "density": 2.002, "ecdf": 0.883, "esf": 0.117}, {"trace": 1.079, "density": 4.205, "ecdf": 0.59, "esf": 0.41}, {"trace": 0.985, "density": 3.366, "ecdf": 0.186, "esf": 0.814}, {"trace": 1.208, "density": 1.128, "ecdf": 0.943, "esf": 0.057}, {"trace": 0.969, "density": 2.794, "ecdf": 0.14, "esf": 0.86}, {"trace": 0.983, "density": 3.286, "ecdf": 0.18, "esf": 0.82}, {"trace": 0.937, "density": 1.799, "ecdf": 0.068, "esf": 0.932}, {"trace": 1.093, "density": 3.998, "ecdf": 0.647, "esf": 0.353}, {"trace": 1.061, "density": 4.389, "ecdf": 0.512, "esf": 0.488}, {"trace": 1.307, "density": 0.177, "ecdf": 0.992, "esf": 0.007}, {"trace": 1.16, "density": 2.283, "ecdf": 0.863, "esf": 0.137}, {"trace": 0.97, "density": 2.829, "ecdf": 0.143, "esf": 0.857}, {"trace": 1.204, "density": 1.211, "ecdf": 0.938, "esf": 0.062}, {"trace": 0.918, "density": 1.164, "ecdf": 0.036, "esf": 0.964}, {"trace": 0.95, "density": 2.195, "ecdf": 0.092, "esf": 0.908}, {"trace": 1.07, "density": 4.315, "ecdf": 0.551, "esf": 0.449}, {"trace": 1.114, "density": 3.576, "ecdf": 0.729, "esf": 0.271}, {"trace": 1.051, "density": 4.439, "ecdf": 0.466, "esf": 0.534}, {"trace": 1.114, "density": 3.588, "ecdf": 0.727, "esf": 0.273}, {"trace": 1.152, "density": 2.481, "ecdf": 0.845, "esf": 0.155}, {"trace": 0.865, "density": 0.285, "ecdf": 0.006, "esf": 0.994}, {"trace": 0.99, "density": 3.592, "ecdf": 0.203, "esf": 0.797}, {"trace": 1.02, "density": 4.349, "ecdf": 0.332, "esf": 0.668}, {"trace": 1.073, "density": 4.277, "ecdf": 0.564, "esf": 0.436}, {"trace": 1.03, "density": 4.407, "ecdf": 0.371, "esf": 0.629}, {"trace": 1.11, "density": 3.673, "ecdf": 0.715, "esf": 0.285}, {"trace": 1.057, "density": 4.412, "ecdf": 0.495, "esf": 0.505}, {"trace": 0.945, "density": 2.028, "ecdf": 0.082, "esf": 0.918}, {"trace": 1.183, "density": 1.616, "ecdf": 0.909, "esf": 0.091}, {"trace": 0.883, "density": 0.478, "ecdf": 0.014, "esf": 0.986}, {"trace": 1.051, "density": 4.438, "ecdf": 0.468, "esf": 0.532}, {"trace": 1.141, "density": 2.808, "ecdf": 0.814, "esf": 0.186}, {"trace": 1.038, "density": 4.439, "ecdf": 0.411, "esf": 0.589}, {"trace": 1.112, "density": 3.631, "ecdf": 0.722, "esf": 0.278}, {"trace": 1.008, "density": 4.186, "ecdf": 0.279, "esf": 0.721}, {"trace": 1.115, "density": 3.553, "ecdf": 0.732, "esf": 0.268}, {"trace": 1.014, "density": 4.291, "ecdf": 0.307, "esf": 0.693}, {"trace": 0.929, "density": 1.553, "ecdf": 0.051, "esf": 0.949}, {"trace": 1.036, "density": 4.433, "ecdf": 0.4, "esf": 0.6}, {"trace": 1.017, "density": 4.319, "ecdf": 0.319, "esf": 0.681}, {"trace": 1.056, "density": 4.416, "ecdf": 0.491, "esf": 0.509}, {"trace": 1.086, "density": 4.099, "ecdf": 0.622, "esf": 0.377}, {"trace": 1.036, "density": 4.434, "ecdf": 0.401, "esf": 0.598}, {"trace": 1.0, "density": 3.966, "ecdf": 0.243, "esf": 0.757}, {"trace": 1.013, "density": 4.273, "ecdf": 0.3, "esf": 0.7}, {"trace": 1.053, "density": 4.431, "ecdf": 0.478, "esf": 0.522}, {"trace": 1.153, "density": 2.472, "ecdf": 0.845, "esf": 0.155}, {"trace": 1.04, "density": 4.443, "ecdf": 0.419, "esf": 0.581}, {"trace": 1.103, "density": 3.821, "ecdf": 0.69, "esf": 0.31}, {"trace": 1.045, "density": 4.448, "ecdf": 0.44, "esf": 0.56}, {"trace": 1.078, "density": 4.213, "ecdf": 0.587, "esf": 0.413}, {"trace": 1.079, "density": 4.203, "ecdf": 0.592, "esf": 0.408}, {"trace": 1.079, "density": 4.202, "ecdf": 0.592, "esf": 0.408}, {"trace": 0.995, "density": 3.767, "ecdf": 0.218, "esf": 0.782}, {"trace": 0.923, "density": 1.339, "ecdf": 0.042, "esf": 0.958}, {"trace": 0.951, "density": 2.211, "ecdf": 0.093, "esf": 0.907}, {"trace": 1.136, "density": 2.928, "ecdf": 0.803, "esf": 0.197}, {"trace": 0.804, "density": 0.028, "ecdf": 0.0, "esf": 1.0}, {"trace": 1.219, "density": 0.919, "ecdf": 0.953, "esf": 0.047}, {"trace": 0.931, "density": 1.604, "ecdf": 0.054, "esf": 0.946}, {"trace": 0.959, "density": 2.454, "ecdf": 0.11, "esf": 0.89}, {"trace": 0.995, "density": 3.798, "ecdf": 0.221, "esf": 0.779}, {"trace": 1.096, "density": 3.955, "ecdf": 0.658, "esf": 0.342}, {"trace": 1.065, "density": 4.361, "ecdf": 0.53, "esf": 0.47}, {"trace": 0.977, "density": 3.05, "ecdf": 0.163, "esf": 0.837}, {"trace": 1.108, "density": 3.712, "ecdf": 0.708, "esf": 0.292}, {"trace": 1.055, "density": 4.425, "ecdf": 0.482, "esf": 0.518}, {"trace": 1.079, "density": 4.203, "ecdf": 0.592, "esf": 0.408}, {"trace": 1.032, "density": 4.416, "ecdf": 0.38, "esf": 0.62}, {"trace": 1.233, "density": 0.711, "ecdf": 0.963, "esf": 0.037}, {"trace": 1.004, "density": 4.075, "ecdf": 0.257, "esf": 0.743}, {"trace": 1.013, "density": 4.267, "ecdf": 0.298, "esf": 0.702}, {"trace": 1.095, "density": 3.965, "ecdf": 0.656, "esf": 0.344}, {"trace": 1.138, "density": 2.874, "ecdf": 0.808, "esf": 0.192}, {"trace": 1.037, "density": 4.436, "ecdf": 0.405, "esf": 0.595}, {"trace": 1.13, "density": 3.111, "ecdf": 0.786, "esf": 0.214}, {"trace": 1.023, "density": 4.365, "ecdf": 0.343, "esf": 0.657}, {"trace": 1.201, "density": 1.259, "ecdf": 0.934, "esf": 0.066}, {"trace": 0.987, "density": 3.463, "ecdf": 0.194, "esf": 0.806}, {"trace": 1.129, "density": 3.157, "ecdf": 0.781, "esf": 0.219}, {"trace": 1.11, "density": 3.68, "ecdf": 0.714, "esf": 0.286}, {"trace": 1.001, "density": 3.996, "ecdf": 0.247, "esf": 0.753}, {"trace": 1.189, "density": 1.49, "ecdf": 0.916, "esf": 0.084}, {"trace": 0.983, "density": 3.298, "ecdf": 0.18, "esf": 0.82}, {"trace": 1.235, "density": 0.689, "ecdf": 0.965, "esf": 0.035}, {"trace": 0.937, "density": 1.802, "ecdf": 0.069, "esf": 0.931}, {"trace": 0.943, "density": 1.979, "ecdf": 0.078, "esf": 0.922}, {"trace": 1.014, "density": 4.284, "ecdf": 0.305, "esf": 0.695}, {"trace": 1.003, "density": 4.062, "ecdf": 0.255, "esf": 0.745}, {"trace": 1.031, "density": 4.412, "ecdf": 0.375, "esf": 0.625}, {"trace": 1.026, "density": 4.387, "ecdf": 0.357, "esf": 0.643}, {"trace": 1.045, "density": 4.448, "ecdf": 0.439, "esf": 0.561}, {"trace": 1.026, "density": 4.386, "ecdf": 0.356, "esf": 0.644}, {"trace": 1.007, "density": 4.166, "ecdf": 0.275, "esf": 0.725}, {"trace": 1.072, "density": 4.286, "ecdf": 0.56, "esf": 0.44}, {"trace": 0.985, "density": 3.381, "ecdf": 0.187, "esf": 0.813}, {"trace": 1.071, "density": 4.304, "ecdf": 0.554, "esf": 0.446}, {"trace": 1.052, "density": 4.434, "ecdf": 0.476, "esf": 0.524}, {"trace": 1.011, "density": 4.233, "ecdf": 0.289, "esf": 0.711}, {"trace": 1.027, "density": 4.395, "ecdf": 0.363, "esf": 0.637}, {"trace": 1.188, "density": 1.513, "ecdf": 0.915, "esf": 0.085}, {"trace": 0.986, "density": 3.401, "ecdf": 0.189, "esf": 0.811}, {"trace": 1.181, "density": 1.664, "ecdf": 0.906, "esf": 0.094}, {"trace": 0.958, "density": 2.446, "ecdf": 0.11, "esf": 0.89}, {"trace": 0.958, "density": 2.446, "ecdf": 0.11, "esf": 0.89}, {"trace": 1.065, "density": 4.357, "ecdf": 0.533, "esf": 0.467}, {"trace": 1.039, "density": 4.441, "ecdf": 0.416, "esf": 0.584}, {"trace": 0.989, "density": 3.523, "ecdf": 0.198, "esf": 0.802}, {"trace": 1.073, "density": 4.279, "ecdf": 0.563, "esf": 0.437}, {"trace": 1.005, "density": 4.125, "ecdf": 0.266, "esf": 0.734}, {"trace": 1.168, "density": 2.029, "ecdf": 0.881, "esf": 0.119}, {"trace": 0.987, "density": 3.454, "ecdf": 0.193, "esf": 0.807}, {"trace": 1.129, "density": 3.144, "ecdf": 0.783, "esf": 0.217}, {"trace": 1.167, "density": 2.074, "ecdf": 0.878, "esf": 0.122}, {"trace": 1.099, "density": 3.891, "ecdf": 0.673, "esf": 0.327}, {"trace": 0.931, "density": 1.617, "ecdf": 0.055, "esf": 0.945}, {"trace": 1.09, "density": 4.039, "ecdf": 0.636, "esf": 0.364}, {"trace": 0.863, "density": 0.274, "ecdf": 0.006, "esf": 0.994}, {"trace": 1.092, "density": 4.021, "ecdf": 0.641, "esf": 0.359}, {"trace": 0.991, "density": 3.623, "ecdf": 0.206, "esf": 0.794}, {"trace": 1.1, "density": 3.888, "ecdf": 0.673, "esf": 0.327}, {"trace": 1.038, "density": 4.439, "ecdf": 0.41, "esf": 0.59}, {"trace": 1.079, "density": 4.209, "ecdf": 0.588, "esf": 0.412}, {"trace": 1.123, "density": 3.326, "ecdf": 0.761, "esf": 0.239}, {"trace": 0.942, "density": 1.942, "ecdf": 0.077, "esf": 0.923}, {"trace": 1.004, "density": 4.09, "ecdf": 0.26, "esf": 0.74}, {"trace": 1.055, "density": 4.423, "ecdf": 0.485, "esf": 0.515}, {"trace": 1.071, "density": 4.304, "ecdf": 0.554, "esf": 0.446}, {"trace": 1.208, "density": 1.134, "ecdf": 0.942, "esf": 0.058}, {"trace": 0.938, "density": 1.827, "ecdf": 0.07, "esf": 0.93}, {"trace": 1.167, "density": 2.058, "ecdf": 0.879, "esf": 0.121}, {"trace": 1.098, "density": 3.92, "ecdf": 0.667, "esf": 0.333}, {"trace": 1.025, "density": 4.382, "ecdf": 0.352, "esf": 0.648}, {"trace": 1.08, "density": 4.188, "ecdf": 0.597, "esf": 0.403}, {"trace": 1.064, "density": 4.365, "ecdf": 0.527, "esf": 0.473}, {"trace": 1.038, "density": 4.439, "ecdf": 0.411, "esf": 0.589}, {"trace": 1.143, "density": 2.74, "ecdf": 0.82, "esf": 0.18}, {"trace": 1.018, "density": 4.326, "ecdf": 0.321, "esf": 0.679}, {"trace": 0.944, "density": 1.999, "ecdf": 0.08, "esf": 0.92}, {"trace": 0.957, "density": 2.409, "ecdf": 0.107, "esf": 0.893}, {"trace": 1.221, "density": 0.887, "ecdf": 0.954, "esf": 0.045}, {"trace": 1.168, "density": 2.021, "ecdf": 0.882, "esf": 0.118}, {"trace": 1.024, "density": 4.376, "ecdf": 0.349, "esf": 0.651}, {"trace": 1.121, "density": 3.373, "ecdf": 0.756, "esf": 0.244}, {"trace": 1.067, "density": 4.337, "ecdf": 0.541, "esf": 0.459}, {"trace": 1.101, "density": 3.866, "ecdf": 0.678, "esf": 0.322}, {"trace": 1.117, "density": 3.496, "ecdf": 0.74, "esf": 0.26}, {"trace": 0.958, "density": 2.423, "ecdf": 0.108, "esf": 0.892}, {"trace": 0.971, "density": 2.851, "ecdf": 0.145, "esf": 0.855}, {"trace": 1.178, "density": 1.747, "ecdf": 0.9, "esf": 0.1}, {"trace": 1.17, "density": 1.974, "ecdf": 0.885, "esf": 0.115}, {"trace": 1.098, "density": 3.908, "ecdf": 0.669, "esf": 0.331}, {"trace": 1.134, "density": 2.989, "ecdf": 0.796, "esf": 0.204}, {"trace": 1.0, "density": 3.951, "ecdf": 0.241, "esf": 0.759}, {"trace": 1.181, "density": 1.677, "ecdf": 0.905, "esf": 0.095}, {"trace": 0.869, "density": 0.326, "ecdf": 0.008, "esf": 0.992}, {"trace": 0.959, "density": 2.48, "ecdf": 0.112, "esf": 0.888}, {"trace": 1.101, "density": 3.861, "ecdf": 0.68, "esf": 0.32}, {"trace": 1.014, "density": 4.288, "ecdf": 0.306, "esf": 0.694}, {"trace": 1.04, "density": 4.443, "ecdf": 0.418, "esf": 0.582}, {"trace": 1.119, "density": 3.455, "ecdf": 0.745, "esf": 0.255}, {"trace": 1.061, "density": 4.386, "ecdf": 0.513, "esf": 0.487}, {"trace": 0.999, "density": 3.918, "ecdf": 0.237, "esf": 0.763}, {"trace": 1.079, "density": 4.208, "ecdf": 0.589, "esf": 0.411}, {"trace": 1.023, "density": 4.369, "ecdf": 0.345, "esf": 0.655}, {"trace": 1.023, "density": 4.369, "ecdf": 0.345, "esf": 0.655}, {"trace": 1.094, "density": 3.981, "ecdf": 0.652, "esf": 0.348}, {"trace": 1.056, "density": 4.416, "ecdf": 0.491, "esf": 0.509}, {"trace": 1.099, "density": 3.892, "ecdf": 0.673, "esf": 0.327}, {"trace": 0.957, "density": 2.393, "ecdf": 0.106, "esf": 0.894}, {"trace": 1.221, "density": 0.881, "ecdf": 0.955, "esf": 0.045}, {"trace": 0.923, "density": 1.329, "ecdf": 0.042, "esf": 0.958}, {"trace": 1.201, "density": 1.261, "ecdf": 0.934, "esf": 0.066}, {"trace": 0.875, "density": 0.386, "ecdf": 0.01, "esf": 0.99}, {"trace": 1.029, "density": 4.403, "ecdf": 0.369, "esf": 0.631}, {"trace": 0.985, "density": 3.387, "ecdf": 0.188, "esf": 0.812}, {"trace": 1.203, "density": 1.234, "ecdf": 0.936, "esf": 0.064}, {"trace": 1.074, "density": 4.263, "ecdf": 0.569, "esf": 0.431}, {"trace": 1.021, "density": 4.351, "ecdf": 0.333, "esf": 0.667}, {"trace": 1.078, "density": 4.213, "ecdf": 0.587, "esf": 0.413}, {"trace": 1.02, "density": 4.348, "ecdf": 0.331, "esf": 0.669}, {"trace": 1.111, "density": 3.654, "ecdf": 0.718, "esf": 0.282}, {"trace": 1.183, "density": 1.629, "ecdf": 0.908, "esf": 0.092}, {"trace": 1.007, "density": 4.159, "ecdf": 0.273, "esf": 0.727}, {"trace": 1.151, "density": 2.519, "ecdf": 0.841, "esf": 0.159}, {"trace": 1.154, "density": 2.435, "ecdf": 0.85, "esf": 0.15}, {"trace": 0.94, "density": 1.873, "ecdf": 0.073, "esf": 0.927}, {"trace": 1.088, "density": 4.082, "ecdf": 0.626, "esf": 0.374}, {"trace": 1.139, "density": 2.859, "ecdf": 0.809, "esf": 0.191}, {"trace": 1.192, "density": 1.428, "ecdf": 0.92, "esf": 0.08}, {"trace": 0.931, "density": 1.597, "ecdf": 0.054, "esf": 0.946}, {"trace": 1.261, "density": 0.452, "ecdf": 0.979, "esf": 0.021}, {"trace": 0.899, "density": 0.701, "ecdf": 0.021, "esf": 0.979}, {"trace": 1.193, "density": 1.411, "ecdf": 0.922, "esf": 0.078}, {"trace": 0.927, "density": 1.463, "ecdf": 0.047, "esf": 0.953}, {"trace": 1.126, "density": 3.24, "ecdf": 0.771, "esf": 0.229}, {"trace": 1.136, "density": 2.945, "ecdf": 0.801, "esf": 0.199}, {"trace": 1.124, "density": 3.306, "ecdf": 0.763, "esf": 0.237}, {"trace": 1.024, "density": 4.375, "ecdf": 0.348, "esf": 0.652}, {"trace": 1.04, "density": 4.444, "ecdf": 0.421, "esf": 0.579}, {"trace": 0.808, "density": 0.032, "ecdf": 0.001, "esf": 0.999}, {"trace": 1.292, "density": 0.239, "ecdf": 0.989, "esf": 0.011}, {"trace": 1.007, "density": 4.169, "ecdf": 0.276, "esf": 0.724}, {"trace": 0.972, "density": 2.891, "ecdf": 0.148, "esf": 0.852}, {"trace": 0.983, "density": 3.283, "ecdf": 0.179, "esf": 0.821}, {"trace": 0.947, "density": 2.106, "ecdf": 0.085, "esf": 0.915}, {"trace": 1.173, "density": 1.894, "ecdf": 0.891, "esf": 0.109}, {"trace": 1.142, "density": 2.768, "ecdf": 0.817, "esf": 0.183}, {"trace": 0.948, "density": 2.136, "ecdf": 0.087, "esf": 0.913}, {"trace": 1.062, "density": 4.379, "ecdf": 0.518, "esf": 0.482}, {"trace": 0.987, "density": 3.435, "ecdf": 0.192, "esf": 0.808}, {"trace": 1.169, "density": 2.006, "ecdf": 0.883, "esf": 0.117}, {"trace": 1.141, "density": 2.782, "ecdf": 0.816, "esf": 0.184}, {"trace": 1.059, "density": 4.405, "ecdf": 0.5, "esf": 0.5}, {"trace": 1.207, "density": 1.159, "ecdf": 0.941, "esf": 0.059}, {"trace": 1.076, "density": 4.245, "ecdf": 0.575, "esf": 0.425}, {"trace": 1.11, "density": 3.666, "ecdf": 0.716, "esf": 0.284}, {"trace": 1.014, "density": 4.283, "ecdf": 0.304, "esf": 0.696}, {"trace": 1.201, "density": 1.267, "ecdf": 0.933, "esf": 0.067}, {"trace": 1.016, "density": 4.306, "ecdf": 0.312, "esf": 0.688}, {"trace": 1.093, "density": 3.993, "ecdf": 0.648, "esf": 0.352}, {"trace": 1.022, "density": 4.358, "ecdf": 0.337, "esf": 0.663}, {"trace": 1.173, "density": 1.892, "ecdf": 0.891, "esf": 0.109}, {"trace": 0.989, "density": 3.54, "ecdf": 0.199, "esf": 0.801}, {"trace": 1.005, "density": 4.126, "ecdf": 0.266, "esf": 0.734}, {"trace": 1.064, "density": 4.368, "ecdf": 0.525, "esf": 0.475}, {"trace": 1.044, "density": 4.448, "ecdf": 0.436, "esf": 0.564}, {"trace": 1.118, "density": 3.48, "ecdf": 0.741, "esf": 0.259}, {"trace": 0.999, "density": 3.941, "ecdf": 0.24, "esf": 0.76}, {"trace": 0.91, "density": 0.94, "ecdf": 0.03, "esf": 0.97}, {"trace": 0.997, "density": 3.859, "ecdf": 0.23, "esf": 0.77}, {"trace": 1.096, "density": 3.953, "ecdf": 0.659, "esf": 0.341}, {"trace": 0.958, "density": 2.445, "ecdf": 0.109, "esf": 0.891}, {"trace": 1.063, "density": 4.373, "ecdf": 0.522, "esf": 0.478}, {"trace": 0.994, "density": 3.737, "ecdf": 0.215, "esf": 0.785}, {"trace": 1.127, "density": 3.21, "ecdf": 0.775, "esf": 0.225}, {"trace": 1.004, "density": 4.096, "ecdf": 0.261, "esf": 0.739}, {"trace": 1.01, "density": 4.215, "ecdf": 0.284, "esf": 0.716}, {"trace": 1.12, "density": 3.403, "ecdf": 0.752, "esf": 0.248}, {"trace": 1.006, "density": 4.151, "ecdf": 0.272, "esf": 0.728}, {"trace": 0.985, "density": 3.379, "ecdf": 0.187, "esf": 0.813}, {"trace": 1.072, "density": 4.291, "ecdf": 0.559, "esf": 0.441}, {"trace": 1.044, "density": 4.448, "ecdf": 0.438, "esf": 0.562}, {"trace": 1.039, "density": 4.442, "ecdf": 0.416, "esf": 0.584}, {"trace": 1.064, "density": 4.363, "ecdf": 0.529, "esf": 0.471}, {"trace": 0.982, "density": 3.24, "ecdf": 0.176, "esf": 0.824}, {"trace": 1.128, "density": 3.168, "ecdf": 0.78, "esf": 0.22}, {"trace": 0.903, "density": 0.778, "ecdf": 0.025, "esf": 0.975}, {"trace": 0.963, "density": 2.595, "ecdf": 0.122, "esf": 0.878}, {"trace": 1.115, "density": 3.546, "ecdf": 0.734, "esf": 0.266}, {"trace": 1.066, "density": 4.349, "ecdf": 0.537, "esf": 0.463}, {"trace": 0.998, "density": 3.893, "ecdf": 0.234, "esf": 0.766}, {"trace": 0.895, "density": 0.636, "ecdf": 0.019, "esf": 0.981}, {"trace": 0.894, "density": 0.616, "ecdf": 0.019, "esf": 0.981}, {"trace": 1.114, "density": 3.587, "ecdf": 0.727, "esf": 0.273}, {"trace": 1.062, "density": 4.38, "ecdf": 0.518, "esf": 0.482}, {"trace": 1.05, "density": 4.44, "ecdf": 0.465, "esf": 0.535}, {"trace": 0.952, "density": 2.257, "ecdf": 0.097, "esf": 0.903}, {"trace": 0.984, "density": 3.345, "ecdf": 0.184, "esf": 0.816}, {"trace": 0.993, "density": 3.7, "ecdf": 0.213, "esf": 0.787}, {"trace": 0.989, "density": 3.541, "ecdf": 0.199, "esf": 0.801}, {"trace": 0.918, "density": 1.183, "ecdf": 0.037, "esf": 0.963}, {"trace": 1.09, "density": 4.049, "ecdf": 0.633, "esf": 0.367}, {"trace": 1.155, "density": 2.399, "ecdf": 0.853, "esf": 0.147}, {"trace": 0.973, "density": 2.928, "ecdf": 0.151, "esf": 0.849}, {"trace": 1.04, "density": 4.443, "ecdf": 0.418, "esf": 0.582}, {"trace": 1.065, "density": 4.354, "ecdf": 0.534, "esf": 0.466}, {"trace": 0.961, "density": 2.525, "ecdf": 0.116, "esf": 0.884}, {"trace": 1.295, "density": 0.224, "ecdf": 0.99, "esf": 0.01}, {"trace": 1.01, "density": 4.218, "ecdf": 0.285, "esf": 0.715}, {"trace": 1.121, "density": 3.395, "ecdf": 0.753, "esf": 0.247}, {"trace": 1.038, "density": 4.438, "ecdf": 0.408, "esf": 0.592}, {"trace": 1.044, "density": 4.448, "ecdf": 0.438, "esf": 0.562}, {"trace": 0.965, "density": 2.671, "ecdf": 0.129, "esf": 0.871}, {"trace": 0.997, "density": 3.852, "ecdf": 0.229, "esf": 0.771}, {"trace": 1.018, "density": 4.325, "ecdf": 0.321, "esf": 0.679}, {"trace": 0.993, "density": 3.684, "ecdf": 0.212, "esf": 0.788}, {"trace": 1.054, "density": 4.429, "ecdf": 0.48, "esf": 0.52}, {"trace": 1.033, "density": 4.423, "ecdf": 0.386, "esf": 0.614}, {"trace": 0.901, "density": 0.735, "ecdf": 0.023, "esf": 0.977}, {"trace": 1.286, "density": 0.275, "ecdf": 0.988, "esf": 0.012}, {"trace": 0.962, "density": 2.572, "ecdf": 0.12, "esf": 0.88}, {"trace": 1.033, "density": 4.421, "ecdf": 0.383, "esf": 0.617}, {"trace": 1.135, "density": 2.979, "ecdf": 0.798, "esf": 0.202}, {"trace": 1.005, "density": 4.112, "ecdf": 0.264, "esf": 0.736}, {"trace": 0.976, "density": 3.043, "ecdf": 0.162, "esf": 0.838}, {"trace": 0.993, "density": 3.683, "ecdf": 0.211, "esf": 0.789}, {"trace": 1.118, "density": 3.48, "ecdf": 0.741, "esf": 0.259}, {"trace": 1.021, "density": 4.357, "ecdf": 0.337, "esf": 0.663}, {"trace": 1.093, "density": 4.002, "ecdf": 0.646, "esf": 0.354}, {"trace": 1.148, "density": 2.596, "ecdf": 0.835, "esf": 0.165}, {"trace": 1.114, "density": 3.572, "ecdf": 0.73, "esf": 0.27}, {"trace": 1.108, "density": 3.709, "ecdf": 0.709, "esf": 0.291}, {"trace": 1.041, "density": 4.445, "ecdf": 0.422, "esf": 0.578}, {"trace": 1.077, "density": 4.223, "ecdf": 0.583, "esf": 0.417}, {"trace": 1.199, "density": 1.308, "ecdf": 0.93, "esf": 0.07}, {"trace": 1.119, "density": 3.433, "ecdf": 0.748, "esf": 0.252}, {"trace": 1.162, "density": 2.22, "ecdf": 0.868, "esf": 0.132}, {"trace": 1.006, "density": 4.13, "ecdf": 0.267, "esf": 0.733}, {"trace": 0.984, "density": 3.315, "ecdf": 0.181, "esf": 0.819}, {"trace": 1.063, "density": 4.371, "ecdf": 0.523, "esf": 0.477}, {"trace": 1.047, "density": 4.446, "ecdf": 0.448, "esf": 0.552}, {"trace": 0.977, "density": 3.056, "ecdf": 0.163, "esf": 0.836}, {"trace": 0.965, "density": 2.66, "ecdf": 0.128, "esf": 0.872}, {"trace": 1.018, "density": 4.328, "ecdf": 0.322, "esf": 0.678}, {"trace": 1.014, "density": 4.282, "ecdf": 0.304, "esf": 0.696}, {"trace": 1.099, "density": 3.898, "ecdf": 0.671, "esf": 0.329}, {"trace": 1.039, "density": 4.441, "ecdf": 0.415, "esf": 0.585}, {"trace": 1.05, "density": 4.442, "ecdf": 0.461, "esf": 0.539}, {"trace": 1.11, "density": 3.672, "ecdf": 0.716, "esf": 0.284}, {"trace": 1.011, "density": 4.244, "ecdf": 0.292, "esf": 0.708}, {"trace": 1.068, "density": 4.332, "ecdf": 0.544, "esf": 0.456}, {"trace": 1.083, "density": 4.154, "ecdf": 0.608, "esf": 0.392}, {"trace": 1.064, "density": 4.366, "ecdf": 0.526, "esf": 0.474}, {"trace": 1.114, "density": 3.589, "ecdf": 0.727, "esf": 0.273}, {"trace": 1.082, "density": 4.158, "ecdf": 0.607, "esf": 0.393}, {"trace": 1.093, "density": 3.991, "ecdf": 0.649, "esf": 0.351}, {"trace": 1.008, "density": 4.188, "ecdf": 0.279, "esf": 0.721}, {"trace": 0.966, "density": 2.702, "ecdf": 0.133, "esf": 0.867}, {"trace": 1.069, "density": 4.321, "ecdf": 0.549, "esf": 0.451}, {"trace": 1.035, "density": 4.43, "ecdf": 0.395, "esf": 0.605}, {"trace": 1.027, "density": 4.391, "ecdf": 0.36, "esf": 0.64}, {"trace": 1.156, "density": 2.377, "ecdf": 0.856, "esf": 0.144}, {"trace": 0.964, "density": 2.614, "ecdf": 0.124, "esf": 0.876}, {"trace": 1.14, "density": 2.817, "ecdf": 0.813, "esf": 0.187}, {"trace": 1.035, "density": 4.431, "ecdf": 0.396, "esf": 0.603}, {"trace": 1.193, "density": 1.422, "ecdf": 0.92, "esf": 0.08}, {"trace": 1.092, "density": 4.013, "ecdf": 0.643, "esf": 0.357}, {"trace": 0.999, "density": 3.925, "ecdf": 0.238, "esf": 0.762}, {"trace": 0.986, "density": 3.402, "ecdf": 0.189, "esf": 0.811}, {"trace": 0.881, "density": 0.456, "ecdf": 0.012, "esf": 0.988}, {"trace": 1.104, "density": 3.806, "ecdf": 0.693, "esf": 0.307}, {"trace": 1.009, "density": 4.205, "ecdf": 0.282, "esf": 0.718}, {"trace": 1.128, "density": 3.167, "ecdf": 0.78, "esf": 0.22}, {"trace": 1.125, "density": 3.274, "ecdf": 0.767, "esf": 0.233}, {"trace": 1.06, "density": 4.394, "ecdf": 0.508, "esf": 0.492}, {"trace": 1.052, "density": 4.436, "ecdf": 0.472, "esf": 0.528}, {"trace": 0.964, "density": 2.626, "ecdf": 0.126, "esf": 0.874}, {"trace": 0.978, "density": 3.092, "ecdf": 0.166, "esf": 0.834}, {"trace": 1.101, "density": 3.855, "ecdf": 0.681, "esf": 0.319}, {"trace": 0.937, "density": 1.801, "ecdf": 0.068, "esf": 0.932}, {"trace": 1.051, "density": 4.437, "ecdf": 0.47, "esf": 0.53}, {"trace": 1.044, "density": 4.447, "ecdf": 0.435, "esf": 0.565}, {"trace": 1.077, "density": 4.235, "ecdf": 0.578, "esf": 0.422}, {"trace": 0.988, "density": 3.497, "ecdf": 0.196, "esf": 0.804}, {"trace": 0.966, "density": 2.678, "ecdf": 0.13, "esf": 0.87}, {"trace": 1.073, "density": 4.282, "ecdf": 0.562, "esf": 0.438}, {"trace": 1.095, "density": 3.969, "ecdf": 0.654, "esf": 0.346}, {"trace": 1.083, "density": 4.152, "ecdf": 0.609, "esf": 0.391}, {"trace": 1.054, "density": 4.426, "ecdf": 0.482, "esf": 0.518}, {"trace": 1.124, "density": 3.303, "ecdf": 0.764, "esf": 0.236}, {"trace": 1.16, "density": 2.273, "ecdf": 0.864, "esf": 0.136}, {"trace": 1.032, "density": 4.419, "ecdf": 0.382, "esf": 0.618}, {"trace": 1.055, "density": 4.424, "ecdf": 0.484, "esf": 0.516}, {"trace": 1.075, "density": 4.258, "ecdf": 0.572, "esf": 0.428}, {"trace": 1.094, "density": 3.986, "ecdf": 0.65, "esf": 0.35}, {"trace": 1.148, "density": 2.614, "ecdf": 0.833, "esf": 0.167}, {"trace": 1.097, "density": 3.936, "ecdf": 0.664, "esf": 0.336}, {"trace": 1.016, "density": 4.309, "ecdf": 0.314, "esf": 0.686}, {"trace": 1.188, "density": 1.525, "ecdf": 0.914, "esf": 0.086}, {"trace": 1.187, "density": 1.534, "ecdf": 0.913, "esf": 0.087}, {"trace": 0.902, "density": 0.755, "ecdf": 0.024, "esf": 0.976}, {"trace": 0.972, "density": 2.902, "ecdf": 0.149, "esf": 0.851}, {"trace": 0.982, "density": 3.247, "ecdf": 0.176, "esf": 0.824}, {"trace": 1.111, "density": 3.654, "ecdf": 0.718, "esf": 0.282}, {"trace": 0.98, "density": 3.172, "ecdf": 0.171, "esf": 0.829}, {"trace": 1.203, "density": 1.222, "ecdf": 0.937, "esf": 0.063}, {"trace": 1.272, "density": 0.37, "ecdf": 0.984, "esf": 0.016}, {"trace": 1.299, "density": 0.207, "ecdf": 0.991, "esf": 0.009}, {"trace": 0.976, "density": 3.011, "ecdf": 0.159, "esf": 0.841}, {"trace": 1.055, "density": 4.422, "ecdf": 0.486, "esf": 0.514}, {"trace": 1.104, "density": 3.798, "ecdf": 0.694, "esf": 0.306}, {"trace": 1.129, "density": 3.148, "ecdf": 0.782, "esf": 0.218}, {"trace": 1.198, "density": 1.315, "ecdf": 0.929, "esf": 0.071}, {"trace": 1.102, "density": 3.852, "ecdf": 0.682, "esf": 0.318}, {"trace": 1.015, "density": 4.294, "ecdf": 0.308, "esf": 0.692}, {"trace": 1.171, "density": 1.931, "ecdf": 0.889, "esf": 0.111}, {"trace": 0.992, "density": 3.655, "ecdf": 0.21, "esf": 0.79}, {"trace": 1.153, "density": 2.464, "ecdf": 0.846, "esf": 0.154}, {"trace": 1.139, "density": 2.85, "ecdf": 0.811, "esf": 0.189}, {"trace": 0.989, "density": 3.552, "ecdf": 0.2, "esf": 0.8}, {"trace": 0.993, "density": 3.7, "ecdf": 0.213, "esf": 0.787}, {"trace": 1.015, "density": 4.302, "ecdf": 0.31, "esf": 0.69}, {"trace": 0.997, "density": 3.862, "ecdf": 0.23, "esf": 0.77}, {"trace": 1.106, "density": 3.771, "ecdf": 0.698, "esf": 0.302}, {"trace": 1.106, "density": 3.762, "ecdf": 0.701, "esf": 0.299}, {"trace": 1.04, "density": 4.443, "ecdf": 0.418, "esf": 0.582}, {"trace": 1.138, "density": 2.865, "ecdf": 0.808, "esf": 0.192}, {"trace": 1.149, "density": 2.577, "ecdf": 0.837, "esf": 0.163}, {"trace": 0.971, "density": 2.845, "ecdf": 0.144, "esf": 0.856}, {"trace": 1.051, "density": 4.438, "ecdf": 0.469, "esf": 0.531}, {"trace": 1.011, "density": 4.233, "ecdf": 0.289, "esf": 0.711}, {"trace": 1.087, "density": 4.086, "ecdf": 0.626, "esf": 0.374}, {"trace": 1.159, "density": 2.294, "ecdf": 0.862, "esf": 0.137}, {"trace": 1.089, "density": 4.066, "ecdf": 0.63, "esf": 0.37}, {"trace": 1.239, "density": 0.648, "ecdf": 0.968, "esf": 0.032}, {"trace": 0.917, "density": 1.148, "ecdf": 0.036, "esf": 0.964}, {"trace": 1.027, "density": 4.393, "ecdf": 0.361, "esf": 0.639}, {"trace": 1.062, "density": 4.385, "ecdf": 0.514, "esf": 0.486}, {"trace": 1.114, "density": 3.583, "ecdf": 0.728, "esf": 0.272}, {"trace": 1.161, "density": 2.25, "ecdf": 0.866, "esf": 0.134}, {"trace": 0.907, "density": 0.855, "ecdf": 0.028, "esf": 0.972}, {"trace": 0.901, "density": 0.74, "ecdf": 0.023, "esf": 0.977}, {"trace": 1.031, "density": 4.414, "ecdf": 0.377, "esf": 0.623}, {"trace": 0.997, "density": 3.849, "ecdf": 0.229, "esf": 0.771}, {"trace": 0.899, "density": 0.694, "ecdf": 0.021, "esf": 0.979}, {"trace": 0.916, "density": 1.117, "ecdf": 0.035, "esf": 0.965}, {"trace": 1.057, "density": 4.411, "ecdf": 0.497, "esf": 0.503}, {"trace": 1.168, "density": 2.044, "ecdf": 0.88, "esf": 0.12}, {"trace": 1.005, "density": 4.102, "ecdf": 0.262, "esf": 0.738}, {"trace": 1.177, "density": 1.784, "ecdf": 0.899, "esf": 0.101}, {"trace": 1.017, "density": 4.321, "ecdf": 0.32, "esf": 0.68}, {"trace": 1.048, "density": 4.445, "ecdf": 0.455, "esf": 0.545}, {"trace": 1.058, "density": 4.409, "ecdf": 0.498, "esf": 0.502}, {"trace": 1.125, "density": 3.274, "ecdf": 0.768, "esf": 0.232}, {"trace": 1.043, "density": 4.447, "ecdf": 0.43, "esf": 0.57}, {"trace": 1.154, "density": 2.442, "ecdf": 0.848, "esf": 0.152}, {"trace": 0.984, "density": 3.342, "ecdf": 0.184, "esf": 0.816}, {"trace": 1.001, "density": 4.003, "ecdf": 0.248, "esf": 0.752}, {"trace": 1.026, "density": 4.388, "ecdf": 0.357, "esf": 0.643}, {"trace": 1.193, "density": 1.407, "ecdf": 0.922, "esf": 0.078}, {"trace": 1.076, "density": 4.238, "ecdf": 0.577, "esf": 0.423}, {"trace": 1.193, "density": 1.417, "ecdf": 0.921, "esf": 0.079}, {"trace": 0.962, "density": 2.571, "ecdf": 0.12, "esf": 0.88}, {"trace": 1.214, "density": 1.011, "ecdf": 0.949, "esf": 0.051}, {"trace": 0.985, "density": 3.368, "ecdf": 0.186, "esf": 0.814}, {"trace": 1.08, "density": 4.195, "ecdf": 0.596, "esf": 0.404}, {"trace": 1.206, "density": 1.182, "ecdf": 0.94, "esf": 0.06}, {"trace": 0.862, "density": 0.264, "ecdf": 0.005, "esf": 0.995}, {"trace": 1.114, "density": 3.587, "ecdf": 0.728, "esf": 0.272}, {"trace": 0.942, "density": 1.954, "ecdf": 0.078, "esf": 0.922}, {"trace": 1.067, "density": 4.344, "ecdf": 0.539, "esf": 0.461}, {"trace": 0.889, "density": 0.553, "ecdf": 0.016, "esf": 0.984}, {"trace": 1.008, "density": 4.187, "ecdf": 0.279, "esf": 0.721}, {"trace": 0.965, "density": 2.659, "ecdf": 0.128, "esf": 0.872}, {"trace": 0.973, "density": 2.932, "ecdf": 0.152, "esf": 0.848}, {"trace": 1.049, "density": 4.442, "ecdf": 0.46, "esf": 0.54}, {"trace": 1.092, "density": 4.01, "ecdf": 0.644, "esf": 0.356}, {"trace": 0.937, "density": 1.799, "ecdf": 0.068, "esf": 0.932}, {"trace": 1.219, "density": 0.926, "ecdf": 0.953, "esf": 0.047}, {"trace": 1.241, "density": 0.625, "ecdf": 0.969, "esf": 0.031}, {"trace": 0.964, "density": 2.621, "ecdf": 0.125, "esf": 0.875}, {"trace": 1.214, "density": 1.019, "ecdf": 0.949, "esf": 0.051}, {"trace": 1.198, "density": 1.322, "ecdf": 0.929, "esf": 0.071}, {"trace": 0.999, "density": 3.946, "ecdf": 0.24, "esf": 0.76}, {"trace": 1.114, "density": 3.582, "ecdf": 0.728, "esf": 0.272}, {"trace": 0.941, "density": 1.922, "ecdf": 0.076, "esf": 0.924}, {"trace": 1.197, "density": 1.336, "ecdf": 0.927, "esf": 0.073}, {"trace": 0.899, "density": 0.692, "ecdf": 0.021, "esf": 0.979}, {"trace": 1.155, "density": 2.41, "ecdf": 0.853, "esf": 0.147}, {"trace": 1.009, "density": 4.205, "ecdf": 0.282, "esf": 0.718}, {"trace": 1.141, "density": 2.806, "ecdf": 0.814, "esf": 0.186}, {"trace": 1.078, "density": 4.215, "ecdf": 0.586, "esf": 0.414}, {"trace": 1.015, "density": 4.302, "ecdf": 0.311, "esf": 0.689}, {"trace": 1.071, "density": 4.297, "ecdf": 0.557, "esf": 0.443}, {"trace": 1.097, "density": 3.93, "ecdf": 0.665, "esf": 0.335}, {"trace": 1.07, "density": 4.308, "ecdf": 0.553, "esf": 0.447}, {"trace": 1.119, "density": 3.448, "ecdf": 0.746, "esf": 0.254}, {"trace": 0.982, "density": 3.25, "ecdf": 0.177, "esf": 0.823}, {"trace": 0.951, "density": 2.217, "ecdf": 0.094, "esf": 0.906}, {"trace": 1.232, "density": 0.727, "ecdf": 0.962, "esf": 0.038}, {"trace": 1.065, "density": 4.361, "ecdf": 0.531, "esf": 0.469}, {"trace": 1.031, "density": 4.412, "ecdf": 0.375, "esf": 0.625}, {"trace": 1.021, "density": 4.357, "ecdf": 0.337, "esf": 0.663}, {"trace": 1.106, "density": 3.764, "ecdf": 0.7, "esf": 0.3}, {"trace": 1.155, "density": 2.424, "ecdf": 0.851, "esf": 0.149}, {"trace": 1.134, "density": 2.994, "ecdf": 0.795, "esf": 0.205}, {"trace": 1.158, "density": 2.324, "ecdf": 0.86, "esf": 0.14}, {"trace": 0.969, "density": 2.792, "ecdf": 0.139, "esf": 0.86}, {"trace": 1.009, "density": 4.206, "ecdf": 0.282, "esf": 0.718}, {"trace": 1.066, "density": 4.352, "ecdf": 0.535, "esf": 0.465}, {"trace": 1.073, "density": 4.275, "ecdf": 0.565, "esf": 0.435}, {"trace": 0.969, "density": 2.778, "ecdf": 0.138, "esf": 0.862}, {"trace": 1.135, "density": 2.96, "ecdf": 0.799, "esf": 0.201}, {"trace": 1.037, "density": 4.436, "ecdf": 0.405, "esf": 0.595}, {"trace": 1.135, "density": 2.965, "ecdf": 0.799, "esf": 0.201}, {"trace": 1.049, "density": 4.443, "ecdf": 0.459, "esf": 0.541}, {"trace": 1.096, "density": 3.957, "ecdf": 0.658, "esf": 0.342}, {"trace": 1.125, "density": 3.253, "ecdf": 0.77, "esf": 0.23}, {"trace": 1.197, "density": 1.347, "ecdf": 0.926, "esf": 0.074}, {"trace": 1.193, "density": 1.419, "ecdf": 0.921, "esf": 0.079}, {"trace": 1.093, "density": 3.991, "ecdf": 0.649, "esf": 0.351}, {"trace": 1.005, "density": 4.119, "ecdf": 0.265, "esf": 0.735}, {"trace": 1.093, "density": 4.001, "ecdf": 0.646, "esf": 0.354}, {"trace": 1.075, "density": 4.254, "ecdf": 0.573, "esf": 0.427}, {"trace": 1.018, "density": 4.325, "ecdf": 0.321, "esf": 0.679}, {"trace": 1.233, "density": 0.711, "ecdf": 0.963, "esf": 0.037}, {"trace": 1.139, "density": 2.837, "ecdf": 0.811, "esf": 0.189}, {"trace": 0.999, "density": 3.936, "ecdf": 0.239, "esf": 0.761}, {"trace": 1.038, "density": 4.44, "ecdf": 0.413, "esf": 0.587}, {"trace": 1.082, "density": 4.159, "ecdf": 0.606, "esf": 0.394}, {"trace": 1.02, "density": 4.348, "ecdf": 0.331, "esf": 0.669}, {"trace": 1.121, "density": 3.387, "ecdf": 0.753, "esf": 0.247}, {"trace": 1.047, "density": 4.446, "ecdf": 0.45, "esf": 0.55}, {"trace": 1.05, "density": 4.441, "ecdf": 0.463, "esf": 0.537}, {"trace": 1.021, "density": 4.354, "ecdf": 0.334, "esf": 0.666}, {"trace": 1.064, "density": 4.366, "ecdf": 0.527, "esf": 0.473}, {"trace": 1.162, "density": 2.201, "ecdf": 0.869, "esf": 0.131}, {"trace": 0.924, "density": 1.362, "ecdf": 0.043, "esf": 0.957}, {"trace": 0.934, "density": 1.693, "ecdf": 0.06, "esf": 0.94}, {"trace": 1.097, "density": 3.933, "ecdf": 0.664, "esf": 0.336}, {"trace": 0.949, "density": 2.152, "ecdf": 0.088, "esf": 0.912}, {"trace": 1.087, "density": 4.085, "ecdf": 0.626, "esf": 0.374}, {"trace": 1.005, "density": 4.108, "ecdf": 0.263, "esf": 0.737}, {"trace": 1.021, "density": 4.353, "ecdf": 0.334, "esf": 0.666}, {"trace": 1.002, "density": 4.026, "ecdf": 0.251, "esf": 0.749}, {"trace": 1.31, "density": 0.167, "ecdf": 0.993, "esf": 0.007}, {"trace": 0.999, "density": 3.915, "ecdf": 0.237, "esf": 0.763}, {"trace": 1.017, "density": 4.316, "ecdf": 0.317, "esf": 0.683}, {"trace": 0.931, "density": 1.612, "ecdf": 0.055, "esf": 0.945}, {"trace": 1.274, "density": 0.353, "ecdf": 0.985, "esf": 0.015}, {"trace": 0.91, "density": 0.954, "ecdf": 0.03, "esf": 0.97}, {"trace": 1.313, "density": 0.155, "ecdf": 0.993, "esf": 0.007}, {"trace": 1.195, "density": 1.386, "ecdf": 0.924, "esf": 0.076}, {"trace": 1.046, "density": 4.447, "ecdf": 0.447, "esf": 0.553}, {"trace": 1.113, "density": 3.605, "ecdf": 0.725, "esf": 0.275}, {"trace": 1.198, "density": 1.323, "ecdf": 0.929, "esf": 0.071}, {"trace": 1.111, "density": 3.64, "ecdf": 0.72, "esf": 0.28}, {"trace": 1.087, "density": 4.084, "ecdf": 0.626, "esf": 0.374}, {"trace": 1.047, "density": 4.446, "ecdf": 0.45, "esf": 0.55}, {"trace": 1.036, "density": 4.434, "ecdf": 0.401, "esf": 0.599}, {"trace": 1.128, "density": 3.175, "ecdf": 0.779, "esf": 0.221}, {"trace": 1.099, "density": 3.9, "ecdf": 0.67, "esf": 0.33}, {"trace": 1.031, "density": 4.415, "ecdf": 0.378, "esf": 0.622}, {"trace": 1.048, "density": 4.445, "ecdf": 0.453, "esf": 0.547}, {"trace": 1.048, "density": 4.444, "ecdf": 0.457, "esf": 0.543}, {"trace": 1.0, "density": 3.977, "ecdf": 0.245, "esf": 0.755}, {"trace": 1.148, "density": 2.612, "ecdf": 0.833, "esf": 0.167}, {"trace": 1.071, "density": 4.299, "ecdf": 0.556, "esf": 0.444}, {"trace": 1.156, "density": 2.373, "ecdf": 0.856, "esf": 0.144}, {"trace": 0.927, "density": 1.482, "ecdf": 0.048, "esf": 0.952}, {"trace": 0.971, "density": 2.862, "ecdf": 0.146, "esf": 0.854}, {"trace": 1.181, "density": 1.683, "ecdf": 0.905, "esf": 0.095}, {"trace": 0.901, "density": 0.743, "ecdf": 0.023, "esf": 0.977}, {"trace": 1.006, "density": 4.134, "ecdf": 0.268, "esf": 0.732}, {"trace": 1.047, "density": 4.446, "ecdf": 0.452, "esf": 0.548}, {"trace": 1.112, "density": 3.622, "ecdf": 0.723, "esf": 0.277}, {"trace": 1.032, "density": 4.419, "ecdf": 0.382, "esf": 0.618}, {"trace": 1.036, "density": 4.433, "ecdf": 0.4, "esf": 0.6}, {"trace": 1.013, "density": 4.265, "ecdf": 0.297, "esf": 0.703}, {"trace": 1.074, "density": 4.266, "ecdf": 0.568, "esf": 0.432}, {"trace": 1.046, "density": 4.447, "ecdf": 0.445, "esf": 0.555}, {"trace": 1.187, "density": 1.532, "ecdf": 0.914, "esf": 0.086}, {"trace": 1.063, "density": 4.377, "ecdf": 0.52, "esf": 0.48}, {"trace": 1.106, "density": 3.761, "ecdf": 0.701, "esf": 0.299}, {"trace": 1.102, "density": 3.839, "ecdf": 0.685, "esf": 0.315}, {"trace": 0.997, "density": 3.858, "ecdf": 0.23, "esf": 0.77}, {"trace": 0.993, "density": 3.706, "ecdf": 0.214, "esf": 0.786}, {"trace": 1.167, "density": 2.07, "ecdf": 0.879, "esf": 0.121}, {"trace": 1.016, "density": 4.311, "ecdf": 0.314, "esf": 0.686}, {"trace": 1.016, "density": 4.311, "ecdf": 0.314, "esf": 0.686}, {"trace": 1.133, "density": 3.011, "ecdf": 0.794, "esf": 0.206}, {"trace": 1.052, "density": 4.434, "ecdf": 0.474, "esf": 0.526}, {"trace": 1.065, "density": 4.362, "ecdf": 0.53, "esf": 0.47}, {"trace": 1.042, "density": 4.447, "ecdf": 0.429, "esf": 0.571}, {"trace": 0.997, "density": 3.854, "ecdf": 0.229, "esf": 0.771}, {"trace": 1.128, "density": 3.188, "ecdf": 0.777, "esf": 0.223}, {"trace": 1.201, "density": 1.268, "ecdf": 0.933, "esf": 0.067}, {"trace": 1.117, "density": 3.501, "ecdf": 0.739, "esf": 0.261}, {"trace": 1.038, "density": 4.44, "ecdf": 0.413, "esf": 0.587}, {"trace": 1.127, "density": 3.193, "ecdf": 0.776, "esf": 0.224}, {"trace": 1.036, "density": 4.434, "ecdf": 0.402, "esf": 0.598}, {"trace": 0.991, "density": 3.6, "ecdf": 0.204, "esf": 0.796}, {"trace": 1.057, "density": 4.413, "ecdf": 0.495, "esf": 0.505}, {"trace": 0.955, "density": 2.344, "ecdf": 0.103, "esf": 0.898}, {"trace": 1.189, "density": 1.504, "ecdf": 0.916, "esf": 0.084}, {"trace": 0.922, "density": 1.304, "ecdf": 0.041, "esf": 0.959}, {"trace": 1.135, "density": 2.958, "ecdf": 0.8, "esf": 0.2}, {"trace": 1.091, "density": 4.034, "ecdf": 0.637, "esf": 0.363}, {"trace": 1.145, "density": 2.676, "ecdf": 0.827, "esf": 0.173}, {"trace": 1.001, "density": 3.983, "ecdf": 0.246, "esf": 0.754}, {"trace": 1.076, "density": 4.239, "ecdf": 0.577, "esf": 0.423}, {"trace": 0.96, "density": 2.491, "ecdf": 0.113, "esf": 0.887}, {"trace": 0.934, "density": 1.715, "ecdf": 0.062, "esf": 0.938}, {"trace": 1.11, "density": 3.679, "ecdf": 0.714, "esf": 0.286}, {"trace": 0.927, "density": 1.494, "ecdf": 0.048, "esf": 0.952}, {"trace": 1.061, "density": 4.387, "ecdf": 0.513, "esf": 0.487}, {"trace": 0.984, "density": 3.329, "ecdf": 0.182, "esf": 0.818}, {"trace": 1.095, "density": 3.961, "ecdf": 0.657, "esf": 0.343}, {"trace": 1.196, "density": 1.356, "ecdf": 0.926, "esf": 0.074}, {"trace": 1.256, "density": 0.492, "ecdf": 0.976, "esf": 0.023}, {"trace": 0.951, "density": 2.23, "ecdf": 0.094, "esf": 0.906}, {"trace": 1.082, "density": 4.164, "ecdf": 0.604, "esf": 0.396}, {"trace": 1.079, "density": 4.208, "ecdf": 0.589, "esf": 0.411}, {"trace": 1.082, "density": 4.159, "ecdf": 0.607, "esf": 0.393}, {"trace": 0.926, "density": 1.432, "ecdf": 0.046, "esf": 0.954}, {"trace": 1.314, "density": 0.15, "ecdf": 0.994, "esf": 0.006}, {"trace": 0.95, "density": 2.198, "ecdf": 0.092, "esf": 0.908}, {"trace": 0.94, "density": 1.885, "ecdf": 0.074, "esf": 0.926}, {"trace": 1.174, "density": 1.852, "ecdf": 0.893, "esf": 0.107}, {"trace": 0.877, "density": 0.405, "ecdf": 0.01, "esf": 0.99}, {"trace": 1.134, "density": 2.984, "ecdf": 0.797, "esf": 0.203}, {"trace": 1.021, "density": 4.356, "ecdf": 0.337, "esf": 0.663}, {"trace": 1.12, "density": 3.423, "ecdf": 0.749, "esf": 0.251}, {"trace": 1.029, "density": 4.402, "ecdf": 0.367, "esf": 0.633}, {"trace": 0.951, "density": 2.205, "ecdf": 0.092, "esf": 0.908}, {"trace": 0.937, "density": 1.798, "ecdf": 0.068, "esf": 0.932}, {"trace": 1.128, "density": 3.178, "ecdf": 0.778, "esf": 0.222}, {"trace": 0.974, "density": 2.949, "ecdf": 0.154, "esf": 0.846}, {"trace": 1.13, "density": 3.104, "ecdf": 0.787, "esf": 0.213}, {"trace": 0.932, "density": 1.625, "ecdf": 0.056, "esf": 0.944}, {"trace": 1.151, "density": 2.522, "ecdf": 0.841, "esf": 0.159}, {"trace": 1.115, "density": 3.541, "ecdf": 0.734, "esf": 0.266}, {"trace": 1.213, "density": 1.039, "ecdf": 0.948, "esf": 0.052}, {"trace": 0.924, "density": 1.376, "ecdf": 0.043, "esf": 0.957}, {"trace": 1.22, "density": 0.905, "ecdf": 0.954, "esf": 0.046}, {"trace": 0.863, "density": 0.274, "ecdf": 0.006, "esf": 0.994}, {"trace": 1.015, "density": 4.293, "ecdf": 0.308, "esf": 0.692}, {"trace": 1.043, "density": 4.447, "ecdf": 0.434, "esf": 0.566}, {"trace": 1.061, "density": 4.387, "ecdf": 0.513, "esf": 0.487}, {"trace": 1.077, "density": 4.235, "ecdf": 0.578, "esf": 0.422}, {"trace": 1.12, "density": 3.404, "ecdf": 0.752, "esf": 0.248}, {"trace": 1.066, "density": 4.354, "ecdf": 0.534, "esf": 0.466}, {"trace": 1.035, "density": 4.428, "ecdf": 0.392, "esf": 0.608}, {"trace": 0.987, "density": 3.468, "ecdf": 0.194, "esf": 0.806}, {"trace": 1.139, "density": 2.839, "ecdf": 0.811, "esf": 0.189}, {"trace": 1.117, "density": 3.487, "ecdf": 0.74, "esf": 0.26}, {"trace": 1.019, "density": 4.336, "ecdf": 0.325, "esf": 0.675}, {"trace": 1.08, "density": 4.185, "ecdf": 0.598, "esf": 0.402}, {"trace": 1.063, "density": 4.374, "ecdf": 0.522, "esf": 0.478}, {"trace": 0.944, "density": 2.015, "ecdf": 0.081, "esf": 0.919}, {"trace": 0.939, "density": 1.863, "ecdf": 0.073, "esf": 0.927}, {"trace": 1.091, "density": 4.03, "ecdf": 0.638, "esf": 0.362}, {"trace": 1.034, "density": 4.427, "ecdf": 0.392, "esf": 0.608}, {"trace": 1.045, "density": 4.448, "ecdf": 0.44, "esf": 0.56}, {"trace": 1.15, "density": 2.542, "ecdf": 0.839, "esf": 0.161}, {"trace": 0.936, "density": 1.774, "ecdf": 0.066, "esf": 0.934}, {"trace": 1.176, "density": 1.813, "ecdf": 0.897, "esf": 0.103}, {"trace": 1.132, "density": 3.045, "ecdf": 0.791, "esf": 0.209}, {"trace": 1.026, "density": 4.39, "ecdf": 0.359, "esf": 0.641}, {"trace": 1.213, "density": 1.031, "ecdf": 0.948, "esf": 0.052}, {"trace": 1.002, "density": 4.035, "ecdf": 0.252, "esf": 0.748}, {"trace": 1.042, "density": 4.447, "ecdf": 0.43, "esf": 0.57}, {"trace": 1.051, "density": 4.436, "ecdf": 0.471, "esf": 0.529}, {"trace": 1.09, "density": 4.041, "ecdf": 0.635, "esf": 0.365}, {"trace": 0.999, "density": 3.939, "ecdf": 0.24, "esf": 0.76}, {"trace": 1.086, "density": 4.104, "ecdf": 0.62, "esf": 0.379}, {"trace": 1.144, "density": 2.72, "ecdf": 0.822, "esf": 0.178}, {"trace": 1.179, "density": 1.726, "ecdf": 0.902, "esf": 0.098}, {"trace": 0.997, "density": 3.873, "ecdf": 0.231, "esf": 0.769}, {"trace": 1.194, "density": 1.39, "ecdf": 0.924, "esf": 0.076}, {"trace": 0.974, "density": 2.962, "ecdf": 0.155, "esf": 0.845}, {"trace": 0.996, "density": 3.804, "ecdf": 0.222, "esf": 0.778}, {"trace": 1.139, "density": 2.852, "ecdf": 0.81, "esf": 0.19}, {"trace": 1.149, "density": 2.589, "ecdf": 0.836, "esf": 0.164}, {"trace": 1.149, "density": 2.586, "ecdf": 0.836, "esf": 0.164}, {"trace": 0.923, "density": 1.36, "ecdf": 0.043, "esf": 0.957}, {"trace": 0.9, "density": 0.714, "ecdf": 0.022, "esf": 0.978}, {"trace": 1.145, "density": 2.677, "ecdf": 0.827, "esf": 0.173}, {"trace": 1.148, "density": 2.597, "ecdf": 0.835, "esf": 0.165}, {"trace": 0.916, "density": 1.111, "ecdf": 0.035, "esf": 0.965}, {"trace": 0.941, "density": 1.903, "ecdf": 0.075, "esf": 0.925}, {"trace": 0.931, "density": 1.617, "ecdf": 0.055, "esf": 0.945}, {"trace": 0.933, "density": 1.685, "ecdf": 0.06, "esf": 0.94}, {"trace": 1.232, "density": 0.722, "ecdf": 0.962, "esf": 0.038}, {"trace": 1.023, "density": 4.367, "ecdf": 0.344, "esf": 0.657}, {"trace": 1.024, "density": 4.376, "ecdf": 0.349, "esf": 0.651}, {"trace": 1.095, "density": 3.966, "ecdf": 0.655, "esf": 0.345}, {"trace": 0.973, "density": 2.927, "ecdf": 0.151, "esf": 0.849}, {"trace": 1.037, "density": 4.437, "ecdf": 0.407, "esf": 0.593}, {"trace": 1.138, "density": 2.885, "ecdf": 0.807, "esf": 0.193}, {"trace": 0.962, "density": 2.563, "ecdf": 0.12, "esf": 0.88}, {"trace": 1.115, "density": 3.542, "ecdf": 0.734, "esf": 0.266}, {"trace": 0.925, "density": 1.4, "ecdf": 0.045, "esf": 0.955}, {"trace": 0.961, "density": 2.536, "ecdf": 0.117, "esf": 0.883}, {"trace": 1.165, "density": 2.112, "ecdf": 0.876, "esf": 0.124}, {"trace": 0.973, "density": 2.919, "ecdf": 0.15, "esf": 0.85}, {"trace": 1.235, "density": 0.696, "ecdf": 0.964, "esf": 0.036}, {"trace": 0.964, "density": 2.623, "ecdf": 0.125, "esf": 0.875}, {"trace": 1.158, "density": 2.315, "ecdf": 0.861, "esf": 0.139}, {"trace": 1.013, "density": 4.273, "ecdf": 0.3, "esf": 0.7}, {"trace": 1.066, "density": 4.351, "ecdf": 0.535, "esf": 0.465}, {"trace": 1.112, "density": 3.618, "ecdf": 0.724, "esf": 0.276}, {"trace": 1.078, "density": 4.21, "ecdf": 0.588, "esf": 0.412}, {"trace": 1.12, "density": 3.414, "ecdf": 0.751, "esf": 0.249}, {"trace": 1.108, "density": 3.71, "ecdf": 0.709, "esf": 0.291}, {"trace": 1.259, "density": 0.471, "ecdf": 0.978, "esf": 0.022}, {"trace": 1.119, "density": 3.454, "ecdf": 0.745, "esf": 0.255}, {"trace": 1.104, "density": 3.811, "ecdf": 0.692, "esf": 0.308}, {"trace": 0.998, "density": 3.896, "ecdf": 0.234, "esf": 0.766}, {"trace": 1.169, "density": 2.002, "ecdf": 0.883, "esf": 0.117}, {"trace": 1.153, "density": 2.453, "ecdf": 0.847, "esf": 0.153}, {"trace": 0.966, "density": 2.695, "ecdf": 0.132, "esf": 0.868}, {"trace": 0.918, "density": 1.165, "ecdf": 0.037, "esf": 0.963}, {"trace": 1.017, "density": 4.318, "ecdf": 0.318, "esf": 0.682}, {"trace": 1.031, "density": 4.413, "ecdf": 0.376, "esf": 0.624}, {"trace": 1.095, "density": 3.961, "ecdf": 0.657, "esf": 0.343}, {"trace": 1.155, "density": 2.419, "ecdf": 0.851, "esf": 0.149}, {"trace": 0.934, "density": 1.703, "ecdf": 0.061, "esf": 0.939}, {"trace": 1.063, "density": 4.372, "ecdf": 0.523, "esf": 0.477}, {"trace": 1.082, "density": 4.168, "ecdf": 0.602, "esf": 0.398}, {"trace": 0.944, "density": 2.0, "ecdf": 0.08, "esf": 0.92}, {"trace": 1.119, "density": 3.437, "ecdf": 0.747, "esf": 0.253}, {"trace": 1.018, "density": 4.328, "ecdf": 0.322, "esf": 0.678}, {"trace": 1.147, "density": 2.619, "ecdf": 0.832, "esf": 0.168}, {"trace": 0.923, "density": 1.347, "ecdf": 0.042, "esf": 0.958}, {"trace": 1.004, "density": 4.079, "ecdf": 0.257, "esf": 0.743}, {"trace": 1.004, "density": 4.098, "ecdf": 0.261, "esf": 0.739}, {"trace": 0.957, "density": 2.405, "ecdf": 0.107, "esf": 0.893}, {"trace": 1.123, "density": 3.325, "ecdf": 0.761, "esf": 0.239}, {"trace": 0.936, "density": 1.759, "ecdf": 0.065, "esf": 0.935}, {"trace": 1.022, "density": 4.363, "ecdf": 0.341, "esf": 0.659}, {"trace": 1.031, "density": 4.415, "ecdf": 0.378, "esf": 0.622}, {"trace": 1.117, "density": 3.508, "ecdf": 0.738, "esf": 0.262}, {"trace": 1.114, "density": 3.588, "ecdf": 0.727, "esf": 0.273}, {"trace": 1.181, "density": 1.669, "ecdf": 0.906, "esf": 0.094}, {"trace": 1.108, "density": 3.715, "ecdf": 0.708, "esf": 0.292}, {"trace": 1.063, "density": 4.373, "ecdf": 0.523, "esf": 0.477}, {"trace": 1.067, "density": 4.338, "ecdf": 0.54, "esf": 0.46}, {"trace": 1.061, "density": 4.389, "ecdf": 0.511, "esf": 0.489}, {"trace": 1.026, "density": 4.384, "ecdf": 0.354, "esf": 0.646}, {"trace": 1.204, "density": 1.219, "ecdf": 0.937, "esf": 0.063}, {"trace": 1.157, "density": 2.365, "ecdf": 0.857, "esf": 0.143}, {"trace": 1.091, "density": 4.023, "ecdf": 0.64, "esf": 0.36}, {"trace": 0.938, "density": 1.828, "ecdf": 0.07, "esf": 0.93}, {"trace": 1.216, "density": 0.972, "ecdf": 0.951, "esf": 0.049}, {"trace": 1.016, "density": 4.312, "ecdf": 0.315, "esf": 0.685}, {"trace": 1.082, "density": 4.16, "ecdf": 0.606, "esf": 0.394}, {"trace": 1.078, "density": 4.218, "ecdf": 0.585, "esf": 0.415}, {"trace": 0.961, "density": 2.521, "ecdf": 0.116, "esf": 0.884}, {"trace": 1.203, "density": 1.228, "ecdf": 0.936, "esf": 0.064}, {"trace": 1.095, "density": 3.965, "ecdf": 0.655, "esf": 0.345}, {"trace": 1.047, "density": 4.446, "ecdf": 0.449, "esf": 0.551}, {"trace": 1.341, "density": 0.085, "ecdf": 0.996, "esf": 0.004}, {"trace": 1.175, "density": 1.829, "ecdf": 0.895, "esf": 0.105}, {"trace": 0.998, "density": 3.902, "ecdf": 0.235, "esf": 0.765}, {"trace": 1.066, "density": 4.35, "ecdf": 0.536, "esf": 0.464}, {"trace": 0.975, "density": 3.003, "ecdf": 0.159, "esf": 0.841}, {"trace": 0.965, "density": 2.664, "ecdf": 0.129, "esf": 0.871}, {"trace": 1.033, "density": 4.423, "ecdf": 0.386, "esf": 0.614}, {"trace": 1.016, "density": 4.312, "ecdf": 0.315, "esf": 0.685}, {"trace": 0.951, "density": 2.203, "ecdf": 0.092, "esf": 0.908}, {"trace": 1.118, "density": 3.467, "ecdf": 0.743, "esf": 0.257}, {"trace": 0.859, "density": 0.238, "ecdf": 0.005, "esf": 0.995}, {"trace": 1.316, "density": 0.143, "ecdf": 0.994, "esf": 0.006}, {"trace": 1.088, "density": 4.081, "ecdf": 0.626, "esf": 0.373}, {"trace": 0.988, "density": 3.5, "ecdf": 0.196, "esf": 0.804}, {"trace": 0.953, "density": 2.278, "ecdf": 0.098, "esf": 0.902}, {"trace": 1.001, "density": 4.0, "ecdf": 0.248, "esf": 0.752}, {"trace": 1.162, "density": 2.221, "ecdf": 0.868, "esf": 0.132}, {"trace": 1.109, "density": 3.698, "ecdf": 0.711, "esf": 0.289}, {"trace": 1.082, "density": 4.162, "ecdf": 0.604, "esf": 0.395}, {"trace": 1.008, "density": 4.177, "ecdf": 0.278, "esf": 0.722}, {"trace": 1.107, "density": 3.748, "ecdf": 0.703, "esf": 0.297}, {"trace": 1.207, "density": 1.161, "ecdf": 0.941, "esf": 0.059}, {"trace": 0.992, "density": 3.665, "ecdf": 0.21, "esf": 0.79}, {"trace": 1.154, "density": 2.452, "ecdf": 0.848, "esf": 0.152}, {"trace": 1.129, "density": 3.152, "ecdf": 0.782, "esf": 0.218}, {"trace": 1.017, "density": 4.314, "ecdf": 0.316, "esf": 0.684}, {"trace": 0.991, "density": 3.623, "ecdf": 0.206, "esf": 0.794}, {"trace": 1.183, "density": 1.628, "ecdf": 0.908, "esf": 0.092}, {"trace": 1.27, "density": 0.386, "ecdf": 0.983, "esf": 0.017}, {"trace": 1.133, "density": 3.028, "ecdf": 0.793, "esf": 0.207}, {"trace": 1.044, "density": 4.448, "ecdf": 0.437, "esf": 0.563}, {"trace": 1.103, "density": 3.826, "ecdf": 0.689, "esf": 0.311}, {"trace": 1.279, "density": 0.32, "ecdf": 0.986, "esf": 0.014}, {"trace": 1.057, "density": 4.414, "ecdf": 0.494, "esf": 0.506}, {"trace": 1.118, "density": 3.471, "ecdf": 0.742, "esf": 0.258}, {"trace": 0.989, "density": 3.546, "ecdf": 0.2, "esf": 0.8}, {"trace": 1.223, "density": 0.85, "ecdf": 0.956, "esf": 0.043}, {"trace": 1.136, "density": 2.94, "ecdf": 0.801, "esf": 0.199}, {"trace": 1.145, "density": 2.695, "ecdf": 0.825, "esf": 0.175}, {"trace": 1.109, "density": 3.704, "ecdf": 0.711, "esf": 0.289}, {"trace": 0.94, "density": 1.872, "ecdf": 0.073, "esf": 0.927}, {"trace": 0.965, "density": 2.656, "ecdf": 0.127, "esf": 0.873}, {"trace": 1.124, "density": 3.29, "ecdf": 0.766, "esf": 0.234}, {"trace": 1.045, "density": 4.448, "ecdf": 0.44, "esf": 0.56}, {"trace": 1.027, "density": 4.395, "ecdf": 0.363, "esf": 0.637}, {"trace": 1.072, "density": 4.294, "ecdf": 0.558, "esf": 0.442}, {"trace": 1.039, "density": 4.442, "ecdf": 0.416, "esf": 0.584}, {"trace": 1.094, "density": 3.985, "ecdf": 0.651, "esf": 0.349}, {"trace": 1.085, "density": 4.114, "ecdf": 0.618, "esf": 0.382}, {"trace": 1.066, "density": 4.347, "ecdf": 0.537, "esf": 0.463}, {"trace": 1.067, "density": 4.337, "ecdf": 0.541, "esf": 0.459}, {"trace": 1.077, "density": 4.23, "ecdf": 0.58, "esf": 0.42}, {"trace": 1.079, "density": 4.202, "ecdf": 0.592, "esf": 0.408}, {"trace": 1.025, "density": 4.383, "ecdf": 0.354, "esf": 0.646}, {"trace": 1.072, "density": 4.289, "ecdf": 0.559, "esf": 0.441}, {"trace": 1.076, "density": 4.24, "ecdf": 0.576, "esf": 0.424}, {"trace": 1.15, "density": 2.548, "ecdf": 0.839, "esf": 0.161}, {"trace": 0.976, "density": 3.038, "ecdf": 0.161, "esf": 0.839}, {"trace": 1.134, "density": 2.992, "ecdf": 0.796, "esf": 0.204}, {"trace": 0.941, "density": 1.928, "ecdf": 0.076, "esf": 0.924}, {"trace": 1.023, "density": 4.37, "ecdf": 0.345, "esf": 0.655}, {"trace": 0.987, "density": 3.461, "ecdf": 0.193, "esf": 0.807}, {"trace": 1.185, "density": 1.583, "ecdf": 0.911, "esf": 0.089}, {"trace": 1.157, "density": 2.363, "ecdf": 0.857, "esf": 0.143}, {"trace": 1.131, "density": 3.073, "ecdf": 0.789, "esf": 0.211}, {"trace": 0.97, "density": 2.813, "ecdf": 0.142, "esf": 0.858}, {"trace": 1.077, "density": 4.226, "ecdf": 0.582, "esf": 0.418}, {"trace": 1.143, "density": 2.75, "ecdf": 0.82, "esf": 0.18}, {"trace": 1.006, "density": 4.132, "ecdf": 0.268, "esf": 0.732}, {"trace": 1.075, "density": 4.256, "ecdf": 0.573, "esf": 0.427}, {"trace": 1.104, "density": 3.814, "ecdf": 0.692, "esf": 0.308}, {"trace": 0.933, "density": 1.678, "ecdf": 0.059, "esf": 0.941}, {"trace": 0.929, "density": 1.544, "ecdf": 0.05, "esf": 0.95}, {"trace": 1.181, "density": 1.678, "ecdf": 0.905, "esf": 0.095}, {"trace": 1.171, "density": 1.949, "ecdf": 0.888, "esf": 0.112}, {"trace": 1.009, "density": 4.214, "ecdf": 0.284, "esf": 0.716}, {"trace": 1.174, "density": 1.855, "ecdf": 0.893, "esf": 0.107}, {"trace": 0.998, "density": 3.886, "ecdf": 0.233, "esf": 0.767}, {"trace": 1.121, "density": 3.379, "ecdf": 0.755, "esf": 0.245}, {"trace": 1.157, "density": 2.343, "ecdf": 0.859, "esf": 0.141}, {"trace": 1.124, "density": 3.3, "ecdf": 0.764, "esf": 0.236}, {"trace": 0.973, "density": 2.922, "ecdf": 0.15, "esf": 0.85}, {"trace": 0.999, "density": 3.943, "ecdf": 0.24, "esf": 0.76}, {"trace": 1.024, "density": 4.377, "ecdf": 0.35, "esf": 0.65}, {"trace": 1.035, "density": 4.43, "ecdf": 0.396, "esf": 0.604}, {"trace": 1.082, "density": 4.165, "ecdf": 0.604, "esf": 0.396}, {"trace": 0.996, "density": 3.834, "ecdf": 0.227, "esf": 0.773}, {"trace": 1.117, "density": 3.485, "ecdf": 0.741, "esf": 0.259}, {"trace": 0.929, "density": 1.551, "ecdf": 0.051, "esf": 0.949}, {"trace": 1.05, "density": 4.441, "ecdf": 0.463, "esf": 0.537}, {"trace": 0.952, "density": 2.236, "ecdf": 0.095, "esf": 0.905}, {"trace": 0.968, "density": 2.761, "ecdf": 0.137, "esf": 0.863}, {"trace": 1.135, "density": 2.954, "ecdf": 0.8, "esf": 0.2}, {"trace": 0.943, "density": 1.986, "ecdf": 0.079, "esf": 0.921}, {"trace": 1.106, "density": 3.766, "ecdf": 0.7, "esf": 0.3}, {"trace": 1.027, "density": 4.393, "ecdf": 0.362, "esf": 0.639}, {"trace": 1.062, "density": 4.384, "ecdf": 0.515, "esf": 0.485}, {"trace": 1.154, "density": 2.441, "ecdf": 0.849, "esf": 0.151}, {"trace": 1.152, "density": 2.494, "ecdf": 0.843, "esf": 0.157}, {"trace": 0.934, "density": 1.714, "ecdf": 0.062, "esf": 0.938}, {"trace": 0.96, "density": 2.495, "ecdf": 0.114, "esf": 0.886}, {"trace": 1.207, "density": 1.157, "ecdf": 0.941, "esf": 0.059}, {"trace": 1.093, "density": 3.999, "ecdf": 0.647, "esf": 0.353}, {"trace": 0.983, "density": 3.303, "ecdf": 0.18, "esf": 0.82}, {"trace": 1.274, "density": 0.354, "ecdf": 0.985, "esf": 0.015}, {"trace": 0.835, "density": 0.091, "ecdf": 0.002, "esf": 0.998}, {"trace": 1.366, "density": 0.047, "ecdf": 0.998, "esf": 0.002}, {"trace": 0.892, "density": 0.583, "ecdf": 0.017, "esf": 0.983}, {"trace": 1.19, "density": 1.482, "ecdf": 0.917, "esf": 0.083}, {"trace": 1.174, "density": 1.856, "ecdf": 0.893, "esf": 0.107}, {"trace": 1.038, "density": 4.44, "ecdf": 0.414, "esf": 0.586}, {"trace": 1.246, "density": 0.578, "ecdf": 0.972, "esf": 0.028}, {"trace": 0.932, "density": 1.633, "ecdf": 0.057, "esf": 0.943}, {"trace": 1.018, "density": 4.325, "ecdf": 0.321, "esf": 0.679}, {"trace": 1.148, "density": 2.611, "ecdf": 0.834, "esf": 0.166}, {"trace": 0.991, "density": 3.6, "ecdf": 0.204, "esf": 0.796}, {"trace": 0.982, "density": 3.231, "ecdf": 0.175, "esf": 0.825}, {"trace": 1.103, "density": 3.826, "ecdf": 0.689, "esf": 0.311}, {"trace": 1.038, "density": 4.438, "ecdf": 0.408, "esf": 0.592}, {"trace": 1.193, "density": 1.407, "ecdf": 0.922, "esf": 0.078}, {"trace": 1.039, "density": 4.443, "ecdf": 0.418, "esf": 0.582}, {"trace": 1.036, "density": 4.434, "ecdf": 0.401, "esf": 0.599}, {"trace": 1.137, "density": 2.914, "ecdf": 0.804, "esf": 0.196}, {"trace": 0.965, "density": 2.667, "ecdf": 0.129, "esf": 0.871}, {"trace": 1.118, "density": 3.464, "ecdf": 0.744, "esf": 0.256}, {"trace": 1.128, "density": 3.178, "ecdf": 0.779, "esf": 0.221}, {"trace": 0.918, "density": 1.186, "ecdf": 0.037, "esf": 0.963}, {"trace": 0.904, "density": 0.805, "ecdf": 0.026, "esf": 0.974}, {"trace": 0.93, "density": 1.589, "ecdf": 0.053, "esf": 0.947}, {"trace": 1.027, "density": 4.393, "ecdf": 0.361, "esf": 0.639}, {"trace": 1.024, "density": 4.373, "ecdf": 0.347, "esf": 0.653}, {"trace": 0.916, "density": 1.102, "ecdf": 0.034, "esf": 0.966}, {"trace": 0.943, "density": 1.981, "ecdf": 0.079, "esf": 0.921}, {"trace": 1.006, "density": 4.147, "ecdf": 0.27, "esf": 0.73}, {"trace": 0.982, "density": 3.251, "ecdf": 0.177, "esf": 0.823}, {"trace": 1.068, "density": 4.333, "ecdf": 0.544, "esf": 0.456}, {"trace": 1.128, "density": 3.19, "ecdf": 0.777, "esf": 0.223}, {"trace": 0.951, "density": 2.211, "ecdf": 0.093, "esf": 0.907}, {"trace": 1.211, "density": 1.069, "ecdf": 0.946, "esf": 0.054}, {"trace": 0.982, "density": 3.239, "ecdf": 0.176, "esf": 0.824}, {"trace": 0.973, "density": 2.929, "ecdf": 0.151, "esf": 0.849}, {"trace": 0.959, "density": 2.481, "ecdf": 0.112, "esf": 0.888}, {"trace": 0.938, "density": 1.839, "ecdf": 0.071, "esf": 0.929}, {"trace": 1.117, "density": 3.501, "ecdf": 0.739, "esf": 0.261}, {"trace": 0.936, "density": 1.775, "ecdf": 0.066, "esf": 0.934}, {"trace": 1.072, "density": 4.284, "ecdf": 0.562, "esf": 0.438}, {"trace": 1.1, "density": 3.874, "ecdf": 0.677, "esf": 0.323}, {"trace": 0.988, "density": 3.507, "ecdf": 0.196, "esf": 0.804}, {"trace": 1.162, "density": 2.196, "ecdf": 0.87, "esf": 0.13}, {"trace": 0.991, "density": 3.612, "ecdf": 0.205, "esf": 0.795}, {"trace": 1.212, "density": 1.055, "ecdf": 0.946, "esf": 0.054}, {"trace": 0.984, "density": 3.337, "ecdf": 0.183, "esf": 0.817}, {"trace": 0.981, "density": 3.206, "ecdf": 0.174, "esf": 0.826}, {"trace": 1.028, "density": 4.397, "ecdf": 0.364, "esf": 0.636}, {"trace": 1.016, "density": 4.306, "ecdf": 0.312, "esf": 0.688}, {"trace": 1.107, "density": 3.737, "ecdf": 0.704, "esf": 0.296}, {"trace": 0.964, "density": 2.619, "ecdf": 0.125, "esf": 0.875}, {"trace": 1.132, "density": 3.056, "ecdf": 0.79, "esf": 0.21}, {"trace": 1.061, "density": 4.392, "ecdf": 0.509, "esf": 0.491}, {"trace": 1.363, "density": 0.05, "ecdf": 0.998, "esf": 0.002}, {"trace": 1.399, "density": 0.028, "ecdf": 0.999, "esf": 0.001}, {"trace": 1.025, "density": 4.381, "ecdf": 0.352, "esf": 0.648}, {"trace": 1.104, "density": 3.808, "ecdf": 0.693, "esf": 0.307}, {"trace": 1.045, "density": 4.447, "ecdf": 0.442, "esf": 0.558}, {"trace": 1.096, "density": 3.956, "ecdf": 0.658, "esf": 0.342}, {"trace": 1.0, "density": 3.963, "ecdf": 0.243, "esf": 0.757}, {"trace": 1.09, "density": 4.039, "ecdf": 0.636, "esf": 0.364}, {"trace": 1.046, "density": 4.447, "ecdf": 0.444, "esf": 0.556}, {"trace": 1.085, "density": 4.125, "ecdf": 0.617, "esf": 0.383}, {"trace": 0.897, "density": 0.662, "ecdf": 0.02, "esf": 0.98}, {"trace": 1.175, "density": 1.84, "ecdf": 0.894, "esf": 0.106}, {"trace": 0.981, "density": 3.224, "ecdf": 0.175, "esf": 0.825}, {"trace": 0.97, "density": 2.828, "ecdf": 0.143, "esf": 0.857}, {"trace": 1.0, "density": 3.953, "ecdf": 0.241, "esf": 0.759}, {"trace": 0.976, "density": 3.031, "ecdf": 0.16, "esf": 0.84}, {"trace": 1.004, "density": 4.079, "ecdf": 0.258, "esf": 0.742}, {"trace": 1.117, "density": 3.486, "ecdf": 0.74, "esf": 0.259}, {"trace": 1.103, "density": 3.833, "ecdf": 0.687, "esf": 0.313}, {"trace": 0.989, "density": 3.531, "ecdf": 0.198, "esf": 0.802}, {"trace": 1.134, "density": 3.009, "ecdf": 0.794, "esf": 0.206}, {"trace": 1.175, "density": 1.84, "ecdf": 0.894, "esf": 0.106}, {"trace": 1.013, "density": 4.273, "ecdf": 0.3, "esf": 0.7}, {"trace": 0.934, "density": 1.696, "ecdf": 0.061, "esf": 0.939}, {"trace": 1.166, "density": 2.09, "ecdf": 0.878, "esf": 0.122}, {"trace": 0.965, "density": 2.667, "ecdf": 0.129, "esf": 0.871}, {"trace": 1.172, "density": 1.912, "ecdf": 0.89, "esf": 0.11}, {"trace": 0.956, "density": 2.373, "ecdf": 0.105, "esf": 0.895}, {"trace": 1.043, "density": 4.447, "ecdf": 0.431, "esf": 0.569}, {"trace": 1.045, "density": 4.447, "ecdf": 0.443, "esf": 0.557}, {"trace": 1.086, "density": 4.11, "ecdf": 0.619, "esf": 0.381}, {"trace": 1.199, "density": 1.298, "ecdf": 0.931, "esf": 0.069}, {"trace": 1.268, "density": 0.402, "ecdf": 0.982, "esf": 0.018}, {"trace": 1.198, "density": 1.325, "ecdf": 0.929, "esf": 0.071}, {"trace": 1.02, "density": 4.347, "ecdf": 0.33, "esf": 0.67}, {"trace": 1.1, "density": 3.873, "ecdf": 0.677, "esf": 0.323}, {"trace": 0.977, "density": 3.071, "ecdf": 0.164, "esf": 0.836}, {"trace": 1.076, "density": 4.246, "ecdf": 0.575, "esf": 0.425}, {"trace": 1.106, "density": 3.769, "ecdf": 0.699, "esf": 0.301}, {"trace": 0.896, "density": 0.646, "ecdf": 0.019, "esf": 0.981}, {"trace": 0.938, "density": 1.814, "ecdf": 0.069, "esf": 0.931}, {"trace": 1.205, "density": 1.188, "ecdf": 0.939, "esf": 0.061}, {"trace": 1.218, "density": 0.937, "ecdf": 0.953, "esf": 0.047}, {"trace": 1.068, "density": 4.328, "ecdf": 0.546, "esf": 0.454}, {"trace": 1.087, "density": 4.087, "ecdf": 0.625, "esf": 0.375}, {"trace": 0.969, "density": 2.774, "ecdf": 0.138, "esf": 0.862}, {"trace": 1.179, "density": 1.722, "ecdf": 0.902, "esf": 0.098}, {"trace": 1.161, "density": 2.24, "ecdf": 0.867, "esf": 0.133}, {"trace": 1.202, "density": 1.252, "ecdf": 0.934, "esf": 0.066}, {"trace": 0.94, "density": 1.891, "ecdf": 0.074, "esf": 0.926}, {"trace": 1.305, "density": 0.183, "ecdf": 0.992, "esf": 0.008}, {"trace": 1.194, "density": 1.397, "ecdf": 0.923, "esf": 0.077}, {"trace": 1.003, "density": 4.059, "ecdf": 0.254, "esf": 0.746}, {"trace": 1.054, "density": 4.429, "ecdf": 0.48, "esf": 0.52}, {"trace": 1.095, "density": 3.966, "ecdf": 0.655, "esf": 0.345}, {"trace": 1.059, "density": 4.403, "ecdf": 0.501, "esf": 0.499}, {"trace": 1.115, "density": 3.552, "ecdf": 0.732, "esf": 0.267}, {"trace": 0.942, "density": 1.951, "ecdf": 0.078, "esf": 0.922}, {"trace": 1.19, "density": 1.477, "ecdf": 0.917, "esf": 0.083}, {"trace": 0.918, "density": 1.188, "ecdf": 0.037, "esf": 0.963}, {"trace": 1.189, "density": 1.496, "ecdf": 0.916, "esf": 0.084}, {"trace": 1.092, "density": 4.011, "ecdf": 0.644, "esf": 0.356}, {"trace": 1.063, "density": 4.375, "ecdf": 0.522, "esf": 0.478}, {"trace": 1.021, "density": 4.355, "ecdf": 0.335, "esf": 0.665}, {"trace": 1.004, "density": 4.089, "ecdf": 0.26, "esf": 0.74}, {"trace": 0.919, "density": 1.212, "ecdf": 0.038, "esf": 0.962}, {"trace": 1.125, "density": 3.272, "ecdf": 0.768, "esf": 0.232}, {"trace": 1.129, "density": 3.156, "ecdf": 0.781, "esf": 0.219}, {"trace": 0.942, "density": 1.933, "ecdf": 0.077, "esf": 0.923}, {"trace": 0.913, "density": 1.012, "ecdf": 0.032, "esf": 0.968}, {"trace": 0.895, "density": 0.627, "ecdf": 0.019, "esf": 0.981}, {"trace": 1.029, "density": 4.403, "ecdf": 0.368, "esf": 0.632}, {"trace": 0.995, "density": 3.786, "ecdf": 0.219, "esf": 0.781}, {"trace": 1.115, "density": 3.56, "ecdf": 0.732, "esf": 0.268}, {"trace": 0.991, "density": 3.612, "ecdf": 0.205, "esf": 0.795}, {"trace": 1.112, "density": 3.633, "ecdf": 0.721, "esf": 0.279}, {"trace": 0.905, "density": 0.819, "ecdf": 0.026, "esf": 0.974}, {"trace": 1.255, "density": 0.502, "ecdf": 0.976, "esf": 0.024}, {"trace": 0.997, "density": 3.875, "ecdf": 0.231, "esf": 0.769}, {"trace": 1.076, "density": 4.235, "ecdf": 0.578, "esf": 0.422}, {"trace": 1.134, "density": 2.997, "ecdf": 0.795, "esf": 0.205}, {"trace": 0.979, "density": 3.136, "ecdf": 0.169, "esf": 0.831}, {"trace": 0.981, "density": 3.21, "ecdf": 0.174, "esf": 0.826}, {"trace": 1.047, "density": 4.446, "ecdf": 0.449, "esf": 0.551}, {"trace": 1.042, "density": 4.446, "ecdf": 0.426, "esf": 0.574}, {"trace": 1.032, "density": 4.418, "ecdf": 0.381, "esf": 0.619}, {"trace": 1.208, "density": 1.137, "ecdf": 0.942, "esf": 0.058}, {"trace": 1.263, "density": 0.442, "ecdf": 0.98, "esf": 0.02}, {"trace": 1.226, "density": 0.815, "ecdf": 0.958, "esf": 0.042}, {"trace": 1.065, "density": 4.361, "ecdf": 0.531, "esf": 0.469}, {"trace": 1.108, "density": 3.726, "ecdf": 0.705, "esf": 0.295}, {"trace": 1.083, "density": 4.146, "ecdf": 0.61, "esf": 0.39}, {"trace": 1.018, "density": 4.328, "ecdf": 0.322, "esf": 0.678}, {"trace": 1.016, "density": 4.308, "ecdf": 0.313, "esf": 0.687}, {"trace": 0.984, "density": 3.324, "ecdf": 0.182, "esf": 0.818}, {"trace": 1.073, "density": 4.277, "ecdf": 0.564, "esf": 0.436}, {"trace": 1.088, "density": 4.081, "ecdf": 0.626, "esf": 0.374}, {"trace": 1.169, "density": 2.001, "ecdf": 0.884, "esf": 0.116}, {"trace": 1.101, "density": 3.856, "ecdf": 0.681, "esf": 0.319}, {"trace": 1.151, "density": 2.513, "ecdf": 0.842, "esf": 0.158}, {"trace": 1.112, "density": 3.638, "ecdf": 0.72, "esf": 0.279}, {"trace": 1.079, "density": 4.198, "ecdf": 0.594, "esf": 0.406}, {"trace": 1.009, "density": 4.21, "ecdf": 0.283, "esf": 0.717}, {"trace": 1.208, "density": 1.127, "ecdf": 0.943, "esf": 0.057}, {"trace": 1.068, "density": 4.332, "ecdf": 0.545, "esf": 0.455}, {"trace": 0.998, "density": 3.883, "ecdf": 0.233, "esf": 0.767}, {"trace": 1.055, "density": 4.424, "ecdf": 0.484, "esf": 0.516}, {"trace": 1.257, "density": 0.483, "ecdf": 0.977, "esf": 0.023}, {"trace": 0.829, "density": 0.072, "ecdf": 0.001, "esf": 0.999}, {"trace": 1.007, "density": 4.153, "ecdf": 0.272, "esf": 0.728}, {"trace": 1.038, "density": 4.44, "ecdf": 0.413, "esf": 0.587}, {"trace": 1.148, "density": 2.604, "ecdf": 0.834, "esf": 0.166}, {"trace": 0.924, "density": 1.378, "ecdf": 0.044, "esf": 0.956}, {"trace": 1.122, "density": 3.366, "ecdf": 0.757, "esf": 0.243}, {"trace": 1.077, "density": 4.227, "ecdf": 0.582, "esf": 0.418}, {"trace": 1.033, "density": 4.424, "ecdf": 0.386, "esf": 0.614}, {"trace": 1.004, "density": 4.084, "ecdf": 0.259, "esf": 0.741}, {"trace": 1.159, "density": 2.297, "ecdf": 0.862, "esf": 0.138}, {"trace": 1.209, "density": 1.109, "ecdf": 0.944, "esf": 0.056}, {"trace": 1.195, "density": 1.375, "ecdf": 0.925, "esf": 0.075}, {"trace": 1.014, "density": 4.281, "ecdf": 0.304, "esf": 0.696}, {"trace": 1.04, "density": 4.444, "ecdf": 0.42, "esf": 0.58}, {"trace": 1.008, "density": 4.189, "ecdf": 0.28, "esf": 0.72}, {"trace": 0.932, "density": 1.642, "ecdf": 0.057, "esf": 0.943}, {"trace": 1.041, "density": 4.445, "ecdf": 0.424, "esf": 0.576}, {"trace": 0.984, "density": 3.348, "ecdf": 0.185, "esf": 0.815}, {"trace": 1.041, "density": 4.445, "ecdf": 0.423, "esf": 0.577}, {"trace": 1.103, "density": 3.822, "ecdf": 0.69, "esf": 0.31}, {"trace": 1.134, "density": 2.985, "ecdf": 0.796, "esf": 0.204}, {"trace": 1.037, "density": 4.435, "ecdf": 0.403, "esf": 0.597}, {"trace": 1.052, "density": 4.434, "ecdf": 0.474, "esf": 0.526}, {"trace": 1.026, "density": 4.386, "ecdf": 0.356, "esf": 0.644}, {"trace": 1.03, "density": 4.41, "ecdf": 0.373, "esf": 0.627}, {"trace": 1.006, "density": 4.139, "ecdf": 0.269, "esf": 0.731}, {"trace": 1.074, "density": 4.269, "ecdf": 0.567, "esf": 0.433}, {"trace": 1.112, "density": 3.628, "ecdf": 0.722, "esf": 0.278}, {"trace": 1.036, "density": 4.434, "ecdf": 0.401, "esf": 0.599}, {"trace": 1.138, "density": 2.868, "ecdf": 0.808, "esf": 0.192}, {"trace": 0.971, "density": 2.864, "ecdf": 0.147, "esf": 0.853}, {"trace": 0.971, "density": 2.864, "ecdf": 0.147, "esf": 0.853}, {"trace": 1.155, "density": 2.4, "ecdf": 0.853, "esf": 0.147}, {"trace": 1.175, "density": 1.824, "ecdf": 0.895, "esf": 0.105}, {"trace": 1.137, "density": 2.903, "ecdf": 0.805, "esf": 0.195}, {"trace": 1.119, "density": 3.449, "ecdf": 0.746, "esf": 0.254}, {"trace": 1.038, "density": 4.439, "ecdf": 0.41, "esf": 0.59}, {"trace": 0.969, "density": 2.801, "ecdf": 0.141, "esf": 0.859}, {"trace": 0.971, "density": 2.841, "ecdf": 0.144, "esf": 0.856}, {"trace": 1.175, "density": 1.831, "ecdf": 0.895, "esf": 0.105}, {"trace": 1.25, "density": 0.547, "ecdf": 0.974, "esf": 0.026}, {"trace": 0.945, "density": 2.036, "ecdf": 0.082, "esf": 0.918}, {"trace": 0.941, "density": 1.924, "ecdf": 0.076, "esf": 0.924}, {"trace": 1.108, "density": 3.726, "ecdf": 0.705, "esf": 0.295}, {"trace": 1.05, "density": 4.441, "ecdf": 0.463, "esf": 0.537}, {"trace": 1.062, "density": 4.382, "ecdf": 0.516, "esf": 0.484}, {"trace": 0.94, "density": 1.877, "ecdf": 0.074, "esf": 0.926}, {"trace": 1.256, "density": 0.495, "ecdf": 0.976, "esf": 0.024}, {"trace": 0.902, "density": 0.756, "ecdf": 0.024, "esf": 0.976}, {"trace": 1.283, "density": 0.289, "ecdf": 0.987, "esf": 0.013}, {"trace": 1.322, "density": 0.123, "ecdf": 0.995, "esf": 0.005}, {"trace": 0.919, "density": 1.2, "ecdf": 0.038, "esf": 0.962}, {"trace": 1.02, "density": 4.345, "ecdf": 0.329, "esf": 0.671}, {"trace": 1.065, "density": 4.355, "ecdf": 0.534, "esf": 0.466}, {"trace": 1.069, "density": 4.323, "ecdf": 0.548, "esf": 0.452}, {"trace": 1.141, "density": 2.784, "ecdf": 0.816, "esf": 0.184}, {"trace": 1.07, "density": 4.315, "ecdf": 0.55, "esf": 0.45}, {"trace": 0.997, "density": 3.876, "ecdf": 0.232, "esf": 0.768}, {"trace": 1.126, "density": 3.231, "ecdf": 0.772, "esf": 0.228}, {"trace": 1.151, "density": 2.52, "ecdf": 0.841, "esf": 0.159}, {"trace": 1.035, "density": 4.43, "ecdf": 0.396, "esf": 0.604}, {"trace": 0.984, "density": 3.313, "ecdf": 0.181, "esf": 0.819}, {"trace": 0.788, "density": 0.014, "ecdf": 0.0, "esf": 1.0}, {"trace": 0.802, "density": 0.026, "ecdf": 0.0, "esf": 1.0}, {"trace": 1.096, "density": 3.944, "ecdf": 0.662, "esf": 0.338}, {"trace": 1.091, "density": 4.025, "ecdf": 0.638, "esf": 0.362}, {"trace": 1.038, "density": 4.44, "ecdf": 0.413, "esf": 0.587}, {"trace": 1.036, "density": 4.432, "ecdf": 0.398, "esf": 0.602}, {"trace": 1.103, "density": 3.828, "ecdf": 0.688, "esf": 0.312}, {"trace": 1.078, "density": 4.21, "ecdf": 0.588, "esf": 0.412}, {"trace": 0.9, "density": 0.713, "ecdf": 0.022, "esf": 0.978}, {"trace": 1.181, "density": 1.681, "ecdf": 0.905, "esf": 0.095}, {"trace": 0.971, "density": 2.859, "ecdf": 0.146, "esf": 0.854}, {"trace": 1.203, "density": 1.233, "ecdf": 0.936, "esf": 0.064}, {"trace": 0.955, "density": 2.339, "ecdf": 0.102, "esf": 0.898}, {"trace": 1.038, "density": 4.438, "ecdf": 0.409, "esf": 0.591}, {"trace": 1.123, "density": 3.321, "ecdf": 0.762, "esf": 0.238}, {"trace": 0.936, "density": 1.751, "ecdf": 0.064, "esf": 0.936}, {"trace": 1.109, "density": 3.693, "ecdf": 0.712, "esf": 0.288}, {"trace": 1.006, "density": 4.146, "ecdf": 0.27, "esf": 0.73}, {"trace": 1.095, "density": 3.964, "ecdf": 0.656, "esf": 0.344}, {"trace": 1.204, "density": 1.204, "ecdf": 0.938, "esf": 0.062}, {"trace": 1.013, "density": 4.275, "ecdf": 0.301, "esf": 0.699}, {"trace": 1.134, "density": 2.985, "ecdf": 0.797, "esf": 0.203}, {"trace": 1.175, "density": 1.825, "ecdf": 0.895, "esf": 0.105}, {"trace": 1.153, "density": 2.477, "ecdf": 0.845, "esf": 0.155}, {"trace": 1.092, "density": 4.016, "ecdf": 0.642, "esf": 0.358}, {"trace": 1.099, "density": 3.905, "ecdf": 0.67, "esf": 0.33}, {"trace": 1.27, "density": 0.382, "ecdf": 0.984, "esf": 0.016}, {"trace": 0.867, "density": 0.308, "ecdf": 0.007, "esf": 0.993}, {"trace": 1.079, "density": 4.208, "ecdf": 0.589, "esf": 0.411}, {"trace": 0.995, "density": 3.8, "ecdf": 0.221, "esf": 0.779}, {"trace": 0.953, "density": 2.292, "ecdf": 0.099, "esf": 0.901}, {"trace": 1.145, "density": 2.689, "ecdf": 0.826, "esf": 0.174}, {"trace": 0.999, "density": 3.922, "ecdf": 0.238, "esf": 0.762}, {"trace": 0.941, "density": 1.921, "ecdf": 0.076, "esf": 0.924}, {"trace": 0.973, "density": 2.917, "ecdf": 0.15, "esf": 0.85}, {"trace": 1.014, "density": 4.29, "ecdf": 0.307, "esf": 0.693}, {"trace": 0.991, "density": 3.617, "ecdf": 0.205, "esf": 0.795}, {"trace": 1.156, "density": 2.393, "ecdf": 0.854, "esf": 0.146}, {"trace": 1.148, "density": 2.596, "ecdf": 0.835, "esf": 0.165}, {"trace": 0.953, "density": 2.291, "ecdf": 0.099, "esf": 0.901}, {"trace": 1.017, "density": 4.318, "ecdf": 0.318, "esf": 0.682}, {"trace": 1.145, "density": 2.672, "ecdf": 0.827, "esf": 0.173}, {"trace": 0.945, "density": 2.044, "ecdf": 0.082, "esf": 0.918}, {"trace": 1.097, "density": 3.926, "ecdf": 0.666, "esf": 0.334}, {"trace": 1.112, "density": 3.624, "ecdf": 0.722, "esf": 0.278}, {"trace": 1.075, "density": 4.26, "ecdf": 0.571, "esf": 0.429}, {"trace": 1.127, "density": 3.208, "ecdf": 0.775, "esf": 0.225}, {"trace": 0.953, "density": 2.273, "ecdf": 0.098, "esf": 0.902}, {"trace": 1.095, "density": 3.97, "ecdf": 0.654, "esf": 0.346}, {"trace": 0.996, "density": 3.814, "ecdf": 0.224, "esf": 0.776}, {"trace": 1.144, "density": 2.713, "ecdf": 0.823, "esf": 0.177}, {"trace": 1.143, "density": 2.741, "ecdf": 0.82, "esf": 0.18}, {"trace": 1.01, "density": 4.217, "ecdf": 0.285, "esf": 0.715}, {"trace": 1.161, "density": 2.225, "ecdf": 0.868, "esf": 0.132}, {"trace": 1.159, "density": 2.303, "ecdf": 0.862, "esf": 0.138}, {"trace": 1.201, "density": 1.272, "ecdf": 0.933, "esf": 0.067}, {"trace": 1.201, "density": 1.272, "ecdf": 0.933, "esf": 0.067}, {"trace": 0.974, "density": 2.958, "ecdf": 0.155, "esf": 0.845}, {"trace": 1.114, "density": 3.574, "ecdf": 0.73, "esf": 0.27}, {"trace": 1.057, "density": 4.413, "ecdf": 0.494, "esf": 0.506}, {"trace": 1.078, "density": 4.211, "ecdf": 0.587, "esf": 0.413}, {"trace": 1.074, "density": 4.27, "ecdf": 0.567, "esf": 0.433}, {"trace": 0.977, "density": 3.051, "ecdf": 0.163, "esf": 0.837}, {"trace": 0.996, "density": 3.816, "ecdf": 0.224, "esf": 0.776}, {"trace": 0.995, "density": 3.776, "ecdf": 0.218, "esf": 0.782}, {"trace": 1.124, "density": 3.294, "ecdf": 0.765, "esf": 0.235}, {"trace": 1.008, "density": 4.191, "ecdf": 0.28, "esf": 0.72}, {"trace": 1.017, "density": 4.324, "ecdf": 0.32, "esf": 0.68}, {"trace": 0.962, "density": 2.571, "ecdf": 0.12, "esf": 0.88}, {"trace": 1.057, "density": 4.412, "ecdf": 0.496, "esf": 0.504}, {"trace": 1.084, "density": 4.137, "ecdf": 0.613, "esf": 0.387}, {"trace": 1.045, "density": 4.448, "ecdf": 0.438, "esf": 0.562}, {"trace": 1.104, "density": 3.808, "ecdf": 0.693, "esf": 0.307}, {"trace": 1.022, "density": 4.364, "ecdf": 0.341, "esf": 0.659}, {"trace": 1.047, "density": 4.446, "ecdf": 0.449, "esf": 0.551}, {"trace": 1.05, "density": 4.44, "ecdf": 0.465, "esf": 0.534}, {"trace": 1.069, "density": 4.32, "ecdf": 0.549, "esf": 0.451}, {"trace": 1.182, "density": 1.652, "ecdf": 0.907, "esf": 0.093}, {"trace": 0.967, "density": 2.73, "ecdf": 0.135, "esf": 0.865}, {"trace": 1.076, "density": 4.235, "ecdf": 0.578, "esf": 0.422}, {"trace": 1.188, "density": 1.514, "ecdf": 0.915, "esf": 0.085}, {"trace": 0.987, "density": 3.444, "ecdf": 0.193, "esf": 0.807}, {"trace": 0.982, "density": 3.263, "ecdf": 0.178, "esf": 0.822}, {"trace": 1.045, "density": 4.448, "ecdf": 0.441, "esf": 0.559}, {"trace": 1.088, "density": 4.079, "ecdf": 0.627, "esf": 0.373}, {"trace": 1.156, "density": 2.393, "ecdf": 0.854, "esf": 0.146}, {"trace": 0.977, "density": 3.071, "ecdf": 0.164, "esf": 0.836}, {"trace": 0.914, "density": 1.056, "ecdf": 0.033, "esf": 0.967}, {"trace": 1.102, "density": 3.834, "ecdf": 0.687, "esf": 0.313}, {"trace": 1.006, "density": 4.141, "ecdf": 0.269, "esf": 0.731}, {"trace": 1.042, "density": 4.446, "ecdf": 0.427, "esf": 0.573}, {"trace": 1.057, "density": 4.411, "ecdf": 0.497, "esf": 0.503}, {"trace": 1.202, "density": 1.241, "ecdf": 0.935, "esf": 0.065}, {"trace": 0.941, "density": 1.911, "ecdf": 0.075, "esf": 0.925}, {"trace": 1.112, "density": 3.636, "ecdf": 0.721, "esf": 0.279}, {"trace": 1.197, "density": 1.341, "ecdf": 0.927, "esf": 0.073}, {"trace": 1.008, "density": 4.18, "ecdf": 0.278, "esf": 0.722}, {"trace": 1.074, "density": 4.264, "ecdf": 0.569, "esf": 0.431}, {"trace": 0.937, "density": 1.785, "ecdf": 0.067, "esf": 0.933}, {"trace": 0.985, "density": 3.357, "ecdf": 0.185, "esf": 0.815}, {"trace": 1.013, "density": 4.274, "ecdf": 0.301, "esf": 0.699}, {"trace": 0.932, "density": 1.638, "ecdf": 0.057, "esf": 0.943}, {"trace": 1.103, "density": 3.83, "ecdf": 0.688, "esf": 0.312}, {"trace": 0.993, "density": 3.691, "ecdf": 0.212, "esf": 0.788}, {"trace": 1.165, "density": 2.116, "ecdf": 0.876, "esf": 0.124}, {"trace": 1.013, "density": 4.273, "ecdf": 0.3, "esf": 0.7}, {"trace": 1.135, "density": 2.981, "ecdf": 0.797, "esf": 0.203}, {"trace": 1.041, "density": 4.446, "ecdf": 0.425, "esf": 0.575}, {"trace": 1.065, "density": 4.361, "ecdf": 0.531, "esf": 0.469}, {"trace": 1.096, "density": 3.948, "ecdf": 0.66, "esf": 0.34}, {"trace": 1.049, "density": 4.442, "ecdf": 0.461, "esf": 0.539}, {"trace": 1.104, "density": 3.814, "ecdf": 0.691, "esf": 0.309}, {"trace": 1.06, "density": 4.396, "ecdf": 0.507, "esf": 0.493}, {"trace": 1.09, "density": 4.045, "ecdf": 0.634, "esf": 0.366}, {"trace": 1.047, "density": 4.446, "ecdf": 0.451, "esf": 0.549}, {"trace": 1.258, "density": 0.478, "ecdf": 0.977, "esf": 0.023}, {"trace": 0.963, "density": 2.61, "ecdf": 0.124, "esf": 0.876}, {"trace": 1.002, "density": 4.038, "ecdf": 0.252, "esf": 0.748}, {"trace": 1.054, "density": 4.427, "ecdf": 0.481, "esf": 0.519}, {"trace": 1.062, "density": 4.379, "ecdf": 0.519, "esf": 0.481}, {"trace": 0.943, "density": 1.962, "ecdf": 0.078, "esf": 0.922}, {"trace": 1.135, "density": 2.976, "ecdf": 0.798, "esf": 0.202}, {"trace": 0.888, "density": 0.53, "ecdf": 0.016, "esf": 0.984}, {"trace": 0.939, "density": 1.867, "ecdf": 0.073, "esf": 0.927}, {"trace": 0.909, "density": 0.907, "ecdf": 0.029, "esf": 0.971}, {"trace": 1.206, "density": 1.177, "ecdf": 0.94, "esf": 0.06}, {"trace": 1.034, "density": 4.427, "ecdf": 0.391, "esf": 0.609}, {"trace": 1.11, "density": 3.678, "ecdf": 0.714, "esf": 0.286}, {"trace": 1.098, "density": 3.92, "ecdf": 0.667, "esf": 0.333}, {"trace": 1.005, "density": 4.12, "ecdf": 0.265, "esf": 0.735}, {"trace": 1.085, "density": 4.115, "ecdf": 0.618, "esf": 0.382}, {"trace": 1.095, "density": 3.961, "ecdf": 0.656, "esf": 0.344}, {"trace": 0.977, "density": 3.077, "ecdf": 0.165, "esf": 0.835}, {"trace": 1.065, "density": 4.36, "ecdf": 0.532, "esf": 0.468}, {"trace": 1.066, "density": 4.351, "ecdf": 0.536, "esf": 0.464}, {"trace": 1.092, "density": 4.012, "ecdf": 0.643, "esf": 0.357}, {"trace": 1.021, "density": 4.352, "ecdf": 0.333, "esf": 0.667}, {"trace": 1.157, "density": 2.367, "ecdf": 0.856, "esf": 0.143}, {"trace": 1.041, "density": 4.446, "ecdf": 0.424, "esf": 0.576}, {"trace": 1.111, "density": 3.646, "ecdf": 0.719, "esf": 0.281}, {"trace": 1.101, "density": 3.864, "ecdf": 0.679, "esf": 0.321}, {"trace": 1.098, "density": 3.91, "ecdf": 0.669, "esf": 0.331}, {"trace": 1.06, "density": 4.393, "ecdf": 0.509, "esf": 0.491}, {"trace": 1.026, "density": 4.388, "ecdf": 0.358, "esf": 0.642}, {"trace": 1.174, "density": 1.872, "ecdf": 0.892, "esf": 0.108}, {"trace": 1.078, "density": 4.221, "ecdf": 0.584, "esf": 0.416}, {"trace": 0.949, "density": 2.151, "ecdf": 0.088, "esf": 0.912}, {"trace": 1.239, "density": 0.649, "ecdf": 0.968, "esf": 0.032}, {"trace": 0.932, "density": 1.631, "ecdf": 0.056, "esf": 0.944}, {"trace": 0.948, "density": 2.121, "ecdf": 0.086, "esf": 0.914}, {"trace": 1.02, "density": 4.346, "ecdf": 0.33, "esf": 0.67}, {"trace": 1.056, "density": 4.418, "ecdf": 0.489, "esf": 0.511}, {"trace": 1.146, "density": 2.659, "ecdf": 0.828, "esf": 0.172}, {"trace": 0.988, "density": 3.505, "ecdf": 0.196, "esf": 0.804}, {"trace": 1.011, "density": 4.242, "ecdf": 0.291, "esf": 0.709}, {"trace": 0.986, "density": 3.41, "ecdf": 0.19, "esf": 0.81}, {"trace": 1.146, "density": 2.666, "ecdf": 0.828, "esf": 0.172}, {"trace": 1.004, "density": 4.074, "ecdf": 0.256, "esf": 0.744}, {"trace": 0.931, "density": 1.611, "ecdf": 0.054, "esf": 0.946}, {"trace": 1.138, "density": 2.87, "ecdf": 0.808, "esf": 0.192}, {"trace": 1.167, "density": 2.074, "ecdf": 0.878, "esf": 0.122}, {"trace": 1.34, "density": 0.087, "ecdf": 0.996, "esf": 0.004}, {"trace": 1.09, "density": 4.047, "ecdf": 0.633, "esf": 0.367}, {"trace": 1.064, "density": 4.368, "ecdf": 0.525, "esf": 0.475}, {"trace": 1.055, "density": 4.423, "ecdf": 0.485, "esf": 0.515}, {"trace": 1.192, "density": 1.433, "ecdf": 0.919, "esf": 0.081}, {"trace": 1.038, "density": 4.439, "ecdf": 0.411, "esf": 0.589}, {"trace": 1.144, "density": 2.724, "ecdf": 0.822, "esf": 0.178}, {"trace": 0.96, "density": 2.487, "ecdf": 0.113, "esf": 0.887}, {"trace": 0.958, "density": 2.449, "ecdf": 0.11, "esf": 0.89}, {"trace": 0.932, "density": 1.633, "ecdf": 0.057, "esf": 0.943}, {"trace": 0.961, "density": 2.53, "ecdf": 0.116, "esf": 0.884}, {"trace": 0.956, "density": 2.387, "ecdf": 0.105, "esf": 0.895}, {"trace": 1.168, "density": 2.042, "ecdf": 0.881, "esf": 0.119}, {"trace": 1.201, "density": 1.266, "ecdf": 0.933, "esf": 0.067}, {"trace": 1.066, "density": 4.35, "ecdf": 0.536, "esf": 0.464}, {"trace": 1.084, "density": 4.131, "ecdf": 0.615, "esf": 0.385}, {"trace": 1.06, "density": 4.393, "ecdf": 0.509, "esf": 0.491}, {"trace": 1.057, "density": 4.412, "ecdf": 0.495, "esf": 0.505}, {"trace": 1.109, "density": 3.695, "ecdf": 0.712, "esf": 0.288}, {"trace": 1.012, "density": 4.258, "ecdf": 0.295, "esf": 0.705}, {"trace": 0.956, "density": 2.366, "ecdf": 0.104, "esf": 0.896}, {"trace": 1.079, "density": 4.208, "ecdf": 0.589, "esf": 0.411}, {"trace": 1.059, "density": 4.4, "ecdf": 0.504, "esf": 0.496}, {"trace": 1.129, "density": 3.134, "ecdf": 0.783, "esf": 0.217}, {"trace": 1.016, "density": 4.311, "ecdf": 0.314, "esf": 0.686}, {"trace": 1.046, "density": 4.447, "ecdf": 0.446, "esf": 0.554}, {"trace": 1.043, "density": 4.447, "ecdf": 0.433, "esf": 0.567}, {"trace": 0.952, "density": 2.246, "ecdf": 0.096, "esf": 0.904}, {"trace": 1.122, "density": 3.37, "ecdf": 0.756, "esf": 0.244}, {"trace": 1.124, "density": 3.308, "ecdf": 0.763, "esf": 0.237}, {"trace": 1.011, "density": 4.244, "ecdf": 0.292, "esf": 0.708}, {"trace": 1.059, "density": 4.4, "ecdf": 0.504, "esf": 0.496}, {"trace": 1.117, "density": 3.502, "ecdf": 0.739, "esf": 0.261}, {"trace": 0.862, "density": 0.26, "ecdf": 0.005, "esf": 0.995}, {"trace": 1.097, "density": 3.928, "ecdf": 0.665, "esf": 0.335}, {"trace": 1.186, "density": 1.547, "ecdf": 0.913, "esf": 0.087}, {"trace": 0.9, "density": 0.714, "ecdf": 0.022, "esf": 0.978}, {"trace": 1.253, "density": 0.519, "ecdf": 0.975, "esf": 0.025}, {"trace": 1.009, "density": 4.204, "ecdf": 0.282, "esf": 0.718}, {"trace": 1.043, "density": 4.447, "ecdf": 0.434, "esf": 0.566}, {"trace": 1.019, "density": 4.34, "ecdf": 0.326, "esf": 0.674}, {"trace": 1.15, "density": 2.561, "ecdf": 0.838, "esf": 0.162}, {"trace": 0.975, "density": 2.99, "ecdf": 0.157, "esf": 0.843}, {"trace": 1.072, "density": 4.287, "ecdf": 0.56, "esf": 0.44}, {"trace": 1.067, "density": 4.338, "ecdf": 0.54, "esf": 0.46}, {"trace": 1.056, "density": 4.418, "ecdf": 0.49, "esf": 0.51}, {"trace": 1.061, "density": 4.389, "ecdf": 0.511, "esf": 0.489}, {"trace": 1.093, "density": 3.992, "ecdf": 0.649, "esf": 0.351}, {"trace": 0.98, "density": 3.163, "ecdf": 0.17, "esf": 0.83}, {"trace": 1.077, "density": 4.228, "ecdf": 0.581, "esf": 0.419}, {"trace": 1.077, "density": 4.228, "ecdf": 0.581, "esf": 0.419}, {"trace": 0.921, "density": 1.277, "ecdf": 0.04, "esf": 0.96}, {"trace": 1.12, "density": 3.404, "ecdf": 0.752, "esf": 0.248}, {"trace": 0.998, "density": 3.885, "ecdf": 0.233, "esf": 0.767}, {"trace": 1.151, "density": 2.534, "ecdf": 0.84, "esf": 0.16}, {"trace": 1.034, "density": 4.426, "ecdf": 0.389, "esf": 0.611}, {"trace": 1.025, "density": 4.383, "ecdf": 0.354, "esf": 0.646}, {"trace": 0.935, "density": 1.736, "ecdf": 0.064, "esf": 0.936}, {"trace": 1.013, "density": 4.267, "ecdf": 0.298, "esf": 0.702}, {"trace": 1.031, "density": 4.414, "ecdf": 0.377, "esf": 0.623}, {"trace": 1.216, "density": 0.973, "ecdf": 0.951, "esf": 0.049}, {"trace": 1.032, "density": 4.419, "ecdf": 0.382, "esf": 0.618}, {"trace": 1.09, "density": 4.04, "ecdf": 0.635, "esf": 0.365}, {"trace": 1.121, "density": 3.375, "ecdf": 0.755, "esf": 0.245}, {"trace": 1.19, "density": 1.471, "ecdf": 0.918, "esf": 0.082}, {"trace": 1.203, "density": 1.225, "ecdf": 0.937, "esf": 0.063}, {"trace": 1.217, "density": 0.963, "ecdf": 0.951, "esf": 0.049}, {"trace": 1.083, "density": 4.15, "ecdf": 0.61, "esf": 0.39}, {"trace": 1.174, "density": 1.861, "ecdf": 0.893, "esf": 0.107}, {"trace": 1.085, "density": 4.119, "ecdf": 0.617, "esf": 0.383}, {"trace": 1.123, "density": 3.333, "ecdf": 0.76, "esf": 0.24}, {"trace": 1.073, "density": 4.277, "ecdf": 0.564, "esf": 0.436}, {"trace": 1.068, "density": 4.327, "ecdf": 0.547, "esf": 0.453}, {"trace": 1.111, "density": 3.647, "ecdf": 0.719, "esf": 0.281}, {"trace": 1.142, "density": 2.754, "ecdf": 0.819, "esf": 0.181}, {"trace": 1.238, "density": 0.658, "ecdf": 0.967, "esf": 0.033}, {"trace": 0.936, "density": 1.772, "ecdf": 0.066, "esf": 0.934}, {"trace": 0.999, "density": 3.946, "ecdf": 0.241, "esf": 0.759}, {"trace": 1.021, "density": 4.356, "ecdf": 0.336, "esf": 0.664}, {"trace": 1.099, "density": 3.897, "ecdf": 0.671, "esf": 0.329}, {"trace": 1.049, "density": 4.443, "ecdf": 0.459, "esf": 0.541}, {"trace": 1.11, "density": 3.675, "ecdf": 0.715, "esf": 0.285}, {"trace": 1.018, "density": 4.332, "ecdf": 0.324, "esf": 0.676}, {"trace": 1.078, "density": 4.211, "ecdf": 0.587, "esf": 0.413}, {"trace": 1.047, "density": 4.446, "ecdf": 0.451, "esf": 0.549}, {"trace": 1.046, "density": 4.447, "ecdf": 0.447, "esf": 0.553}, {"trace": 1.084, "density": 4.137, "ecdf": 0.612, "esf": 0.387}, {"trace": 1.045, "density": 4.448, "ecdf": 0.44, "esf": 0.56}, {"trace": 1.021, "density": 4.353, "ecdf": 0.334, "esf": 0.666}, {"trace": 1.054, "density": 4.426, "ecdf": 0.482, "esf": 0.518}, {"trace": 1.081, "density": 4.177, "ecdf": 0.6, "esf": 0.4}, {"trace": 1.101, "density": 3.854, "ecdf": 0.682, "esf": 0.318}, {"trace": 0.979, "density": 3.136, "ecdf": 0.169, "esf": 0.831}, {"trace": 0.923, "density": 1.336, "ecdf": 0.042, "esf": 0.958}, {"trace": 1.182, "density": 1.637, "ecdf": 0.908, "esf": 0.092}, {"trace": 0.943, "density": 1.988, "ecdf": 0.079, "esf": 0.921}, {"trace": 1.146, "density": 2.65, "ecdf": 0.83, "esf": 0.17}, {"trace": 1.138, "density": 2.889, "ecdf": 0.806, "esf": 0.194}, {"trace": 1.048, "density": 4.444, "ecdf": 0.456, "esf": 0.544}, {"trace": 1.128, "density": 3.173, "ecdf": 0.779, "esf": 0.221}, {"trace": 1.108, "density": 3.723, "ecdf": 0.706, "esf": 0.294}, {"trace": 1.038, "density": 4.438, "ecdf": 0.409, "esf": 0.591}, {"trace": 0.956, "density": 2.375, "ecdf": 0.105, "esf": 0.895}, {"trace": 1.007, "density": 4.153, "ecdf": 0.272, "esf": 0.728}, {"trace": 0.957, "density": 2.397, "ecdf": 0.106, "esf": 0.894}, {"trace": 0.979, "density": 3.133, "ecdf": 0.169, "esf": 0.831}, {"trace": 1.011, "density": 4.239, "ecdf": 0.291, "esf": 0.709}, {"trace": 0.991, "density": 3.601, "ecdf": 0.204, "esf": 0.796}, {"trace": 1.028, "density": 4.396, "ecdf": 0.364, "esf": 0.636}, {"trace": 1.184, "density": 1.595, "ecdf": 0.911, "esf": 0.089}, {"trace": 0.987, "density": 3.434, "ecdf": 0.191, "esf": 0.809}, {"trace": 1.139, "density": 2.854, "ecdf": 0.81, "esf": 0.19}, {"trace": 0.984, "density": 3.328, "ecdf": 0.182, "esf": 0.818}, {"trace": 1.091, "density": 4.022, "ecdf": 0.64, "esf": 0.36}, {"trace": 1.197, "density": 1.338, "ecdf": 0.927, "esf": 0.073}, {"trace": 0.971, "density": 2.855, "ecdf": 0.146, "esf": 0.854}, {"trace": 1.092, "density": 4.009, "ecdf": 0.644, "esf": 0.356}, {"trace": 0.895, "density": 0.629, "ecdf": 0.019, "esf": 0.981}, {"trace": 1.15, "density": 2.535, "ecdf": 0.84, "esf": 0.16}, {"trace": 0.949, "density": 2.158, "ecdf": 0.088, "esf": 0.912}, {"trace": 1.214, "density": 1.025, "ecdf": 0.948, "esf": 0.052}, {"trace": 1.059, "density": 4.401, "ecdf": 0.502, "esf": 0.498}, {"trace": 0.97, "density": 2.824, "ecdf": 0.143, "esf": 0.857}, {"trace": 1.013, "density": 4.269, "ecdf": 0.298, "esf": 0.702}, {"trace": 1.0, "density": 3.963, "ecdf": 0.242, "esf": 0.758}, {"trace": 1.027, "density": 4.394, "ecdf": 0.362, "esf": 0.638}, {"trace": 0.82, "density": 0.05, "ecdf": 0.001, "esf": 0.999}, {"trace": 1.063, "density": 4.376, "ecdf": 0.52, "esf": 0.48}, {"trace": 1.1, "density": 3.887, "ecdf": 0.674, "esf": 0.326}, {"trace": 1.019, "density": 4.335, "ecdf": 0.324, "esf": 0.676}, {"trace": 1.004, "density": 4.081, "ecdf": 0.258, "esf": 0.742}, {"trace": 1.055, "density": 4.424, "ecdf": 0.484, "esf": 0.516}, {"trace": 1.065, "density": 4.361, "ecdf": 0.531, "esf": 0.469}, {"trace": 1.058, "density": 4.408, "ecdf": 0.498, "esf": 0.502}, {"trace": 1.042, "density": 4.446, "ecdf": 0.428, "esf": 0.572}, {"trace": 1.021, "density": 4.356, "ecdf": 0.337, "esf": 0.663}, {"trace": 1.068, "density": 4.329, "ecdf": 0.546, "esf": 0.454}, {"trace": 1.073, "density": 4.275, "ecdf": 0.565, "esf": 0.435}, {"trace": 1.068, "density": 4.33, "ecdf": 0.545, "esf": 0.455}, {"trace": 1.068, "density": 4.33, "ecdf": 0.545, "esf": 0.455}, {"trace": 0.967, "density": 2.737, "ecdf": 0.136, "esf": 0.864}, {"trace": 1.072, "density": 4.288, "ecdf": 0.56, "esf": 0.44}, {"trace": 0.948, "density": 2.112, "ecdf": 0.086, "esf": 0.914}, {"trace": 1.059, "density": 4.401, "ecdf": 0.503, "esf": 0.497}, {"trace": 1.044, "density": 4.448, "ecdf": 0.436, "esf": 0.564}, {"trace": 1.12, "density": 3.41, "ecdf": 0.751, "esf": 0.249}, {"trace": 1.106, "density": 3.77, "ecdf": 0.699, "esf": 0.301}, {"trace": 1.017, "density": 4.317, "ecdf": 0.318, "esf": 0.682}, {"trace": 1.146, "density": 2.668, "ecdf": 0.828, "esf": 0.172}, {"trace": 1.137, "density": 2.911, "ecdf": 0.804, "esf": 0.196}, {"trace": 0.958, "density": 2.438, "ecdf": 0.109, "esf": 0.891}, {"trace": 1.16, "density": 2.263, "ecdf": 0.865, "esf": 0.135}, {"trace": 1.146, "density": 2.662, "ecdf": 0.828, "esf": 0.172}, {"trace": 1.041, "density": 4.446, "ecdf": 0.425, "esf": 0.575}, {"trace": 1.031, "density": 4.412, "ecdf": 0.375, "esf": 0.625}, {"trace": 1.097, "density": 3.937, "ecdf": 0.664, "esf": 0.336}, {"trace": 1.142, "density": 2.753, "ecdf": 0.819, "esf": 0.181}, {"trace": 1.095, "density": 3.962, "ecdf": 0.656, "esf": 0.344}, {"trace": 1.028, "density": 4.399, "ecdf": 0.365, "esf": 0.635}, {"trace": 1.215, "density": 1.004, "ecdf": 0.95, "esf": 0.05}, {"trace": 1.105, "density": 3.793, "ecdf": 0.695, "esf": 0.305}, {"trace": 0.992, "density": 3.656, "ecdf": 0.21, "esf": 0.79}, {"trace": 1.11, "density": 3.671, "ecdf": 0.716, "esf": 0.284}, {"trace": 0.984, "density": 3.338, "ecdf": 0.183, "esf": 0.817}, {"trace": 1.021, "density": 4.353, "ecdf": 0.334, "esf": 0.666}, {"trace": 0.933, "density": 1.676, "ecdf": 0.059, "esf": 0.941}, {"trace": 1.031, "density": 4.413, "ecdf": 0.376, "esf": 0.624}, {"trace": 1.027, "density": 4.393, "ecdf": 0.361, "esf": 0.639}, {"trace": 1.128, "density": 3.188, "ecdf": 0.777, "esf": 0.223}, {"trace": 1.112, "density": 3.622, "ecdf": 0.723, "esf": 0.277}, {"trace": 1.152, "density": 2.505, "ecdf": 0.843, "esf": 0.157}, {"trace": 1.299, "density": 0.21, "ecdf": 0.99, "esf": 0.009}, {"trace": 1.149, "density": 2.583, "ecdf": 0.836, "esf": 0.164}, {"trace": 0.997, "density": 3.876, "ecdf": 0.231, "esf": 0.768}, {"trace": 0.95, "density": 2.193, "ecdf": 0.091, "esf": 0.909}, {"trace": 1.136, "density": 2.933, "ecdf": 0.802, "esf": 0.198}, {"trace": 1.124, "density": 3.289, "ecdf": 0.766, "esf": 0.234}, {"trace": 1.046, "density": 4.447, "ecdf": 0.447, "esf": 0.553}, {"trace": 1.062, "density": 4.381, "ecdf": 0.517, "esf": 0.483}, {"trace": 1.034, "density": 4.428, "ecdf": 0.392, "esf": 0.608}, {"trace": 0.899, "density": 0.702, "ecdf": 0.022, "esf": 0.978}, {"trace": 0.885, "density": 0.501, "ecdf": 0.015, "esf": 0.985}, {"trace": 1.109, "density": 3.7, "ecdf": 0.711, "esf": 0.289}, {"trace": 1.114, "density": 3.577, "ecdf": 0.729, "esf": 0.271}, {"trace": 1.005, "density": 4.11, "ecdf": 0.263, "esf": 0.737}, {"trace": 0.898, "density": 0.681, "ecdf": 0.02, "esf": 0.98}, {"trace": 1.061, "density": 4.389, "ecdf": 0.511, "esf": 0.489}, {"trace": 0.994, "density": 3.742, "ecdf": 0.216, "esf": 0.784}, {"trace": 1.049, "density": 4.443, "ecdf": 0.458, "esf": 0.542}, {"trace": 0.99, "density": 3.577, "ecdf": 0.202, "esf": 0.798}, {"trace": 1.052, "density": 4.434, "ecdf": 0.475, "esf": 0.525}, {"trace": 1.05, "density": 4.441, "ecdf": 0.462, "esf": 0.538}, {"trace": 1.082, "density": 4.158, "ecdf": 0.607, "esf": 0.393}, {"trace": 1.09, "density": 4.046, "ecdf": 0.634, "esf": 0.366}, {"trace": 0.928, "density": 1.498, "ecdf": 0.048, "esf": 0.952}, {"trace": 1.105, "density": 3.784, "ecdf": 0.697, "esf": 0.303}, {"trace": 1.067, "density": 4.34, "ecdf": 0.54, "esf": 0.46}, {"trace": 1.007, "density": 4.167, "ecdf": 0.276, "esf": 0.724}, {"trace": 1.156, "density": 2.392, "ecdf": 0.854, "esf": 0.146}, {"trace": 1.105, "density": 3.792, "ecdf": 0.696, "esf": 0.304}, {"trace": 1.077, "density": 4.232, "ecdf": 0.58, "esf": 0.42}, {"trace": 0.92, "density": 1.229, "ecdf": 0.039, "esf": 0.961}, {"trace": 0.969, "density": 2.778, "ecdf": 0.138, "esf": 0.862}, {"trace": 1.013, "density": 4.272, "ecdf": 0.3, "esf": 0.7}, {"trace": 1.131, "density": 3.089, "ecdf": 0.788, "esf": 0.212}, {"trace": 1.064, "density": 4.37, "ecdf": 0.524, "esf": 0.476}, {"trace": 1.034, "density": 4.427, "ecdf": 0.39, "esf": 0.61}, {"trace": 1.145, "density": 2.687, "ecdf": 0.826, "esf": 0.174}, {"trace": 0.944, "density": 2.011, "ecdf": 0.08, "esf": 0.92}, {"trace": 1.01, "density": 4.219, "ecdf": 0.286, "esf": 0.714}, {"trace": 1.115, "density": 3.554, "ecdf": 0.732, "esf": 0.268}, {"trace": 0.981, "density": 3.194, "ecdf": 0.173, "esf": 0.827}, {"trace": 1.079, "density": 4.199, "ecdf": 0.594, "esf": 0.406}, {"trace": 1.062, "density": 4.379, "ecdf": 0.518, "esf": 0.482}, {"trace": 1.025, "density": 4.379, "ecdf": 0.351, "esf": 0.649}, {"trace": 1.119, "density": 3.431, "ecdf": 0.748, "esf": 0.252}, {"trace": 1.102, "density": 3.849, "ecdf": 0.682, "esf": 0.318}, {"trace": 1.112, "density": 3.616, "ecdf": 0.724, "esf": 0.276}, {"trace": 1.081, "density": 4.176, "ecdf": 0.6, "esf": 0.4}, {"trace": 1.082, "density": 4.165, "ecdf": 0.604, "esf": 0.396}, {"trace": 1.091, "density": 4.021, "ecdf": 0.64, "esf": 0.36}, {"trace": 1.079, "density": 4.203, "ecdf": 0.592, "esf": 0.408}, {"trace": 1.083, "density": 4.152, "ecdf": 0.609, "esf": 0.391}, {"trace": 1.074, "density": 4.264, "ecdf": 0.568, "esf": 0.432}, {"trace": 1.06, "density": 4.393, "ecdf": 0.509, "esf": 0.491}, {"trace": 1.0, "density": 3.963, "ecdf": 0.243, "esf": 0.757}, {"trace": 1.142, "density": 2.753, "ecdf": 0.819, "esf": 0.181}, {"trace": 1.052, "density": 4.434, "ecdf": 0.476, "esf": 0.524}, {"trace": 1.152, "density": 2.483, "ecdf": 0.844, "esf": 0.156}, {"trace": 0.937, "density": 1.801, "ecdf": 0.068, "esf": 0.932}, {"trace": 0.907, "density": 0.877, "ecdf": 0.029, "esf": 0.971}, {"trace": 1.058, "density": 4.409, "ecdf": 0.498, "esf": 0.502}, {"trace": 1.143, "density": 2.728, "ecdf": 0.822, "esf": 0.178}, {"trace": 1.12, "density": 3.419, "ecdf": 0.75, "esf": 0.25}, {"trace": 0.958, "density": 2.427, "ecdf": 0.108, "esf": 0.892}, {"trace": 0.906, "density": 0.831, "ecdf": 0.027, "esf": 0.973}, {"trace": 1.144, "density": 2.718, "ecdf": 0.823, "esf": 0.177}, {"trace": 0.966, "density": 2.679, "ecdf": 0.13, "esf": 0.87}, {"trace": 1.184, "density": 1.593, "ecdf": 0.911, "esf": 0.089}, {"trace": 1.289, "density": 0.256, "ecdf": 0.989, "esf": 0.011}, {"trace": 1.298, "density": 0.212, "ecdf": 0.99, "esf": 0.01}, {"trace": 1.034, "density": 4.427, "ecdf": 0.39, "esf": 0.61}, {"trace": 1.099, "density": 3.901, "ecdf": 0.67, "esf": 0.33}, {"trace": 1.058, "density": 4.408, "ecdf": 0.498, "esf": 0.502}, {"trace": 1.039, "density": 4.442, "ecdf": 0.417, "esf": 0.583}, {"trace": 0.931, "density": 1.617, "ecdf": 0.055, "esf": 0.945}, {"trace": 0.927, "density": 1.472, "ecdf": 0.047, "esf": 0.953}, {"trace": 1.022, "density": 4.359, "ecdf": 0.338, "esf": 0.662}, {"trace": 1.029, "density": 4.403, "ecdf": 0.368, "esf": 0.632}, {"trace": 1.011, "density": 4.246, "ecdf": 0.293, "esf": 0.707}, {"trace": 1.061, "density": 4.388, "ecdf": 0.512, "esf": 0.488}, {"trace": 1.091, "density": 4.024, "ecdf": 0.639, "esf": 0.361}, {"trace": 1.099, "density": 3.906, "ecdf": 0.669, "esf": 0.331}, {"trace": 0.926, "density": 1.453, "ecdf": 0.046, "esf": 0.954}, {"trace": 0.919, "density": 1.198, "ecdf": 0.038, "esf": 0.962}, {"trace": 0.919, "density": 1.207, "ecdf": 0.038, "esf": 0.962}, {"trace": 1.069, "density": 4.322, "ecdf": 0.548, "esf": 0.452}, {"trace": 1.019, "density": 4.339, "ecdf": 0.326, "esf": 0.674}, {"trace": 1.06, "density": 4.394, "ecdf": 0.508, "esf": 0.492}, {"trace": 1.089, "density": 4.063, "ecdf": 0.631, "esf": 0.369}, {"trace": 1.069, "density": 4.319, "ecdf": 0.549, "esf": 0.451}, {"trace": 1.028, "density": 4.396, "ecdf": 0.364, "esf": 0.636}, {"trace": 0.999, "density": 3.93, "ecdf": 0.239, "esf": 0.761}, {"trace": 0.931, "density": 1.595, "ecdf": 0.053, "esf": 0.947}, {"trace": 1.037, "density": 4.437, "ecdf": 0.406, "esf": 0.594}, {"trace": 1.046, "density": 4.447, "ecdf": 0.445, "esf": 0.555}, {"trace": 1.066, "density": 4.346, "ecdf": 0.538, "esf": 0.462}, {"trace": 1.081, "density": 4.175, "ecdf": 0.6, "esf": 0.4}, {"trace": 1.179, "density": 1.73, "ecdf": 0.901, "esf": 0.099}, {"trace": 1.214, "density": 1.023, "ecdf": 0.948, "esf": 0.052}, {"trace": 1.074, "density": 4.26, "ecdf": 0.57, "esf": 0.43}, {"trace": 1.073, "density": 4.28, "ecdf": 0.563, "esf": 0.437}, {"trace": 1.013, "density": 4.275, "ecdf": 0.302, "esf": 0.698}, {"trace": 1.16, "density": 2.279, "ecdf": 0.863, "esf": 0.137}, {"trace": 1.023, "density": 4.366, "ecdf": 0.343, "esf": 0.657}, {"trace": 1.014, "density": 4.281, "ecdf": 0.303, "esf": 0.697}, {"trace": 1.037, "density": 4.436, "ecdf": 0.404, "esf": 0.596}, {"trace": 1.099, "density": 3.895, "ecdf": 0.672, "esf": 0.328}, {"trace": 1.024, "density": 4.373, "ecdf": 0.347, "esf": 0.653}, {"trace": 1.082, "density": 4.168, "ecdf": 0.602, "esf": 0.398}, {"trace": 1.155, "density": 2.41, "ecdf": 0.853, "esf": 0.147}, {"trace": 0.977, "density": 3.074, "ecdf": 0.165, "esf": 0.835}, {"trace": 0.934, "density": 1.712, "ecdf": 0.062, "esf": 0.938}, {"trace": 0.96, "density": 2.515, "ecdf": 0.115, "esf": 0.885}, {"trace": 1.144, "density": 2.701, "ecdf": 0.825, "esf": 0.175}, {"trace": 0.997, "density": 3.859, "ecdf": 0.23, "esf": 0.77}, {"trace": 1.128, "density": 3.181, "ecdf": 0.778, "esf": 0.222}, {"trace": 1.068, "density": 4.333, "ecdf": 0.544, "esf": 0.456}, {"trace": 0.985, "density": 3.37, "ecdf": 0.186, "esf": 0.814}, {"trace": 0.994, "density": 3.737, "ecdf": 0.216, "esf": 0.784}, {"trace": 1.197, "density": 1.346, "ecdf": 0.926, "esf": 0.074}, {"trace": 0.965, "density": 2.663, "ecdf": 0.128, "esf": 0.872}, {"trace": 1.2, "density": 1.294, "ecdf": 0.931, "esf": 0.069}, {"trace": 0.893, "density": 0.602, "ecdf": 0.018, "esf": 0.982}, {"trace": 1.064, "density": 4.37, "ecdf": 0.524, "esf": 0.476}, {"trace": 0.918, "density": 1.182, "ecdf": 0.037, "esf": 0.963}, {"trace": 1.215, "density": 1.002, "ecdf": 0.95, "esf": 0.05}, {"trace": 1.019, "density": 4.341, "ecdf": 0.326, "esf": 0.674}, {"trace": 1.046, "density": 4.447, "ecdf": 0.445, "esf": 0.555}, {"trace": 1.061, "density": 4.387, "ecdf": 0.513, "esf": 0.487}, {"trace": 1.135, "density": 2.967, "ecdf": 0.799, "esf": 0.201}, {"trace": 1.121, "density": 3.377, "ecdf": 0.755, "esf": 0.245}, {"trace": 1.03, "density": 4.406, "ecdf": 0.37, "esf": 0.63}, {"trace": 0.955, "density": 2.341, "ecdf": 0.102, "esf": 0.898}, {"trace": 1.033, "density": 4.422, "ecdf": 0.384, "esf": 0.616}, {"trace": 1.192, "density": 1.433, "ecdf": 0.919, "esf": 0.081}, {"trace": 1.041, "density": 4.445, "ecdf": 0.424, "esf": 0.576}, {"trace": 1.138, "density": 2.888, "ecdf": 0.807, "esf": 0.193}, {"trace": 1.052, "density": 4.435, "ecdf": 0.474, "esf": 0.526}, {"trace": 1.013, "density": 4.271, "ecdf": 0.299, "esf": 0.701}, {"trace": 1.137, "density": 2.913, "ecdf": 0.804, "esf": 0.196}, {"trace": 0.902, "density": 0.751, "ecdf": 0.024, "esf": 0.976}, {"trace": 1.123, "density": 3.328, "ecdf": 0.761, "esf": 0.239}, {"trace": 1.028, "density": 4.4, "ecdf": 0.366, "esf": 0.634}, {"trace": 1.005, "density": 4.124, "ecdf": 0.266, "esf": 0.734}, {"trace": 1.065, "density": 4.36, "ecdf": 0.532, "esf": 0.468}, {"trace": 1.0, "density": 3.979, "ecdf": 0.245, "esf": 0.755}, {"trace": 1.109, "density": 3.691, "ecdf": 0.712, "esf": 0.288}, {"trace": 1.164, "density": 2.149, "ecdf": 0.874, "esf": 0.126}, {"trace": 1.108, "density": 3.717, "ecdf": 0.707, "esf": 0.293}, {"trace": 1.124, "density": 3.283, "ecdf": 0.767, "esf": 0.233}, {"trace": 1.067, "density": 4.339, "ecdf": 0.54, "esf": 0.46}, {"trace": 0.988, "density": 3.493, "ecdf": 0.196, "esf": 0.804}, {"trace": 1.006, "density": 4.146, "ecdf": 0.27, "esf": 0.73}, {"trace": 1.064, "density": 4.368, "ecdf": 0.525, "esf": 0.475}, {"trace": 0.983, "density": 3.293, "ecdf": 0.18, "esf": 0.82}, {"trace": 1.0, "density": 3.961, "ecdf": 0.242, "esf": 0.758}, {"trace": 1.03, "density": 4.408, "ecdf": 0.372, "esf": 0.629}, {"trace": 0.995, "density": 3.779, "ecdf": 0.219, "esf": 0.781}, {"trace": 0.962, "density": 2.549, "ecdf": 0.118, "esf": 0.882}, {"trace": 1.112, "density": 3.638, "ecdf": 0.72, "esf": 0.28}, {"trace": 1.042, "density": 4.446, "ecdf": 0.426, "esf": 0.574}, {"trace": 1.132, "density": 3.042, "ecdf": 0.791, "esf": 0.209}, {"trace": 1.003, "density": 4.049, "ecdf": 0.253, "esf": 0.747}, {"trace": 1.129, "density": 3.155, "ecdf": 0.781, "esf": 0.219}, {"trace": 1.056, "density": 4.419, "ecdf": 0.488, "esf": 0.512}, {"trace": 1.037, "density": 4.437, "ecdf": 0.407, "esf": 0.593}, {"trace": 1.007, "density": 4.17, "ecdf": 0.276, "esf": 0.724}, {"trace": 1.091, "density": 4.029, "ecdf": 0.638, "esf": 0.362}, {"trace": 1.169, "density": 1.993, "ecdf": 0.884, "esf": 0.116}, {"trace": 0.957, "density": 2.399, "ecdf": 0.106, "esf": 0.894}, {"trace": 1.074, "density": 4.264, "ecdf": 0.569, "esf": 0.431}, {"trace": 1.074, "density": 4.268, "ecdf": 0.567, "esf": 0.433}, {"trace": 1.129, "density": 3.141, "ecdf": 0.783, "esf": 0.217}, {"trace": 1.024, "density": 4.374, "ecdf": 0.348, "esf": 0.652}, {"trace": 1.036, "density": 4.433, "ecdf": 0.4, "esf": 0.6}, {"trace": 1.082, "density": 4.16, "ecdf": 0.606, "esf": 0.394}, {"trace": 1.157, "density": 2.368, "ecdf": 0.856, "esf": 0.144}, {"trace": 1.231, "density": 0.741, "ecdf": 0.961, "esf": 0.039}, {"trace": 1.021, "density": 4.354, "ecdf": 0.335, "esf": 0.665}, {"trace": 1.1, "density": 3.883, "ecdf": 0.675, "esf": 0.325}, {"trace": 1.198, "density": 1.323, "ecdf": 0.929, "esf": 0.071}, {"trace": 0.988, "density": 3.477, "ecdf": 0.194, "esf": 0.806}, {"trace": 1.13, "density": 3.121, "ecdf": 0.785, "esf": 0.215}, {"trace": 0.977, "density": 3.054, "ecdf": 0.163, "esf": 0.837}, {"trace": 0.933, "density": 1.684, "ecdf": 0.06, "esf": 0.94}, {"trace": 1.027, "density": 4.395, "ecdf": 0.363, "esf": 0.637}, {"trace": 1.042, "density": 4.447, "ecdf": 0.429, "esf": 0.571}, {"trace": 1.038, "density": 4.439, "ecdf": 0.41, "esf": 0.59}, {"trace": 1.049, "density": 4.444, "ecdf": 0.457, "esf": 0.543}, {"trace": 1.15, "density": 2.554, "ecdf": 0.838, "esf": 0.162}, {"trace": 1.195, "density": 1.38, "ecdf": 0.924, "esf": 0.076}, {"trace": 1.172, "density": 1.924, "ecdf": 0.889, "esf": 0.111}, {"trace": 0.952, "density": 2.24, "ecdf": 0.095, "esf": 0.905}, {"trace": 1.288, "density": 0.263, "ecdf": 0.989, "esf": 0.011}, {"trace": 1.0, "density": 3.982, "ecdf": 0.246, "esf": 0.754}, {"trace": 1.043, "density": 4.447, "ecdf": 0.432, "esf": 0.568}, {"trace": 0.962, "density": 2.553, "ecdf": 0.119, "esf": 0.881}, {"trace": 1.067, "density": 4.337, "ecdf": 0.541, "esf": 0.459}, {"trace": 1.071, "density": 4.299, "ecdf": 0.556, "esf": 0.444}, {"trace": 1.097, "density": 3.932, "ecdf": 0.665, "esf": 0.335}, {"trace": 1.067, "density": 4.341, "ecdf": 0.54, "esf": 0.46}, {"trace": 1.047, "density": 4.446, "ecdf": 0.451, "esf": 0.549}, {"trace": 1.106, "density": 3.754, "ecdf": 0.702, "esf": 0.298}, {"trace": 1.136, "density": 2.948, "ecdf": 0.8, "esf": 0.2}, {"trace": 0.946, "density": 2.051, "ecdf": 0.083, "esf": 0.917}, {"trace": 1.08, "density": 4.194, "ecdf": 0.596, "esf": 0.404}, {"trace": 1.046, "density": 4.447, "ecdf": 0.444, "esf": 0.556}, {"trace": 0.937, "density": 1.791, "ecdf": 0.067, "esf": 0.933}, {"trace": 1.222, "density": 0.865, "ecdf": 0.956, "esf": 0.044}, {"trace": 1.193, "density": 1.418, "ecdf": 0.921, "esf": 0.079}, {"trace": 1.041, "density": 4.445, "ecdf": 0.422, "esf": 0.578}, {"trace": 1.051, "density": 4.439, "ecdf": 0.467, "esf": 0.533}, {"trace": 0.869, "density": 0.332, "ecdf": 0.008, "esf": 0.992}, {"trace": 1.381, "density": 0.033, "ecdf": 0.999, "esf": 0.001}, {"trace": 1.128, "density": 3.178, "ecdf": 0.779, "esf": 0.221}, {"trace": 0.926, "density": 1.437, "ecdf": 0.046, "esf": 0.954}, {"trace": 1.026, "density": 4.388, "ecdf": 0.358, "esf": 0.642}, {"trace": 1.165, "density": 2.127, "ecdf": 0.875, "esf": 0.125}, {"trace": 0.952, "density": 2.261, "ecdf": 0.097, "esf": 0.903}, {"trace": 1.116, "density": 3.537, "ecdf": 0.735, "esf": 0.265}, {"trace": 1.074, "density": 4.269, "ecdf": 0.567, "esf": 0.433}, {"trace": 1.101, "density": 3.854, "ecdf": 0.682, "esf": 0.318}, {"trace": 1.014, "density": 4.288, "ecdf": 0.306, "esf": 0.694}, {"trace": 1.193, "density": 1.421, "ecdf": 0.92, "esf": 0.08}, {"trace": 0.931, "density": 1.606, "ecdf": 0.054, "esf": 0.946}, {"trace": 0.974, "density": 2.951, "ecdf": 0.154, "esf": 0.846}, {"trace": 0.991, "density": 3.615, "ecdf": 0.205, "esf": 0.795}, {"trace": 1.069, "density": 4.319, "ecdf": 0.549, "esf": 0.451}, {"trace": 1.14, "density": 2.827, "ecdf": 0.812, "esf": 0.188}, {"trace": 1.056, "density": 4.416, "ecdf": 0.49, "esf": 0.51}, {"trace": 1.184, "density": 1.611, "ecdf": 0.909, "esf": 0.091}, {"trace": 1.081, "density": 4.173, "ecdf": 0.601, "esf": 0.399}, {"trace": 1.069, "density": 4.321, "ecdf": 0.549, "esf": 0.451}, {"trace": 1.061, "density": 4.387, "ecdf": 0.513, "esf": 0.487}, {"trace": 1.032, "density": 4.416, "ecdf": 0.379, "esf": 0.621}, {"trace": 0.997, "density": 3.852, "ecdf": 0.229, "esf": 0.771}, {"trace": 1.033, "density": 4.424, "ecdf": 0.386, "esf": 0.613}, {"trace": 1.152, "density": 2.483, "ecdf": 0.844, "esf": 0.156}, {"trace": 1.024, "density": 4.377, "ecdf": 0.35, "esf": 0.651}, {"trace": 1.02, "density": 4.344, "ecdf": 0.329, "esf": 0.671}, {"trace": 0.998, "density": 3.886, "ecdf": 0.233, "esf": 0.767}, {"trace": 1.114, "density": 3.58, "ecdf": 0.728, "esf": 0.271}, {"trace": 0.949, "density": 2.16, "ecdf": 0.088, "esf": 0.912}, {"trace": 0.942, "density": 1.94, "ecdf": 0.077, "esf": 0.923}, {"trace": 1.113, "density": 3.613, "ecdf": 0.724, "esf": 0.276}, {"trace": 1.092, "density": 4.012, "ecdf": 0.643, "esf": 0.357}, {"trace": 1.06, "density": 4.393, "ecdf": 0.508, "esf": 0.492}, {"trace": 0.904, "density": 0.796, "ecdf": 0.025, "esf": 0.975}, {"trace": 1.217, "density": 0.952, "ecdf": 0.952, "esf": 0.048}, {"trace": 0.987, "density": 3.441, "ecdf": 0.192, "esf": 0.808}, {"trace": 1.237, "density": 0.669, "ecdf": 0.966, "esf": 0.034}, {"trace": 1.011, "density": 4.246, "ecdf": 0.293, "esf": 0.707}, {"trace": 0.953, "density": 2.276, "ecdf": 0.098, "esf": 0.902}, {"trace": 0.995, "density": 3.798, "ecdf": 0.221, "esf": 0.779}, {"trace": 1.141, "density": 2.785, "ecdf": 0.816, "esf": 0.184}, {"trace": 1.114, "density": 3.567, "ecdf": 0.731, "esf": 0.269}, {"trace": 0.991, "density": 3.631, "ecdf": 0.207, "esf": 0.793}, {"trace": 1.225, "density": 0.825, "ecdf": 0.957, "esf": 0.043}, {"trace": 1.096, "density": 3.947, "ecdf": 0.66, "esf": 0.34}, {"trace": 1.105, "density": 3.793, "ecdf": 0.695, "esf": 0.305}, {"trace": 1.171, "density": 1.952, "ecdf": 0.887, "esf": 0.113}, {"trace": 1.041, "density": 4.446, "ecdf": 0.425, "esf": 0.575}, {"trace": 1.084, "density": 4.135, "ecdf": 0.613, "esf": 0.387}, {"trace": 1.0, "density": 3.975, "ecdf": 0.244, "esf": 0.756}, {"trace": 1.046, "density": 4.447, "ecdf": 0.446, "esf": 0.554}, {"trace": 1.031, "density": 4.412, "ecdf": 0.375, "esf": 0.625}, {"trace": 1.019, "density": 4.342, "ecdf": 0.328, "esf": 0.672}, {"trace": 1.019, "density": 4.342, "ecdf": 0.328, "esf": 0.672}, {"trace": 1.202, "density": 1.24, "ecdf": 0.936, "esf": 0.064}, {"trace": 1.045, "density": 4.448, "ecdf": 0.439, "esf": 0.561}, {"trace": 1.173, "density": 1.891, "ecdf": 0.891, "esf": 0.109}, {"trace": 1.095, "density": 3.962, "ecdf": 0.656, "esf": 0.344}, {"trace": 1.112, "density": 3.637, "ecdf": 0.721, "esf": 0.279}, {"trace": 1.061, "density": 4.391, "ecdf": 0.51, "esf": 0.49}, {"trace": 1.02, "density": 4.347, "ecdf": 0.33, "esf": 0.67}, {"trace": 0.886, "density": 0.507, "ecdf": 0.016, "esf": 0.984}, {"trace": 1.003, "density": 4.046, "ecdf": 0.252, "esf": 0.748}, {"trace": 1.075, "density": 4.255, "ecdf": 0.573, "esf": 0.427}, {"trace": 1.139, "density": 2.859, "ecdf": 0.809, "esf": 0.191}, {"trace": 0.993, "density": 3.695, "ecdf": 0.213, "esf": 0.787}, {"trace": 0.99, "density": 3.593, "ecdf": 0.203, "esf": 0.797}, {"trace": 1.035, "density": 4.428, "ecdf": 0.393, "esf": 0.607}, {"trace": 1.111, "density": 3.658, "ecdf": 0.717, "esf": 0.283}, {"trace": 1.063, "density": 4.371, "ecdf": 0.524, "esf": 0.476}, {"trace": 1.001, "density": 4.014, "ecdf": 0.25, "esf": 0.75}, {"trace": 1.082, "density": 4.163, "ecdf": 0.604, "esf": 0.396}, {"trace": 1.018, "density": 4.329, "ecdf": 0.322, "esf": 0.678}, {"trace": 1.3, "density": 0.206, "ecdf": 0.991, "esf": 0.009}, {"trace": 1.093, "density": 3.992, "ecdf": 0.649, "esf": 0.351}, {"trace": 0.86, "density": 0.244, "ecdf": 0.005, "esf": 0.995}, {"trace": 0.96, "density": 2.506, "ecdf": 0.114, "esf": 0.886}, {"trace": 1.199, "density": 1.307, "ecdf": 0.93, "esf": 0.07}, {"trace": 1.124, "density": 3.288, "ecdf": 0.766, "esf": 0.234}, {"trace": 1.021, "density": 4.353, "ecdf": 0.334, "esf": 0.666}, {"trace": 1.066, "density": 4.352, "ecdf": 0.535, "esf": 0.465}, {"trace": 1.054, "density": 4.426, "ecdf": 0.482, "esf": 0.518}, {"trace": 1.114, "density": 3.579, "ecdf": 0.729, "esf": 0.271}, {"trace": 0.966, "density": 2.681, "ecdf": 0.13, "esf": 0.87}, {"trace": 0.962, "density": 2.575, "ecdf": 0.121, "esf": 0.879}, {"trace": 1.063, "density": 4.375, "ecdf": 0.521, "esf": 0.479}, {"trace": 0.892, "density": 0.582, "ecdf": 0.017, "esf": 0.983}, {"trace": 0.98, "density": 3.174, "ecdf": 0.172, "esf": 0.828}, {"trace": 1.026, "density": 4.386, "ecdf": 0.356, "esf": 0.644}, {"trace": 0.955, "density": 2.346, "ecdf": 0.103, "esf": 0.897}, {"trace": 1.044, "density": 4.447, "ecdf": 0.435, "esf": 0.565}, {"trace": 1.081, "density": 4.181, "ecdf": 0.599, "esf": 0.401}, {"trace": 1.047, "density": 4.446, "ecdf": 0.449, "esf": 0.551}, {"trace": 1.017, "density": 4.316, "ecdf": 0.317, "esf": 0.683}, {"trace": 0.999, "density": 3.916, "ecdf": 0.237, "esf": 0.763}, {"trace": 1.165, "density": 2.121, "ecdf": 0.876, "esf": 0.124}, {"trace": 1.104, "density": 3.814, "ecdf": 0.692, "esf": 0.308}, {"trace": 1.103, "density": 3.815, "ecdf": 0.691, "esf": 0.309}, {"trace": 1.091, "density": 4.031, "ecdf": 0.637, "esf": 0.363}, {"trace": 1.111, "density": 3.648, "ecdf": 0.718, "esf": 0.282}, {"trace": 1.112, "density": 3.624, "ecdf": 0.722, "esf": 0.277}, {"trace": 1.051, "density": 4.439, "ecdf": 0.467, "esf": 0.532}, {"trace": 1.118, "density": 3.459, "ecdf": 0.744, "esf": 0.256}, {"trace": 1.152, "density": 2.488, "ecdf": 0.844, "esf": 0.156}, {"trace": 1.133, "density": 3.025, "ecdf": 0.793, "esf": 0.207}, {"trace": 1.076, "density": 4.241, "ecdf": 0.576, "esf": 0.424}, {"trace": 1.032, "density": 4.417, "ecdf": 0.38, "esf": 0.619}, {"trace": 1.051, "density": 4.437, "ecdf": 0.47, "esf": 0.53}, {"trace": 0.933, "density": 1.664, "ecdf": 0.058, "esf": 0.942}, {"trace": 1.094, "density": 3.985, "ecdf": 0.651, "esf": 0.349}, {"trace": 1.177, "density": 1.774, "ecdf": 0.899, "esf": 0.101}, {"trace": 1.162, "density": 2.224, "ecdf": 0.868, "esf": 0.132}, {"trace": 1.081, "density": 4.176, "ecdf": 0.6, "esf": 0.4}, {"trace": 0.951, "density": 2.222, "ecdf": 0.094, "esf": 0.906}, {"trace": 0.984, "density": 3.341, "ecdf": 0.184, "esf": 0.816}, {"trace": 1.017, "density": 4.324, "ecdf": 0.32, "esf": 0.68}, {"trace": 1.119, "density": 3.45, "ecdf": 0.746, "esf": 0.254}, {"trace": 1.118, "density": 3.465, "ecdf": 0.744, "esf": 0.256}, {"trace": 1.076, "density": 4.247, "ecdf": 0.574, "esf": 0.426}, {"trace": 1.084, "density": 4.128, "ecdf": 0.616, "esf": 0.384}, {"trace": 1.096, "density": 3.951, "ecdf": 0.659, "esf": 0.341}, {"trace": 1.141, "density": 2.807, "ecdf": 0.814, "esf": 0.186}, {"trace": 1.036, "density": 4.434, "ecdf": 0.401, "esf": 0.599}, {"trace": 1.016, "density": 4.314, "ecdf": 0.316, "esf": 0.684}, {"trace": 0.992, "density": 3.654, "ecdf": 0.21, "esf": 0.79}, {"trace": 1.014, "density": 4.289, "ecdf": 0.306, "esf": 0.694}, {"trace": 1.142, "density": 2.757, "ecdf": 0.818, "esf": 0.182}, {"trace": 0.956, "density": 2.371, "ecdf": 0.104, "esf": 0.896}, {"trace": 0.998, "density": 3.883, "ecdf": 0.233, "esf": 0.767}, {"trace": 1.253, "density": 0.517, "ecdf": 0.976, "esf": 0.024}, {"trace": 1.122, "density": 3.37, "ecdf": 0.756, "esf": 0.244}, {"trace": 0.993, "density": 3.684, "ecdf": 0.212, "esf": 0.788}, {"trace": 1.148, "density": 2.6, "ecdf": 0.834, "esf": 0.165}, {"trace": 1.229, "density": 0.764, "ecdf": 0.96, "esf": 0.04}, {"trace": 1.069, "density": 4.316, "ecdf": 0.55, "esf": 0.45}, {"trace": 0.925, "density": 1.424, "ecdf": 0.046, "esf": 0.954}, {"trace": 0.921, "density": 1.268, "ecdf": 0.039, "esf": 0.961}, {"trace": 1.05, "density": 4.441, "ecdf": 0.464, "esf": 0.536}, {"trace": 1.022, "density": 4.363, "ecdf": 0.34, "esf": 0.66}, {"trace": 1.049, "density": 4.442, "ecdf": 0.46, "esf": 0.54}, {"trace": 1.137, "density": 2.922, "ecdf": 0.803, "esf": 0.197}, {"trace": 1.064, "density": 4.368, "ecdf": 0.525, "esf": 0.475}, {"trace": 1.014, "density": 4.279, "ecdf": 0.303, "esf": 0.697}, {"trace": 1.011, "density": 4.236, "ecdf": 0.289, "esf": 0.711}, {"trace": 1.053, "density": 4.43, "ecdf": 0.479, "esf": 0.521}, {"trace": 1.017, "density": 4.321, "ecdf": 0.319, "esf": 0.681}, {"trace": 1.059, "density": 4.4, "ecdf": 0.503, "esf": 0.497}, {"trace": 1.142, "density": 2.77, "ecdf": 0.816, "esf": 0.184}, {"trace": 0.927, "density": 1.477, "ecdf": 0.048, "esf": 0.952}, {"trace": 1.089, "density": 4.054, "ecdf": 0.632, "esf": 0.368}, {"trace": 0.948, "density": 2.114, "ecdf": 0.086, "esf": 0.914}, {"trace": 1.002, "density": 4.044, "ecdf": 0.252, "esf": 0.748}, {"trace": 1.101, "density": 3.863, "ecdf": 0.679, "esf": 0.321}, {"trace": 1.052, "density": 4.436, "ecdf": 0.472, "esf": 0.528}, {"trace": 1.044, "density": 4.448, "ecdf": 0.436, "esf": 0.564}, {"trace": 1.042, "density": 4.446, "ecdf": 0.427, "esf": 0.573}, {"trace": 1.128, "density": 3.175, "ecdf": 0.779, "esf": 0.221}, {"trace": 1.136, "density": 2.94, "ecdf": 0.801, "esf": 0.199}, {"trace": 1.065, "density": 4.357, "ecdf": 0.533, "esf": 0.467}, {"trace": 1.135, "density": 2.976, "ecdf": 0.798, "esf": 0.202}, {"trace": 1.022, "density": 4.364, "ecdf": 0.341, "esf": 0.659}, {"trace": 1.18, "density": 1.709, "ecdf": 0.903, "esf": 0.097}, {"trace": 0.939, "density": 1.859, "ecdf": 0.072, "esf": 0.928}, {"trace": 1.116, "density": 3.515, "ecdf": 0.737, "esf": 0.263}, {"trace": 1.088, "density": 4.074, "ecdf": 0.629, "esf": 0.371}, {"trace": 1.016, "density": 4.308, "ecdf": 0.313, "esf": 0.687}, {"trace": 1.012, "density": 4.257, "ecdf": 0.294, "esf": 0.706}, {"trace": 1.026, "density": 4.386, "ecdf": 0.356, "esf": 0.644}, {"trace": 1.09, "density": 4.046, "ecdf": 0.633, "esf": 0.367}, {"trace": 1.113, "density": 3.6, "ecdf": 0.726, "esf": 0.274}, {"trace": 1.047, "density": 4.446, "ecdf": 0.449, "esf": 0.551}, {"trace": 1.098, "density": 3.916, "ecdf": 0.667, "esf": 0.333}, {"trace": 1.0, "density": 3.954, "ecdf": 0.241, "esf": 0.759}, {"trace": 1.009, "density": 4.196, "ecdf": 0.281, "esf": 0.719}, {"trace": 1.001, "density": 4.011, "ecdf": 0.249, "esf": 0.751}, {"trace": 1.146, "density": 2.651, "ecdf": 0.829, "esf": 0.171}, {"trace": 0.958, "density": 2.429, "ecdf": 0.108, "esf": 0.892}, {"trace": 1.149, "density": 2.575, "ecdf": 0.837, "esf": 0.163}, {"trace": 1.084, "density": 4.131, "ecdf": 0.615, "esf": 0.385}, {"trace": 1.088, "density": 4.076, "ecdf": 0.628, "esf": 0.372}, {"trace": 1.101, "density": 3.86, "ecdf": 0.68, "esf": 0.32}, {"trace": 0.856, "density": 0.208, "ecdf": 0.004, "esf": 0.996}, {"trace": 1.035, "density": 4.43, "ecdf": 0.396, "esf": 0.604}, {"trace": 1.01, "density": 4.231, "ecdf": 0.288, "esf": 0.712}, {"trace": 1.044, "density": 4.447, "ecdf": 0.435, "esf": 0.565}, {"trace": 0.97, "density": 2.813, "ecdf": 0.142, "esf": 0.858}, {"trace": 1.014, "density": 4.279, "ecdf": 0.302, "esf": 0.698}, {"trace": 1.147, "density": 2.62, "ecdf": 0.832, "esf": 0.168}, {"trace": 1.173, "density": 1.885, "ecdf": 0.891, "esf": 0.109}, {"trace": 1.216, "density": 0.977, "ecdf": 0.95, "esf": 0.05}, {"trace": 0.963, "density": 2.597, "ecdf": 0.122, "esf": 0.878}, {"trace": 1.115, "density": 3.542, "ecdf": 0.734, "esf": 0.266}, {"trace": 0.959, "density": 2.46, "ecdf": 0.111, "esf": 0.889}, {"trace": 0.967, "density": 2.719, "ecdf": 0.134, "esf": 0.866}, {"trace": 1.121, "density": 3.396, "ecdf": 0.752, "esf": 0.248}, {"trace": 1.047, "density": 4.446, "ecdf": 0.452, "esf": 0.548}, {"trace": 1.179, "density": 1.725, "ecdf": 0.902, "esf": 0.098}, {"trace": 0.998, "density": 3.88, "ecdf": 0.232, "esf": 0.768}, {"trace": 1.097, "density": 3.931, "ecdf": 0.665, "esf": 0.335}, {"trace": 1.061, "density": 4.386, "ecdf": 0.514, "esf": 0.486}, {"trace": 1.046, "density": 4.447, "ecdf": 0.444, "esf": 0.556}, {"trace": 1.103, "density": 3.827, "ecdf": 0.688, "esf": 0.312}, {"trace": 0.952, "density": 2.247, "ecdf": 0.096, "esf": 0.904}, {"trace": 1.088, "density": 4.067, "ecdf": 0.63, "esf": 0.37}, {"trace": 1.093, "density": 4.002, "ecdf": 0.646, "esf": 0.354}, {"trace": 1.019, "density": 4.342, "ecdf": 0.327, "esf": 0.673}, {"trace": 0.945, "density": 2.034, "ecdf": 0.082, "esf": 0.918}, {"trace": 1.129, "density": 3.144, "ecdf": 0.783, "esf": 0.217}, {"trace": 1.034, "density": 4.425, "ecdf": 0.388, "esf": 0.612}, {"trace": 0.995, "density": 3.788, "ecdf": 0.22, "esf": 0.78}, {"trace": 1.022, "density": 4.364, "ecdf": 0.341, "esf": 0.659}, {"trace": 1.033, "density": 4.423, "ecdf": 0.385, "esf": 0.615}, {"trace": 1.041, "density": 4.445, "ecdf": 0.423, "esf": 0.577}, {"trace": 1.062, "density": 4.382, "ecdf": 0.516, "esf": 0.484}, {"trace": 1.048, "density": 4.445, "ecdf": 0.455, "esf": 0.545}, {"trace": 1.017, "density": 4.322, "ecdf": 0.32, "esf": 0.68}, {"trace": 1.155, "density": 2.415, "ecdf": 0.852, "esf": 0.148}, {"trace": 1.012, "density": 4.253, "ecdf": 0.294, "esf": 0.706}, {"trace": 1.096, "density": 3.949, "ecdf": 0.66, "esf": 0.34}, {"trace": 0.907, "density": 0.867, "ecdf": 0.028, "esf": 0.972}, {"trace": 0.985, "density": 3.375, "ecdf": 0.187, "esf": 0.813}, {"trace": 1.038, "density": 4.44, "ecdf": 0.412, "esf": 0.588}, {"trace": 1.125, "density": 3.254, "ecdf": 0.77, "esf": 0.23}, {"trace": 1.003, "density": 4.064, "ecdf": 0.255, "esf": 0.745}, {"trace": 1.023, "density": 4.366, "ecdf": 0.343, "esf": 0.657}, {"trace": 0.998, "density": 3.909, "ecdf": 0.236, "esf": 0.764}, {"trace": 1.237, "density": 0.666, "ecdf": 0.966, "esf": 0.034}, {"trace": 1.12, "density": 3.425, "ecdf": 0.749, "esf": 0.251}, {"trace": 1.09, "density": 4.045, "ecdf": 0.634, "esf": 0.366}, {"trace": 0.999, "density": 3.916, "ecdf": 0.237, "esf": 0.763}, {"trace": 1.04, "density": 4.443, "ecdf": 0.418, "esf": 0.582}, {"trace": 1.065, "density": 4.357, "ecdf": 0.533, "esf": 0.467}, {"trace": 1.199, "density": 1.311, "ecdf": 0.93, "esf": 0.07}, {"trace": 1.235, "density": 0.689, "ecdf": 0.965, "esf": 0.035}, {"trace": 1.3, "density": 0.203, "ecdf": 0.991, "esf": 0.009}, {"trace": 1.052, "density": 4.436, "ecdf": 0.472, "esf": 0.528}, {"trace": 1.053, "density": 4.433, "ecdf": 0.477, "esf": 0.523}, {"trace": 1.0, "density": 3.962, "ecdf": 0.242, "esf": 0.758}, {"trace": 1.102, "density": 3.849, "ecdf": 0.682, "esf": 0.318}, {"trace": 1.079, "density": 4.207, "ecdf": 0.59, "esf": 0.41}, {"trace": 1.13, "density": 3.127, "ecdf": 0.784, "esf": 0.216}, {"trace": 1.156, "density": 2.396, "ecdf": 0.854, "esf": 0.146}, {"trace": 0.934, "density": 1.698, "ecdf": 0.061, "esf": 0.939}, {"trace": 1.146, "density": 2.656, "ecdf": 0.829, "esf": 0.171}, {"trace": 1.19, "density": 1.478, "ecdf": 0.917, "esf": 0.083}, {"trace": 1.16, "density": 2.271, "ecdf": 0.864, "esf": 0.136}, {"trace": 1.101, "density": 3.867, "ecdf": 0.678, "esf": 0.322}, {"trace": 0.986, "density": 3.419, "ecdf": 0.19, "esf": 0.81}, {"trace": 0.996, "density": 3.812, "ecdf": 0.224, "esf": 0.776}, {"trace": 1.24, "density": 0.641, "ecdf": 0.968, "esf": 0.032}, {"trace": 1.247, "density": 0.567, "ecdf": 0.973, "esf": 0.027}, {"trace": 1.38, "density": 0.034, "ecdf": 0.998, "esf": 0.001}, {"trace": 1.197, "density": 1.336, "ecdf": 0.927, "esf": 0.073}, {"trace": 1.17, "density": 1.972, "ecdf": 0.885, "esf": 0.115}, {"trace": 1.052, "density": 4.435, "ecdf": 0.473, "esf": 0.527}, {"trace": 1.051, "density": 4.438, "ecdf": 0.47, "esf": 0.53}, {"trace": 1.025, "density": 4.38, "ecdf": 0.352, "esf": 0.649}, {"trace": 1.081, "density": 4.175, "ecdf": 0.6, "esf": 0.4}, {"trace": 1.134, "density": 2.993, "ecdf": 0.796, "esf": 0.204}, {"trace": 0.935, "density": 1.732, "ecdf": 0.063, "esf": 0.937}, {"trace": 1.006, "density": 4.144, "ecdf": 0.27, "esf": 0.73}, {"trace": 1.018, "density": 4.33, "ecdf": 0.323, "esf": 0.677}, {"trace": 1.068, "density": 4.327, "ecdf": 0.547, "esf": 0.453}, {"trace": 1.146, "density": 2.653, "ecdf": 0.829, "esf": 0.171}, {"trace": 1.048, "density": 4.444, "ecdf": 0.456, "esf": 0.544}, {"trace": 1.058, "density": 4.405, "ecdf": 0.499, "esf": 0.501}, {"trace": 1.004, "density": 4.087, "ecdf": 0.259, "esf": 0.741}, {"trace": 1.063, "density": 4.378, "ecdf": 0.52, "esf": 0.48}, {"trace": 1.063, "density": 4.378, "ecdf": 0.52, "esf": 0.48}, {"trace": 0.99, "density": 3.576, "ecdf": 0.202, "esf": 0.798}, {"trace": 1.046, "density": 4.447, "ecdf": 0.447, "esf": 0.553}, {"trace": 1.148, "density": 2.6, "ecdf": 0.834, "esf": 0.166}, {"trace": 1.146, "density": 2.651, "ecdf": 0.829, "esf": 0.171}, {"trace": 0.869, "density": 0.331, "ecdf": 0.008, "esf": 0.992}, {"trace": 0.985, "density": 3.382, "ecdf": 0.187, "esf": 0.813}, {"trace": 1.09, "density": 4.041, "ecdf": 0.635, "esf": 0.365}, {"trace": 1.047, "density": 4.446, "ecdf": 0.452, "esf": 0.548}, {"trace": 0.996, "density": 3.833, "ecdf": 0.227, "esf": 0.773}, {"trace": 0.976, "density": 3.01, "ecdf": 0.159, "esf": 0.841}, {"trace": 0.962, "density": 2.571, "ecdf": 0.12, "esf": 0.88}, {"trace": 0.936, "density": 1.76, "ecdf": 0.065, "esf": 0.935}, {"trace": 1.012, "density": 4.263, "ecdf": 0.296, "esf": 0.704}, {"trace": 1.119, "density": 3.442, "ecdf": 0.746, "esf": 0.253}, {"trace": 1.137, "density": 2.908, "ecdf": 0.805, "esf": 0.195}, {"trace": 1.114, "density": 3.589, "ecdf": 0.727, "esf": 0.273}, {"trace": 1.078, "density": 4.217, "ecdf": 0.586, "esf": 0.414}, {"trace": 1.065, "density": 4.362, "ecdf": 0.53, "esf": 0.47}, {"trace": 1.123, "density": 3.323, "ecdf": 0.762, "esf": 0.238}, {"trace": 0.931, "density": 1.624, "ecdf": 0.055, "esf": 0.945}, {"trace": 0.938, "density": 1.832, "ecdf": 0.07, "esf": 0.93}, {"trace": 0.989, "density": 3.556, "ecdf": 0.201, "esf": 0.799}, {"trace": 0.953, "density": 2.273, "ecdf": 0.098, "esf": 0.902}, {"trace": 1.015, "density": 4.301, "ecdf": 0.31, "esf": 0.69}, {"trace": 1.051, "density": 4.439, "ecdf": 0.467, "esf": 0.533}, {"trace": 1.194, "density": 1.404, "ecdf": 0.923, "esf": 0.077}, {"trace": 0.935, "density": 1.722, "ecdf": 0.063, "esf": 0.937}, {"trace": 1.249, "density": 0.554, "ecdf": 0.974, "esf": 0.026}, {"trace": 1.196, "density": 1.356, "ecdf": 0.926, "esf": 0.074}, {"trace": 1.055, "density": 4.423, "ecdf": 0.485, "esf": 0.515}, {"trace": 1.03, "density": 4.408, "ecdf": 0.372, "esf": 0.628}, {"trace": 0.955, "density": 2.327, "ecdf": 0.101, "esf": 0.899}, {"trace": 1.096, "density": 3.942, "ecdf": 0.663, "esf": 0.337}, {"trace": 1.029, "density": 4.402, "ecdf": 0.368, "esf": 0.632}, {"trace": 1.04, "density": 4.443, "ecdf": 0.419, "esf": 0.581}, {"trace": 1.072, "density": 4.287, "ecdf": 0.56, "esf": 0.44}, {"trace": 1.061, "density": 4.389, "ecdf": 0.512, "esf": 0.488}, {"trace": 1.058, "density": 4.405, "ecdf": 0.499, "esf": 0.501}, {"trace": 1.064, "density": 4.368, "ecdf": 0.524, "esf": 0.476}, {"trace": 0.98, "density": 3.178, "ecdf": 0.172, "esf": 0.828}, {"trace": 1.266, "density": 0.415, "ecdf": 0.981, "esf": 0.019}, {"trace": 0.905, "density": 0.81, "ecdf": 0.026, "esf": 0.974}, {"trace": 0.959, "density": 2.483, "ecdf": 0.112, "esf": 0.888}, {"trace": 0.959, "density": 2.475, "ecdf": 0.112, "esf": 0.888}, {"trace": 1.09, "density": 4.044, "ecdf": 0.635, "esf": 0.365}, {"trace": 0.996, "density": 3.83, "ecdf": 0.226, "esf": 0.774}, {"trace": 1.01, "density": 4.225, "ecdf": 0.287, "esf": 0.713}, {"trace": 1.077, "density": 4.231, "ecdf": 0.58, "esf": 0.42}, {"trace": 0.965, "density": 2.653, "ecdf": 0.127, "esf": 0.873}, {"trace": 0.996, "density": 3.826, "ecdf": 0.225, "esf": 0.774}, {"trace": 1.079, "density": 4.206, "ecdf": 0.59, "esf": 0.41}, {"trace": 1.074, "density": 4.27, "ecdf": 0.566, "esf": 0.434}, {"trace": 1.202, "density": 1.252, "ecdf": 0.935, "esf": 0.065}, {"trace": 1.082, "density": 4.16, "ecdf": 0.606, "esf": 0.394}, {"trace": 1.129, "density": 3.147, "ecdf": 0.782, "esf": 0.218}, {"trace": 1.097, "density": 3.93, "ecdf": 0.665, "esf": 0.335}, {"trace": 1.096, "density": 3.955, "ecdf": 0.658, "esf": 0.342}, {"trace": 0.981, "density": 3.197, "ecdf": 0.173, "esf": 0.827}, {"trace": 1.037, "density": 4.437, "ecdf": 0.407, "esf": 0.593}, {"trace": 1.17, "density": 1.97, "ecdf": 0.886, "esf": 0.114}, {"trace": 0.969, "density": 2.786, "ecdf": 0.139, "esf": 0.861}, {"trace": 1.205, "density": 1.183, "ecdf": 0.939, "esf": 0.061}, {"trace": 1.203, "density": 1.224, "ecdf": 0.937, "esf": 0.063}, {"trace": 1.173, "density": 1.876, "ecdf": 0.892, "esf": 0.108}, {"trace": 1.165, "density": 2.133, "ecdf": 0.874, "esf": 0.125}, {"trace": 1.262, "density": 0.443, "ecdf": 0.98, "esf": 0.02}, {"trace": 1.047, "density": 4.446, "ecdf": 0.451, "esf": 0.549}, {"trace": 1.171, "density": 1.935, "ecdf": 0.888, "esf": 0.112}, {"trace": 1.038, "density": 4.44, "ecdf": 0.413, "esf": 0.587}, {"trace": 1.103, "density": 3.831, "ecdf": 0.688, "esf": 0.312}, {"trace": 1.02, "density": 4.342, "ecdf": 0.328, "esf": 0.672}, {"trace": 1.062, "density": 4.384, "ecdf": 0.515, "esf": 0.485}, {"trace": 1.079, "density": 4.2, "ecdf": 0.594, "esf": 0.406}, {"trace": 0.945, "density": 2.024, "ecdf": 0.081, "esf": 0.919}, {"trace": 1.046, "density": 4.447, "ecdf": 0.446, "esf": 0.554}, {"trace": 1.058, "density": 4.406, "ecdf": 0.499, "esf": 0.501}, {"trace": 1.052, "density": 4.436, "ecdf": 0.472, "esf": 0.528}, {"trace": 1.08, "density": 4.183, "ecdf": 0.598, "esf": 0.402}, {"trace": 1.091, "density": 4.025, "ecdf": 0.639, "esf": 0.361}, {"trace": 0.975, "density": 3.006, "ecdf": 0.159, "esf": 0.841}, {"trace": 1.149, "density": 2.583, "ecdf": 0.836, "esf": 0.164}, {"trace": 1.165, "density": 2.126, "ecdf": 0.875, "esf": 0.125}, {"trace": 0.997, "density": 3.843, "ecdf": 0.228, "esf": 0.772}, {"trace": 1.02, "density": 4.344, "ecdf": 0.329, "esf": 0.671}, {"trace": 1.088, "density": 4.075, "ecdf": 0.628, "esf": 0.372}, {"trace": 1.006, "density": 4.132, "ecdf": 0.268, "esf": 0.732}, {"trace": 1.108, "density": 3.723, "ecdf": 0.706, "esf": 0.294}, {"trace": 1.03, "density": 4.409, "ecdf": 0.373, "esf": 0.627}, {"trace": 1.095, "density": 3.968, "ecdf": 0.654, "esf": 0.346}, {"trace": 1.074, "density": 4.26, "ecdf": 0.57, "esf": 0.43}, {"trace": 1.074, "density": 4.26, "ecdf": 0.57, "esf": 0.43}, {"trace": 0.962, "density": 2.57, "ecdf": 0.12, "esf": 0.88}, {"trace": 0.966, "density": 2.696, "ecdf": 0.132, "esf": 0.868}, {"trace": 1.015, "density": 4.301, "ecdf": 0.31, "esf": 0.69}, {"trace": 0.9, "density": 0.722, "ecdf": 0.022, "esf": 0.978}, {"trace": 1.023, "density": 4.369, "ecdf": 0.344, "esf": 0.656}, {"trace": 1.205, "density": 1.185, "ecdf": 0.939, "esf": 0.061}, {"trace": 1.111, "density": 3.651, "ecdf": 0.718, "esf": 0.282}, {"trace": 1.041, "density": 4.445, "ecdf": 0.423, "esf": 0.577}, {"trace": 1.047, "density": 4.446, "ecdf": 0.448, "esf": 0.552}, {"trace": 1.022, "density": 4.364, "ecdf": 0.342, "esf": 0.658}, {"trace": 0.98, "density": 3.191, "ecdf": 0.173, "esf": 0.827}, {"trace": 1.086, "density": 4.109, "ecdf": 0.619, "esf": 0.381}, {"trace": 0.949, "density": 2.149, "ecdf": 0.088, "esf": 0.912}, {"trace": 1.133, "density": 3.02, "ecdf": 0.793, "esf": 0.207}, {"trace": 1.011, "density": 4.243, "ecdf": 0.292, "esf": 0.708}, {"trace": 1.104, "density": 3.795, "ecdf": 0.695, "esf": 0.305}, {"trace": 1.182, "density": 1.654, "ecdf": 0.907, "esf": 0.093}, {"trace": 1.177, "density": 1.772, "ecdf": 0.899, "esf": 0.101}, {"trace": 1.198, "density": 1.325, "ecdf": 0.928, "esf": 0.072}, {"trace": 0.997, "density": 3.85, "ecdf": 0.229, "esf": 0.771}, {"trace": 1.073, "density": 4.282, "ecdf": 0.562, "esf": 0.438}, {"trace": 1.035, "density": 4.43, "ecdf": 0.396, "esf": 0.604}, {"trace": 1.034, "density": 4.424, "ecdf": 0.387, "esf": 0.613}, {"trace": 1.16, "density": 2.267, "ecdf": 0.864, "esf": 0.136}, {"trace": 0.993, "density": 3.704, "ecdf": 0.213, "esf": 0.787}, {"trace": 1.029, "density": 4.401, "ecdf": 0.366, "esf": 0.634}, {"trace": 1.01, "density": 4.22, "ecdf": 0.286, "esf": 0.714}, {"trace": 1.055, "density": 4.422, "ecdf": 0.486, "esf": 0.514}, {"trace": 1.013, "density": 4.27, "ecdf": 0.299, "esf": 0.701}, {"trace": 0.948, "density": 2.122, "ecdf": 0.087, "esf": 0.914}, {"trace": 1.162, "density": 2.202, "ecdf": 0.869, "esf": 0.131}, {"trace": 1.201, "density": 1.272, "ecdf": 0.932, "esf": 0.068}, {"trace": 1.185, "density": 1.58, "ecdf": 0.911, "esf": 0.089}, {"trace": 1.037, "density": 4.437, "ecdf": 0.406, "esf": 0.594}, {"trace": 1.143, "density": 2.734, "ecdf": 0.821, "esf": 0.179}, {"trace": 1.102, "density": 3.84, "ecdf": 0.685, "esf": 0.315}, {"trace": 1.055, "density": 4.423, "ecdf": 0.485, "esf": 0.515}, {"trace": 1.094, "density": 3.976, "ecdf": 0.653, "esf": 0.347}, {"trace": 1.361, "density": 0.054, "ecdf": 0.998, "esf": 0.002}, {"trace": 1.318, "density": 0.137, "ecdf": 0.994, "esf": 0.006}, {"trace": 1.249, "density": 0.554, "ecdf": 0.974, "esf": 0.026}, {"trace": 0.898, "density": 0.686, "ecdf": 0.021, "esf": 0.979}, {"trace": 1.089, "density": 4.053, "ecdf": 0.632, "esf": 0.368}, {"trace": 1.1, "density": 3.875, "ecdf": 0.676, "esf": 0.324}, {"trace": 1.272, "density": 0.372, "ecdf": 0.984, "esf": 0.016}, {"trace": 0.967, "density": 2.725, "ecdf": 0.135, "esf": 0.865}, {"trace": 1.133, "density": 3.022, "ecdf": 0.793, "esf": 0.207}, {"trace": 1.251, "density": 0.53, "ecdf": 0.975, "esf": 0.025}, {"trace": 1.042, "density": 4.446, "ecdf": 0.427, "esf": 0.573}, {"trace": 1.074, "density": 4.263, "ecdf": 0.569, "esf": 0.431}, {"trace": 1.079, "density": 4.205, "ecdf": 0.59, "esf": 0.41}, {"trace": 1.175, "density": 1.837, "ecdf": 0.894, "esf": 0.106}, {"trace": 1.312, "density": 0.159, "ecdf": 0.993, "esf": 0.007}, {"trace": 0.919, "density": 1.21, "ecdf": 0.038, "esf": 0.962}, {"trace": 0.912, "density": 1.005, "ecdf": 0.031, "esf": 0.969}, {"trace": 1.113, "density": 3.593, "ecdf": 0.726, "esf": 0.274}, {"trace": 1.12, "density": 3.428, "ecdf": 0.749, "esf": 0.251}, {"trace": 1.265, "density": 0.424, "ecdf": 0.98, "esf": 0.02}, {"trace": 1.244, "density": 0.6, "ecdf": 0.97, "esf": 0.03}, {"trace": 0.899, "density": 0.695, "ecdf": 0.021, "esf": 0.979}, {"trace": 0.876, "density": 0.397, "ecdf": 0.01, "esf": 0.99}, {"trace": 1.204, "density": 1.213, "ecdf": 0.938, "esf": 0.062}, {"trace": 1.14, "density": 2.811, "ecdf": 0.814, "esf": 0.186}, {"trace": 1.14, "density": 2.827, "ecdf": 0.812, "esf": 0.188}, {"trace": 1.089, "density": 4.06, "ecdf": 0.631, "esf": 0.369}, {"trace": 1.011, "density": 4.242, "ecdf": 0.291, "esf": 0.709}, {"trace": 1.022, "density": 4.364, "ecdf": 0.341, "esf": 0.659}, {"trace": 1.034, "density": 4.425, "ecdf": 0.387, "esf": 0.613}, {"trace": 1.022, "density": 4.36, "ecdf": 0.339, "esf": 0.661}, {"trace": 0.952, "density": 2.24, "ecdf": 0.095, "esf": 0.905}, {"trace": 1.256, "density": 0.491, "ecdf": 0.977, "esf": 0.023}, {"trace": 1.246, "density": 0.581, "ecdf": 0.972, "esf": 0.028}, {"trace": 1.358, "density": 0.058, "ecdf": 0.998, "esf": 0.002}, {"trace": 1.061, "density": 4.39, "ecdf": 0.51, "esf": 0.49}, {"trace": 1.022, "density": 4.364, "ecdf": 0.342, "esf": 0.658}, {"trace": 1.01, "density": 4.223, "ecdf": 0.286, "esf": 0.714}, {"trace": 1.06, "density": 4.398, "ecdf": 0.505, "esf": 0.495}, {"trace": 1.038, "density": 4.438, "ecdf": 0.409, "esf": 0.591}, {"trace": 1.073, "density": 4.273, "ecdf": 0.566, "esf": 0.434}, {"trace": 0.987, "density": 3.442, "ecdf": 0.192, "esf": 0.808}, {"trace": 1.015, "density": 4.302, "ecdf": 0.311, "esf": 0.689}, {"trace": 1.01, "density": 4.218, "ecdf": 0.285, "esf": 0.715}, {"trace": 0.988, "density": 3.497, "ecdf": 0.196, "esf": 0.804}, {"trace": 1.155, "density": 2.41, "ecdf": 0.853, "esf": 0.147}, {"trace": 1.059, "density": 4.405, "ecdf": 0.5, "esf": 0.5}, {"trace": 1.167, "density": 2.053, "ecdf": 0.88, "esf": 0.12}, {"trace": 1.152, "density": 2.486, "ecdf": 0.844, "esf": 0.156}, {"trace": 1.092, "density": 4.01, "ecdf": 0.644, "esf": 0.356}, {"trace": 1.007, "density": 4.163, "ecdf": 0.274, "esf": 0.726}, {"trace": 1.036, "density": 4.433, "ecdf": 0.4, "esf": 0.6}, {"trace": 0.999, "density": 3.925, "ecdf": 0.238, "esf": 0.762}, {"trace": 1.074, "density": 4.264, "ecdf": 0.568, "esf": 0.432}, {"trace": 1.07, "density": 4.306, "ecdf": 0.554, "esf": 0.446}, {"trace": 0.887, "density": 0.526, "ecdf": 0.016, "esf": 0.984}, {"trace": 0.836, "density": 0.097, "ecdf": 0.002, "esf": 0.998}, {"trace": 1.258, "density": 0.474, "ecdf": 0.978, "esf": 0.022}, {"trace": 1.214, "density": 1.019, "ecdf": 0.949, "esf": 0.051}, {"trace": 0.939, "density": 1.852, "ecdf": 0.072, "esf": 0.928}, {"trace": 1.214, "density": 1.01, "ecdf": 0.95, "esf": 0.05}, {"trace": 0.958, "density": 2.45, "ecdf": 0.11, "esf": 0.89}, {"trace": 0.934, "density": 1.709, "ecdf": 0.062, "esf": 0.938}, {"trace": 0.926, "density": 1.454, "ecdf": 0.046, "esf": 0.954}, {"trace": 1.148, "density": 2.614, "ecdf": 0.833, "esf": 0.167}, {"trace": 1.132, "density": 3.047, "ecdf": 0.79, "esf": 0.21}, {"trace": 1.188, "density": 1.513, "ecdf": 0.915, "esf": 0.085}, {"trace": 0.978, "density": 3.109, "ecdf": 0.168, "esf": 0.832}, {"trace": 0.954, "density": 2.297, "ecdf": 0.099, "esf": 0.901}, {"trace": 0.93, "density": 1.584, "ecdf": 0.053, "esf": 0.947}, {"trace": 1.131, "density": 3.077, "ecdf": 0.789, "esf": 0.211}, {"trace": 1.146, "density": 2.646, "ecdf": 0.83, "esf": 0.17}, {"trace": 1.026, "density": 4.39, "ecdf": 0.359, "esf": 0.641}, {"trace": 1.101, "density": 3.856, "ecdf": 0.681, "esf": 0.319}, {"trace": 1.096, "density": 3.943, "ecdf": 0.662, "esf": 0.338}, {"trace": 1.143, "density": 2.74, "ecdf": 0.82, "esf": 0.18}, {"trace": 1.049, "density": 4.444, "ecdf": 0.457, "esf": 0.543}, {"trace": 1.116, "density": 3.525, "ecdf": 0.736, "esf": 0.264}, {"trace": 1.154, "density": 2.43, "ecdf": 0.85, "esf": 0.15}, {"trace": 1.098, "density": 3.919, "ecdf": 0.667, "esf": 0.333}, {"trace": 0.962, "density": 2.55, "ecdf": 0.118, "esf": 0.882}, {"trace": 1.068, "density": 4.332, "ecdf": 0.544, "esf": 0.456}, {"trace": 1.026, "density": 4.387, "ecdf": 0.357, "esf": 0.643}, {"trace": 1.062, "density": 4.379, "ecdf": 0.519, "esf": 0.481}, {"trace": 1.263, "density": 0.441, "ecdf": 0.98, "esf": 0.02}, {"trace": 1.078, "density": 4.215, "ecdf": 0.586, "esf": 0.414}, {"trace": 0.974, "density": 2.959, "ecdf": 0.155, "esf": 0.845}, {"trace": 1.175, "density": 1.84, "ecdf": 0.894, "esf": 0.106}, {"trace": 1.075, "density": 4.251, "ecdf": 0.574, "esf": 0.426}, {"trace": 1.118, "density": 3.46, "ecdf": 0.744, "esf": 0.256}, {"trace": 0.905, "density": 0.825, "ecdf": 0.026, "esf": 0.974}, {"trace": 1.134, "density": 2.984, "ecdf": 0.797, "esf": 0.203}, {"trace": 1.137, "density": 2.922, "ecdf": 0.803, "esf": 0.197}, {"trace": 1.103, "density": 3.816, "ecdf": 0.691, "esf": 0.309}, {"trace": 1.106, "density": 3.767, "ecdf": 0.699, "esf": 0.301}, {"trace": 1.011, "density": 4.237, "ecdf": 0.29, "esf": 0.71}, {"trace": 1.055, "density": 4.421, "ecdf": 0.487, "esf": 0.513}, {"trace": 1.051, "density": 4.438, "ecdf": 0.468, "esf": 0.532}, {"trace": 1.04, "density": 4.443, "ecdf": 0.418, "esf": 0.582}, {"trace": 1.27, "density": 0.386, "ecdf": 0.983, "esf": 0.017}, {"trace": 1.071, "density": 4.296, "ecdf": 0.557, "esf": 0.443}, {"trace": 1.058, "density": 4.406, "ecdf": 0.499, "esf": 0.501}, {"trace": 0.99, "density": 3.563, "ecdf": 0.201, "esf": 0.799}, {"trace": 1.027, "density": 4.395, "ecdf": 0.363, "esf": 0.637}, {"trace": 1.033, "density": 4.422, "ecdf": 0.385, "esf": 0.615}, {"trace": 1.109, "density": 3.697, "ecdf": 0.711, "esf": 0.289}, {"trace": 0.966, "density": 2.687, "ecdf": 0.131, "esf": 0.869}, {"trace": 0.932, "density": 1.632, "ecdf": 0.056, "esf": 0.944}, {"trace": 1.204, "density": 1.203, "ecdf": 0.938, "esf": 0.062}, {"trace": 1.223, "density": 0.854, "ecdf": 0.956, "esf": 0.044}, {"trace": 1.138, "density": 2.883, "ecdf": 0.807, "esf": 0.193}, {"trace": 0.957, "density": 2.412, "ecdf": 0.107, "esf": 0.893}, {"trace": 1.164, "density": 2.161, "ecdf": 0.873, "esf": 0.127}, {"trace": 1.056, "density": 4.419, "ecdf": 0.489, "esf": 0.511}, {"trace": 1.01, "density": 4.22, "ecdf": 0.286, "esf": 0.714}, {"trace": 1.019, "density": 4.334, "ecdf": 0.324, "esf": 0.676}, {"trace": 1.064, "density": 4.37, "ecdf": 0.524, "esf": 0.476}, {"trace": 1.162, "density": 2.21, "ecdf": 0.869, "esf": 0.131}, {"trace": 1.093, "density": 3.998, "ecdf": 0.647, "esf": 0.353}, {"trace": 0.964, "density": 2.633, "ecdf": 0.126, "esf": 0.874}, {"trace": 1.004, "density": 4.096, "ecdf": 0.26, "esf": 0.74}, {"trace": 1.013, "density": 4.265, "ecdf": 0.297, "esf": 0.703}, {"trace": 1.08, "density": 4.191, "ecdf": 0.596, "esf": 0.403}, {"trace": 1.017, "density": 4.317, "ecdf": 0.318, "esf": 0.682}, {"trace": 0.984, "density": 3.317, "ecdf": 0.181, "esf": 0.819}, {"trace": 0.919, "density": 1.211, "ecdf": 0.038, "esf": 0.962}, {"trace": 0.999, "density": 3.922, "ecdf": 0.238, "esf": 0.762}, {"trace": 1.105, "density": 3.792, "ecdf": 0.696, "esf": 0.304}, {"trace": 1.216, "density": 0.974, "ecdf": 0.95, "esf": 0.049}, {"trace": 0.985, "density": 3.356, "ecdf": 0.185, "esf": 0.815}, {"trace": 1.156, "density": 2.384, "ecdf": 0.855, "esf": 0.145}, {"trace": 0.944, "density": 1.996, "ecdf": 0.08, "esf": 0.92}, {"trace": 1.051, "density": 4.437, "ecdf": 0.47, "esf": 0.53}, {"trace": 1.077, "density": 4.23, "ecdf": 0.58, "esf": 0.42}, {"trace": 1.033, "density": 4.422, "ecdf": 0.385, "esf": 0.615}, {"trace": 1.026, "density": 4.388, "ecdf": 0.358, "esf": 0.642}, {"trace": 1.076, "density": 4.242, "ecdf": 0.576, "esf": 0.424}, {"trace": 1.024, "density": 4.375, "ecdf": 0.348, "esf": 0.652}, {"trace": 0.906, "density": 0.831, "ecdf": 0.027, "esf": 0.973}, {"trace": 1.09, "density": 4.044, "ecdf": 0.635, "esf": 0.365}, {"trace": 1.014, "density": 4.286, "ecdf": 0.305, "esf": 0.695}, {"trace": 1.047, "density": 4.446, "ecdf": 0.448, "esf": 0.552}, {"trace": 1.044, "density": 4.448, "ecdf": 0.437, "esf": 0.563}, {"trace": 1.103, "density": 3.831, "ecdf": 0.687, "esf": 0.313}, {"trace": 1.088, "density": 4.075, "ecdf": 0.628, "esf": 0.372}, {"trace": 1.146, "density": 2.67, "ecdf": 0.828, "esf": 0.172}, {"trace": 1.035, "density": 4.429, "ecdf": 0.394, "esf": 0.606}, {"trace": 0.981, "density": 3.211, "ecdf": 0.174, "esf": 0.826}, {"trace": 1.139, "density": 2.85, "ecdf": 0.811, "esf": 0.189}, {"trace": 1.069, "density": 4.319, "ecdf": 0.549, "esf": 0.451}, {"trace": 1.065, "density": 4.358, "ecdf": 0.532, "esf": 0.468}, {"trace": 1.039, "density": 4.442, "ecdf": 0.417, "esf": 0.583}, {"trace": 1.122, "density": 3.362, "ecdf": 0.758, "esf": 0.242}, {"trace": 1.072, "density": 4.289, "ecdf": 0.559, "esf": 0.441}, {"trace": 1.043, "density": 4.447, "ecdf": 0.434, "esf": 0.566}, {"trace": 1.051, "density": 4.438, "ecdf": 0.468, "esf": 0.532}, {"trace": 1.097, "density": 3.939, "ecdf": 0.663, "esf": 0.337}, {"trace": 1.03, "density": 4.408, "ecdf": 0.372, "esf": 0.628}, {"trace": 0.93, "density": 1.565, "ecdf": 0.052, "esf": 0.948}, {"trace": 1.266, "density": 0.412, "ecdf": 0.981, "esf": 0.019}, {"trace": 0.905, "density": 0.817, "ecdf": 0.026, "esf": 0.974}, {"trace": 1.172, "density": 1.919, "ecdf": 0.89, "esf": 0.11}, {"trace": 0.986, "density": 3.391, "ecdf": 0.188, "esf": 0.812}, {"trace": 1.073, "density": 4.283, "ecdf": 0.562, "esf": 0.438}, {"trace": 1.057, "density": 4.414, "ecdf": 0.494, "esf": 0.506}, {"trace": 1.047, "density": 4.447, "ecdf": 0.448, "esf": 0.552}, {"trace": 0.977, "density": 3.049, "ecdf": 0.162, "esf": 0.838}, {"trace": 1.193, "density": 1.418, "ecdf": 0.921, "esf": 0.079}, {"trace": 1.086, "density": 4.105, "ecdf": 0.62, "esf": 0.38}, {"trace": 1.019, "density": 4.336, "ecdf": 0.325, "esf": 0.675}, {"trace": 1.191, "density": 1.448, "ecdf": 0.918, "esf": 0.082}, {"trace": 0.882, "density": 0.467, "ecdf": 0.012, "esf": 0.988}, {"trace": 1.287, "density": 0.265, "ecdf": 0.988, "esf": 0.012}, {"trace": 1.267, "density": 0.405, "ecdf": 0.982, "esf": 0.018}, {"trace": 1.1, "density": 3.882, "ecdf": 0.675, "esf": 0.325}, {"trace": 1.099, "density": 3.894, "ecdf": 0.672, "esf": 0.328}, {"trace": 1.069, "density": 4.32, "ecdf": 0.549, "esf": 0.451}, {"trace": 0.997, "density": 3.847, "ecdf": 0.228, "esf": 0.772}, {"trace": 1.007, "density": 4.159, "ecdf": 0.273, "esf": 0.727}, {"trace": 1.136, "density": 2.931, "ecdf": 0.802, "esf": 0.198}, {"trace": 1.128, "density": 3.162, "ecdf": 0.781, "esf": 0.219}, {"trace": 0.971, "density": 2.869, "ecdf": 0.147, "esf": 0.853}, {"trace": 0.955, "density": 2.347, "ecdf": 0.103, "esf": 0.897}, {"trace": 1.033, "density": 4.421, "ecdf": 0.383, "esf": 0.617}, {"trace": 1.041, "density": 4.445, "ecdf": 0.423, "esf": 0.577}, {"trace": 1.049, "density": 4.443, "ecdf": 0.459, "esf": 0.541}, {"trace": 1.096, "density": 3.943, "ecdf": 0.662, "esf": 0.338}, {"trace": 0.963, "density": 2.6, "ecdf": 0.123, "esf": 0.877}, {"trace": 1.086, "density": 4.098, "ecdf": 0.623, "esf": 0.377}, {"trace": 1.156, "density": 2.39, "ecdf": 0.855, "esf": 0.145}, {"trace": 1.159, "density": 2.284, "ecdf": 0.863, "esf": 0.137}, {"trace": 1.03, "density": 4.407, "ecdf": 0.371, "esf": 0.629}, {"trace": 0.999, "density": 3.922, "ecdf": 0.238, "esf": 0.762}, {"trace": 1.087, "density": 4.086, "ecdf": 0.625, "esf": 0.375}, {"trace": 1.349, "density": 0.072, "ecdf": 0.997, "esf": 0.003}, {"trace": 0.862, "density": 0.264, "ecdf": 0.005, "esf": 0.995}, {"trace": 1.064, "density": 4.366, "ecdf": 0.527, "esf": 0.473}, {"trace": 0.992, "density": 3.673, "ecdf": 0.211, "esf": 0.789}, {"trace": 1.207, "density": 1.152, "ecdf": 0.942, "esf": 0.058}, {"trace": 1.012, "density": 4.262, "ecdf": 0.295, "esf": 0.705}, {"trace": 1.096, "density": 3.954, "ecdf": 0.659, "esf": 0.341}, {"trace": 0.996, "density": 3.805, "ecdf": 0.222, "esf": 0.778}, {"trace": 1.244, "density": 0.599, "ecdf": 0.97, "esf": 0.029}, {"trace": 1.106, "density": 3.766, "ecdf": 0.7, "esf": 0.3}, {"trace": 1.03, "density": 4.409, "ecdf": 0.373, "esf": 0.627}, {"trace": 1.084, "density": 4.126, "ecdf": 0.616, "esf": 0.384}, {"trace": 1.006, "density": 4.147, "ecdf": 0.271, "esf": 0.729}, {"trace": 1.063, "density": 4.375, "ecdf": 0.521, "esf": 0.479}, {"trace": 1.007, "density": 4.169, "ecdf": 0.276, "esf": 0.724}, {"trace": 0.97, "density": 2.829, "ecdf": 0.143, "esf": 0.857}, {"trace": 1.035, "density": 4.428, "ecdf": 0.392, "esf": 0.608}, {"trace": 1.018, "density": 4.329, "ecdf": 0.322, "esf": 0.678}, {"trace": 0.835, "density": 0.093, "ecdf": 0.002, "esf": 0.998}, {"trace": 1.078, "density": 4.218, "ecdf": 0.585, "esf": 0.415}, {"trace": 1.01, "density": 4.224, "ecdf": 0.287, "esf": 0.713}, {"trace": 1.207, "density": 1.16, "ecdf": 0.941, "esf": 0.059}, {"trace": 0.938, "density": 1.835, "ecdf": 0.071, "esf": 0.929}, {"trace": 1.11, "density": 3.664, "ecdf": 0.717, "esf": 0.283}, {"trace": 1.143, "density": 2.737, "ecdf": 0.821, "esf": 0.179}, {"trace": 1.249, "density": 0.554, "ecdf": 0.974, "esf": 0.026}, {"trace": 1.127, "density": 3.216, "ecdf": 0.774, "esf": 0.226}, {"trace": 1.042, "density": 4.446, "ecdf": 0.425, "esf": 0.575}, {"trace": 1.114, "density": 3.578, "ecdf": 0.729, "esf": 0.271}, {"trace": 1.112, "density": 3.637, "ecdf": 0.721, "esf": 0.279}, {"trace": 0.978, "density": 3.092, "ecdf": 0.167, "esf": 0.833}, {"trace": 1.161, "density": 2.238, "ecdf": 0.867, "esf": 0.133}, {"trace": 0.95, "density": 2.198, "ecdf": 0.092, "esf": 0.908}, {"trace": 1.103, "density": 3.816, "ecdf": 0.691, "esf": 0.309}, {"trace": 1.271, "density": 0.381, "ecdf": 0.984, "esf": 0.016}, {"trace": 1.175, "density": 1.823, "ecdf": 0.896, "esf": 0.104}, {"trace": 1.212, "density": 1.059, "ecdf": 0.946, "esf": 0.054}, {"trace": 1.059, "density": 4.404, "ecdf": 0.5, "esf": 0.5}, {"trace": 1.113, "density": 3.59, "ecdf": 0.727, "esf": 0.273}, {"trace": 0.953, "density": 2.293, "ecdf": 0.099, "esf": 0.901}, {"trace": 1.217, "density": 0.957, "ecdf": 0.952, "esf": 0.048}, {"trace": 1.222, "density": 0.868, "ecdf": 0.956, "esf": 0.044}, {"trace": 0.902, "density": 0.763, "ecdf": 0.024, "esf": 0.976}, {"trace": 1.094, "density": 3.98, "ecdf": 0.652, "esf": 0.348}, {"trace": 1.027, "density": 4.39, "ecdf": 0.36, "esf": 0.641}, {"trace": 1.036, "density": 4.434, "ecdf": 0.402, "esf": 0.598}, {"trace": 1.106, "density": 3.766, "ecdf": 0.7, "esf": 0.3}, {"trace": 0.928, "density": 1.519, "ecdf": 0.049, "esf": 0.951}, {"trace": 1.232, "density": 0.726, "ecdf": 0.962, "esf": 0.038}, {"trace": 1.171, "density": 1.945, "ecdf": 0.888, "esf": 0.112}, {"trace": 0.995, "density": 3.798, "ecdf": 0.221, "esf": 0.779}, {"trace": 1.18, "density": 1.691, "ecdf": 0.904, "esf": 0.096}, {"trace": 1.212, "density": 1.049, "ecdf": 0.947, "esf": 0.053}, {"trace": 1.201, "density": 1.265, "ecdf": 0.933, "esf": 0.067}, {"trace": 1.07, "density": 4.314, "ecdf": 0.551, "esf": 0.449}, {"trace": 1.154, "density": 2.436, "ecdf": 0.849, "esf": 0.151}, {"trace": 1.07, "density": 4.308, "ecdf": 0.553, "esf": 0.447}, {"trace": 1.084, "density": 4.133, "ecdf": 0.614, "esf": 0.386}, {"trace": 1.014, "density": 4.281, "ecdf": 0.303, "esf": 0.697}, {"trace": 0.971, "density": 2.846, "ecdf": 0.145, "esf": 0.855}, {"trace": 1.057, "density": 4.414, "ecdf": 0.493, "esf": 0.507}, {"trace": 0.998, "density": 3.893, "ecdf": 0.234, "esf": 0.766}, {"trace": 1.017, "density": 4.317, "ecdf": 0.318, "esf": 0.682}, {"trace": 1.144, "density": 2.704, "ecdf": 0.824, "esf": 0.176}, {"trace": 1.102, "density": 3.839, "ecdf": 0.686, "esf": 0.314}, {"trace": 1.108, "density": 3.716, "ecdf": 0.707, "esf": 0.293}, {"trace": 0.855, "density": 0.203, "ecdf": 0.004, "esf": 0.996}, {"trace": 1.118, "density": 3.471, "ecdf": 0.742, "esf": 0.258}, {"trace": 1.315, "density": 0.147, "ecdf": 0.994, "esf": 0.006}, {"trace": 1.015, "density": 4.292, "ecdf": 0.308, "esf": 0.692}, {"trace": 1.049, "density": 4.442, "ecdf": 0.461, "esf": 0.539}, {"trace": 1.06, "density": 4.396, "ecdf": 0.506, "esf": 0.494}, {"trace": 1.038, "density": 4.438, "ecdf": 0.409, "esf": 0.591}, {"trace": 1.173, "density": 1.877, "ecdf": 0.892, "esf": 0.108}, {"trace": 0.94, "density": 1.885, "ecdf": 0.074, "esf": 0.926}, {"trace": 0.954, "density": 2.317, "ecdf": 0.1, "esf": 0.9}, {"trace": 1.012, "density": 4.254, "ecdf": 0.294, "esf": 0.706}, {"trace": 1.042, "density": 4.447, "ecdf": 0.429, "esf": 0.571}, {"trace": 1.13, "density": 3.102, "ecdf": 0.787, "esf": 0.213}, {"trace": 1.033, "density": 4.422, "ecdf": 0.385, "esf": 0.615}, {"trace": 1.037, "density": 4.436, "ecdf": 0.404, "esf": 0.596}, {"trace": 1.088, "density": 4.077, "ecdf": 0.627, "esf": 0.373}, {"trace": 0.906, "density": 0.847, "ecdf": 0.028, "esf": 0.972}, {"trace": 1.186, "density": 1.558, "ecdf": 0.912, "esf": 0.088}, {"trace": 1.229, "density": 0.762, "ecdf": 0.961, "esf": 0.039}, {"trace": 1.181, "density": 1.661, "ecdf": 0.907, "esf": 0.093}, {"trace": 1.038, "density": 4.439, "ecdf": 0.41, "esf": 0.59}, {"trace": 1.046, "density": 4.447, "ecdf": 0.445, "esf": 0.555}, {"trace": 1.076, "density": 4.246, "ecdf": 0.575, "esf": 0.425}, {"trace": 1.11, "density": 3.679, "ecdf": 0.714, "esf": 0.286}, {"trace": 1.108, "density": 3.717, "ecdf": 0.707, "esf": 0.293}, {"trace": 0.945, "density": 2.044, "ecdf": 0.082, "esf": 0.918}, {"trace": 1.057, "density": 4.413, "ecdf": 0.494, "esf": 0.506}, {"trace": 1.043, "density": 4.447, "ecdf": 0.432, "esf": 0.568}, {"trace": 0.998, "density": 3.881, "ecdf": 0.232, "esf": 0.768}, {"trace": 0.985, "density": 3.367, "ecdf": 0.186, "esf": 0.814}, {"trace": 1.181, "density": 1.684, "ecdf": 0.905, "esf": 0.095}, {"trace": 1.023, "density": 4.369, "ecdf": 0.345, "esf": 0.655}, {"trace": 0.996, "density": 3.834, "ecdf": 0.227, "esf": 0.773}, {"trace": 1.006, "density": 4.143, "ecdf": 0.269, "esf": 0.731}, {"trace": 1.037, "density": 4.435, "ecdf": 0.404, "esf": 0.596}, {"trace": 1.088, "density": 4.076, "ecdf": 0.628, "esf": 0.372}, {"trace": 1.092, "density": 4.019, "ecdf": 0.641, "esf": 0.359}, {"trace": 1.038, "density": 4.44, "ecdf": 0.412, "esf": 0.588}, {"trace": 1.122, "density": 3.353, "ecdf": 0.758, "esf": 0.242}, {"trace": 1.057, "density": 4.413, "ecdf": 0.494, "esf": 0.506}, {"trace": 1.11, "density": 3.664, "ecdf": 0.716, "esf": 0.284}, {"trace": 1.043, "density": 4.447, "ecdf": 0.43, "esf": 0.57}, {"trace": 1.089, "density": 4.06, "ecdf": 0.631, "esf": 0.369}, {"trace": 1.032, "density": 4.416, "ecdf": 0.379, "esf": 0.621}, {"trace": 1.014, "density": 4.291, "ecdf": 0.307, "esf": 0.693}, {"trace": 1.178, "density": 1.741, "ecdf": 0.901, "esf": 0.099}, {"trace": 1.125, "density": 3.261, "ecdf": 0.769, "esf": 0.231}, {"trace": 1.223, "density": 0.863, "ecdf": 0.956, "esf": 0.044}, {"trace": 1.048, "density": 4.445, "ecdf": 0.453, "esf": 0.547}, {"trace": 0.955, "density": 2.349, "ecdf": 0.103, "esf": 0.897}, {"trace": 1.129, "density": 3.159, "ecdf": 0.781, "esf": 0.219}, {"trace": 1.041, "density": 4.445, "ecdf": 0.422, "esf": 0.578}, {"trace": 0.973, "density": 2.931, "ecdf": 0.152, "esf": 0.848}, {"trace": 1.169, "density": 1.989, "ecdf": 0.884, "esf": 0.116}, {"trace": 0.975, "density": 2.993, "ecdf": 0.157, "esf": 0.843}, {"trace": 1.078, "density": 4.217, "ecdf": 0.585, "esf": 0.415}, {"trace": 1.055, "density": 4.422, "ecdf": 0.486, "esf": 0.514}, {"trace": 0.976, "density": 3.031, "ecdf": 0.16, "esf": 0.84}, {"trace": 1.01, "density": 4.227, "ecdf": 0.287, "esf": 0.713}, {"trace": 1.113, "density": 3.598, "ecdf": 0.726, "esf": 0.274}, {"trace": 1.128, "density": 3.163, "ecdf": 0.781, "esf": 0.219}, {"trace": 0.969, "density": 2.798, "ecdf": 0.14, "esf": 0.86}, {"trace": 0.93, "density": 1.572, "ecdf": 0.052, "esf": 0.948}, {"trace": 1.002, "density": 4.014, "ecdf": 0.25, "esf": 0.75}, {"trace": 1.193, "density": 1.408, "ecdf": 0.922, "esf": 0.078}, {"trace": 0.918, "density": 1.165, "ecdf": 0.037, "esf": 0.963}, {"trace": 0.994, "density": 3.747, "ecdf": 0.216, "esf": 0.784}, {"trace": 1.021, "density": 4.355, "ecdf": 0.336, "esf": 0.664}, {"trace": 1.265, "density": 0.423, "ecdf": 0.98, "esf": 0.019}, {"trace": 1.048, "density": 4.445, "ecdf": 0.453, "esf": 0.547}, {"trace": 1.172, "density": 1.912, "ecdf": 0.89, "esf": 0.11}, {"trace": 1.036, "density": 4.433, "ecdf": 0.4, "esf": 0.6}, {"trace": 1.025, "density": 4.382, "ecdf": 0.353, "esf": 0.647}, {"trace": 1.221, "density": 0.894, "ecdf": 0.954, "esf": 0.046}, {"trace": 1.041, "density": 4.446, "ecdf": 0.424, "esf": 0.576}, {"trace": 1.091, "density": 4.024, "ecdf": 0.639, "esf": 0.361}, {"trace": 1.035, "density": 4.429, "ecdf": 0.394, "esf": 0.606}, {"trace": 0.959, "density": 2.479, "ecdf": 0.112, "esf": 0.888}, {"trace": 0.881, "density": 0.453, "ecdf": 0.012, "esf": 0.988}, {"trace": 0.906, "density": 0.839, "ecdf": 0.027, "esf": 0.973}, {"trace": 0.968, "density": 2.766, "ecdf": 0.138, "esf": 0.862}, {"trace": 0.921, "density": 1.279, "ecdf": 0.04, "esf": 0.96}, {"trace": 1.079, "density": 4.203, "ecdf": 0.592, "esf": 0.408}, {"trace": 0.991, "density": 3.618, "ecdf": 0.206, "esf": 0.794}, {"trace": 0.972, "density": 2.873, "ecdf": 0.148, "esf": 0.852}, {"trace": 0.936, "density": 1.773, "ecdf": 0.066, "esf": 0.934}, {"trace": 1.142, "density": 2.756, "ecdf": 0.818, "esf": 0.182}, {"trace": 1.222, "density": 0.864, "ecdf": 0.956, "esf": 0.044}, {"trace": 1.055, "density": 4.422, "ecdf": 0.486, "esf": 0.514}, {"trace": 1.176, "density": 1.792, "ecdf": 0.898, "esf": 0.102}, {"trace": 1.032, "density": 4.416, "ecdf": 0.38, "esf": 0.62}, {"trace": 1.014, "density": 4.284, "ecdf": 0.304, "esf": 0.696}, {"trace": 0.961, "density": 2.533, "ecdf": 0.116, "esf": 0.884}, {"trace": 1.201, "density": 1.267, "ecdf": 0.933, "esf": 0.067}, {"trace": 1.062, "density": 4.384, "ecdf": 0.515, "esf": 0.485}, {"trace": 1.111, "density": 3.649, "ecdf": 0.718, "esf": 0.282}, {"trace": 1.051, "density": 4.439, "ecdf": 0.467, "esf": 0.533}, {"trace": 1.126, "density": 3.252, "ecdf": 0.77, "esf": 0.23}, {"trace": 0.948, "density": 2.138, "ecdf": 0.087, "esf": 0.913}, {"trace": 0.962, "density": 2.555, "ecdf": 0.119, "esf": 0.881}, {"trace": 1.021, "density": 4.354, "ecdf": 0.335, "esf": 0.665}, {"trace": 1.042, "density": 4.446, "ecdf": 0.428, "esf": 0.572}, {"trace": 1.094, "density": 3.975, "ecdf": 0.653, "esf": 0.347}, {"trace": 1.147, "density": 2.632, "ecdf": 0.831, "esf": 0.169}, {"trace": 0.96, "density": 2.503, "ecdf": 0.114, "esf": 0.886}, {"trace": 1.191, "density": 1.449, "ecdf": 0.918, "esf": 0.082}, {"trace": 1.01, "density": 4.215, "ecdf": 0.284, "esf": 0.716}, {"trace": 0.98, "density": 3.173, "ecdf": 0.171, "esf": 0.829}, {"trace": 0.993, "density": 3.709, "ecdf": 0.214, "esf": 0.786}, {"trace": 0.995, "density": 3.792, "ecdf": 0.22, "esf": 0.78}, {"trace": 1.048, "density": 4.445, "ecdf": 0.454, "esf": 0.546}, {"trace": 1.066, "density": 4.353, "ecdf": 0.534, "esf": 0.466}, {"trace": 0.973, "density": 2.932, "ecdf": 0.152, "esf": 0.848}, {"trace": 1.072, "density": 4.288, "ecdf": 0.559, "esf": 0.441}, {"trace": 1.006, "density": 4.139, "ecdf": 0.269, "esf": 0.731}, {"trace": 0.936, "density": 1.768, "ecdf": 0.066, "esf": 0.934}, {"trace": 1.073, "density": 4.274, "ecdf": 0.566, "esf": 0.434}, {"trace": 1.122, "density": 3.345, "ecdf": 0.759, "esf": 0.241}, {"trace": 1.131, "density": 3.1, "ecdf": 0.787, "esf": 0.213}, {"trace": 0.969, "density": 2.795, "ecdf": 0.14, "esf": 0.86}, {"trace": 1.237, "density": 0.667, "ecdf": 0.966, "esf": 0.034}, {"trace": 0.931, "density": 1.625, "ecdf": 0.056, "esf": 0.944}, {"trace": 0.932, "density": 1.644, "ecdf": 0.058, "esf": 0.942}, {"trace": 1.023, "density": 4.371, "ecdf": 0.346, "esf": 0.654}, {"trace": 1.005, "density": 4.118, "ecdf": 0.264, "esf": 0.736}, {"trace": 1.028, "density": 4.399, "ecdf": 0.365, "esf": 0.635}, {"trace": 1.023, "density": 4.371, "ecdf": 0.346, "esf": 0.654}, {"trace": 1.166, "density": 2.101, "ecdf": 0.877, "esf": 0.123}, {"trace": 1.005, "density": 4.121, "ecdf": 0.265, "esf": 0.735}, {"trace": 0.986, "density": 3.391, "ecdf": 0.188, "esf": 0.812}, {"trace": 1.057, "density": 4.415, "ecdf": 0.492, "esf": 0.508}, {"trace": 1.16, "density": 2.261, "ecdf": 0.865, "esf": 0.135}, {"trace": 1.144, "density": 2.719, "ecdf": 0.823, "esf": 0.177}, {"trace": 1.053, "density": 4.433, "ecdf": 0.477, "esf": 0.523}, {"trace": 1.059, "density": 4.404, "ecdf": 0.501, "esf": 0.499}, {"trace": 1.109, "density": 3.708, "ecdf": 0.71, "esf": 0.29}, {"trace": 1.141, "density": 2.793, "ecdf": 0.815, "esf": 0.185}, {"trace": 1.018, "density": 4.331, "ecdf": 0.323, "esf": 0.677}, {"trace": 1.003, "density": 4.05, "ecdf": 0.254, "esf": 0.746}, {"trace": 1.175, "density": 1.839, "ecdf": 0.894, "esf": 0.106}, {"trace": 1.115, "density": 3.549, "ecdf": 0.733, "esf": 0.267}, {"trace": 0.932, "density": 1.642, "ecdf": 0.057, "esf": 0.943}, {"trace": 1.113, "density": 3.609, "ecdf": 0.725, "esf": 0.275}, {"trace": 1.051, "density": 4.438, "ecdf": 0.469, "esf": 0.531}, {"trace": 1.073, "density": 4.278, "ecdf": 0.563, "esf": 0.437}, {"trace": 1.07, "density": 4.316, "ecdf": 0.55, "esf": 0.45}, {"trace": 0.973, "density": 2.921, "ecdf": 0.15, "esf": 0.85}, {"trace": 1.129, "density": 3.147, "ecdf": 0.782, "esf": 0.218}, {"trace": 1.059, "density": 4.401, "ecdf": 0.503, "esf": 0.497}, {"trace": 1.049, "density": 4.444, "ecdf": 0.458, "esf": 0.542}, {"trace": 0.966, "density": 2.69, "ecdf": 0.131, "esf": 0.869}, {"trace": 1.097, "density": 3.939, "ecdf": 0.663, "esf": 0.337}, {"trace": 1.034, "density": 4.425, "ecdf": 0.388, "esf": 0.612}, {"trace": 1.06, "density": 4.399, "ecdf": 0.505, "esf": 0.495}, {"trace": 1.076, "density": 4.242, "ecdf": 0.576, "esf": 0.424}, {"trace": 1.007, "density": 4.157, "ecdf": 0.273, "esf": 0.727}, {"trace": 0.982, "density": 3.247, "ecdf": 0.176, "esf": 0.824}, {"trace": 0.908, "density": 0.887, "ecdf": 0.029, "esf": 0.971}, {"trace": 0.874, "density": 0.374, "ecdf": 0.009, "esf": 0.991}, {"trace": 1.066, "density": 4.347, "ecdf": 0.537, "esf": 0.463}, {"trace": 0.961, "density": 2.543, "ecdf": 0.118, "esf": 0.882}, {"trace": 1.259, "density": 0.467, "ecdf": 0.978, "esf": 0.022}, {"trace": 1.205, "density": 1.187, "ecdf": 0.939, "esf": 0.061}, {"trace": 0.949, "density": 2.17, "ecdf": 0.09, "esf": 0.91}, {"trace": 1.204, "density": 1.203, "ecdf": 0.938, "esf": 0.062}, {"trace": 0.93, "density": 1.59, "ecdf": 0.053, "esf": 0.947}, {"trace": 0.877, "density": 0.406, "ecdf": 0.01, "esf": 0.99}, {"trace": 1.138, "density": 2.877, "ecdf": 0.807, "esf": 0.193}, {"trace": 1.099, "density": 3.902, "ecdf": 0.67, "esf": 0.33}, {"trace": 0.995, "density": 3.767, "ecdf": 0.218, "esf": 0.782}, {"trace": 1.015, "density": 4.303, "ecdf": 0.311, "esf": 0.689}, {"trace": 0.955, "density": 2.328, "ecdf": 0.101, "esf": 0.899}, {"trace": 1.208, "density": 1.135, "ecdf": 0.942, "esf": 0.058}, {"trace": 1.201, "density": 1.263, "ecdf": 0.934, "esf": 0.066}, {"trace": 1.226, "density": 0.812, "ecdf": 0.959, "esf": 0.041}, {"trace": 1.078, "density": 4.217, "ecdf": 0.585, "esf": 0.415}, {"trace": 1.102, "density": 3.843, "ecdf": 0.684, "esf": 0.316}, {"trace": 1.109, "density": 3.705, "ecdf": 0.711, "esf": 0.289}, {"trace": 1.011, "density": 4.246, "ecdf": 0.292, "esf": 0.708}, {"trace": 1.08, "density": 4.194, "ecdf": 0.596, "esf": 0.404}, {"trace": 1.295, "density": 0.226, "ecdf": 0.99, "esf": 0.01}, {"trace": 1.089, "density": 4.056, "ecdf": 0.632, "esf": 0.368}, {"trace": 1.08, "density": 4.192, "ecdf": 0.596, "esf": 0.404}, {"trace": 1.001, "density": 3.987, "ecdf": 0.246, "esf": 0.754}, {"trace": 1.237, "density": 0.674, "ecdf": 0.966, "esf": 0.034}, {"trace": 1.212, "density": 1.06, "ecdf": 0.946, "esf": 0.054}, {"trace": 1.163, "density": 2.189, "ecdf": 0.871, "esf": 0.129}, {"trace": 1.121, "density": 3.386, "ecdf": 0.754, "esf": 0.246}, {"trace": 1.146, "density": 2.645, "ecdf": 0.83, "esf": 0.17}, {"trace": 1.178, "density": 1.744, "ecdf": 0.901, "esf": 0.099}, {"trace": 0.962, "density": 2.556, "ecdf": 0.119, "esf": 0.881}, {"trace": 0.94, "density": 1.876, "ecdf": 0.074, "esf": 0.926}, {"trace": 0.939, "density": 1.846, "ecdf": 0.072, "esf": 0.928}, {"trace": 1.007, "density": 4.163, "ecdf": 0.274, "esf": 0.726}, {"trace": 1.051, "density": 4.437, "ecdf": 0.471, "esf": 0.529}, {"trace": 1.12, "density": 3.407, "ecdf": 0.751, "esf": 0.249}, {"trace": 1.1, "density": 3.887, "ecdf": 0.674, "esf": 0.326}, {"trace": 0.981, "density": 3.227, "ecdf": 0.175, "esf": 0.825}, {"trace": 0.887, "density": 0.527, "ecdf": 0.016, "esf": 0.984}, {"trace": 0.975, "density": 2.989, "ecdf": 0.157, "esf": 0.843}, {"trace": 0.998, "density": 3.902, "ecdf": 0.235, "esf": 0.765}, {"trace": 1.031, "density": 4.414, "ecdf": 0.378, "esf": 0.622}, {"trace": 1.05, "density": 4.44, "ecdf": 0.466, "esf": 0.534}, {"trace": 0.944, "density": 2.011, "ecdf": 0.08, "esf": 0.92}, {"trace": 1.078, "density": 4.21, "ecdf": 0.588, "esf": 0.412}, {"trace": 1.235, "density": 0.697, "ecdf": 0.964, "esf": 0.036}, {"trace": 1.076, "density": 4.238, "ecdf": 0.578, "esf": 0.422}, {"trace": 1.053, "density": 4.431, "ecdf": 0.478, "esf": 0.522}, {"trace": 1.09, "density": 4.04, "ecdf": 0.636, "esf": 0.364}, {"trace": 0.919, "density": 1.2, "ecdf": 0.038, "esf": 0.962}, {"trace": 1.122, "density": 3.364, "ecdf": 0.757, "esf": 0.243}, {"trace": 1.015, "density": 4.296, "ecdf": 0.309, "esf": 0.691}, {"trace": 1.096, "density": 3.955, "ecdf": 0.658, "esf": 0.342}, {"trace": 0.969, "density": 2.789, "ecdf": 0.139, "esf": 0.861}, {"trace": 1.069, "density": 4.324, "ecdf": 0.548, "esf": 0.452}, {"trace": 0.992, "density": 3.655, "ecdf": 0.21, "esf": 0.79}, {"trace": 1.086, "density": 4.103, "ecdf": 0.621, "esf": 0.379}, {"trace": 0.868, "density": 0.321, "ecdf": 0.007, "esf": 0.993}, {"trace": 0.973, "density": 2.917, "ecdf": 0.15, "esf": 0.85}, {"trace": 1.052, "density": 4.436, "ecdf": 0.471, "esf": 0.529}, {"trace": 1.192, "density": 1.439, "ecdf": 0.919, "esf": 0.081}, {"trace": 0.992, "density": 3.641, "ecdf": 0.208, "esf": 0.792}, {"trace": 0.894, "density": 0.619, "ecdf": 0.019, "esf": 0.981}, {"trace": 0.934, "density": 1.712, "ecdf": 0.062, "esf": 0.938}, {"trace": 0.932, "density": 1.626, "ecdf": 0.056, "esf": 0.944}, {"trace": 1.186, "density": 1.549, "ecdf": 0.912, "esf": 0.088}, {"trace": 0.988, "density": 3.515, "ecdf": 0.197, "esf": 0.803}, {"trace": 1.037, "density": 4.436, "ecdf": 0.404, "esf": 0.596}, {"trace": 1.145, "density": 2.675, "ecdf": 0.827, "esf": 0.173}, {"trace": 1.115, "density": 3.561, "ecdf": 0.731, "esf": 0.269}, {"trace": 1.03, "density": 4.408, "ecdf": 0.372, "esf": 0.628}, {"trace": 1.154, "density": 2.442, "ecdf": 0.848, "esf": 0.151}, {"trace": 1.202, "density": 1.241, "ecdf": 0.935, "esf": 0.065}, {"trace": 0.979, "density": 3.135, "ecdf": 0.169, "esf": 0.831}, {"trace": 1.037, "density": 4.436, "ecdf": 0.405, "esf": 0.595}, {"trace": 1.015, "density": 4.302, "ecdf": 0.311, "esf": 0.689}, {"trace": 1.02, "density": 4.343, "ecdf": 0.328, "esf": 0.672}, {"trace": 1.11, "density": 3.684, "ecdf": 0.713, "esf": 0.287}, {"trace": 1.1, "density": 3.889, "ecdf": 0.673, "esf": 0.327}, {"trace": 1.042, "density": 4.446, "ecdf": 0.426, "esf": 0.574}, {"trace": 0.992, "density": 3.673, "ecdf": 0.211, "esf": 0.789}, {"trace": 0.944, "density": 2.01, "ecdf": 0.08, "esf": 0.92}, {"trace": 0.834, "density": 0.088, "ecdf": 0.002, "esf": 0.998}, {"trace": 0.834, "density": 0.088, "ecdf": 0.002, "esf": 0.998}, {"trace": 1.033, "density": 4.423, "ecdf": 0.386, "esf": 0.614}, {"trace": 1.065, "density": 4.358, "ecdf": 0.532, "esf": 0.468}, {"trace": 0.95, "density": 2.189, "ecdf": 0.091, "esf": 0.909}, {"trace": 1.052, "density": 4.434, "ecdf": 0.474, "esf": 0.526}, {"trace": 1.098, "density": 3.907, "ecdf": 0.669, "esf": 0.331}, {"trace": 1.102, "density": 3.851, "ecdf": 0.682, "esf": 0.318}, {"trace": 1.09, "density": 4.046, "ecdf": 0.634, "esf": 0.366}, {"trace": 1.061, "density": 4.387, "ecdf": 0.513, "esf": 0.487}, {"trace": 1.01, "density": 4.217, "ecdf": 0.285, "esf": 0.715}, {"trace": 1.179, "density": 1.729, "ecdf": 0.901, "esf": 0.099}, {"trace": 1.011, "density": 4.238, "ecdf": 0.29, "esf": 0.71}, {"trace": 1.039, "density": 4.44, "ecdf": 0.414, "esf": 0.586}, {"trace": 1.077, "density": 4.233, "ecdf": 0.579, "esf": 0.421}, {"trace": 1.068, "density": 4.333, "ecdf": 0.544, "esf": 0.456}, {"trace": 1.082, "density": 4.166, "ecdf": 0.603, "esf": 0.397}, {"trace": 1.038, "density": 4.438, "ecdf": 0.408, "esf": 0.592}, {"trace": 1.045, "density": 4.448, "ecdf": 0.44, "esf": 0.56}, {"trace": 1.025, "density": 4.379, "ecdf": 0.351, "esf": 0.649}, {"trace": 1.076, "density": 4.243, "ecdf": 0.576, "esf": 0.424}, {"trace": 1.042, "density": 4.446, "ecdf": 0.426, "esf": 0.574}, {"trace": 1.416, "density": 0.022, "ecdf": 0.999, "esf": 0.001}, {"trace": 1.005, "density": 4.106, "ecdf": 0.262, "esf": 0.738}, {"trace": 1.261, "density": 0.452, "ecdf": 0.979, "esf": 0.021}, {"trace": 0.936, "density": 1.759, "ecdf": 0.065, "esf": 0.935}, {"trace": 1.101, "density": 3.87, "ecdf": 0.678, "esf": 0.322}, {"trace": 1.063, "density": 4.376, "ecdf": 0.521, "esf": 0.479}, {"trace": 1.124, "density": 3.308, "ecdf": 0.763, "esf": 0.237}, {"trace": 1.02, "density": 4.346, "ecdf": 0.33, "esf": 0.67}, {"trace": 1.085, "density": 4.125, "ecdf": 0.617, "esf": 0.383}, {"trace": 1.06, "density": 4.395, "ecdf": 0.507, "esf": 0.493}, {"trace": 1.017, "density": 4.321, "ecdf": 0.319, "esf": 0.681}, {"trace": 1.039, "density": 4.44, "ecdf": 0.414, "esf": 0.586}, {"trace": 1.005, "density": 4.116, "ecdf": 0.264, "esf": 0.736}, {"trace": 1.037, "density": 4.436, "ecdf": 0.405, "esf": 0.595}, {"trace": 1.025, "density": 4.379, "ecdf": 0.351, "esf": 0.649}, {"trace": 0.962, "density": 2.571, "ecdf": 0.12, "esf": 0.88}, {"trace": 1.096, "density": 3.948, "ecdf": 0.66, "esf": 0.34}, {"trace": 1.106, "density": 3.771, "ecdf": 0.699, "esf": 0.301}, {"trace": 1.006, "density": 4.148, "ecdf": 0.271, "esf": 0.729}, {"trace": 1.134, "density": 2.994, "ecdf": 0.795, "esf": 0.205}, {"trace": 1.059, "density": 4.401, "ecdf": 0.503, "esf": 0.497}, {"trace": 1.103, "density": 3.817, "ecdf": 0.691, "esf": 0.309}, {"trace": 0.976, "density": 3.009, "ecdf": 0.159, "esf": 0.841}, {"trace": 1.022, "density": 4.36, "ecdf": 0.339, "esf": 0.661}, {"trace": 0.936, "density": 1.757, "ecdf": 0.064, "esf": 0.936}, {"trace": 1.114, "density": 3.573, "ecdf": 0.73, "esf": 0.27}, {"trace": 1.003, "density": 4.05, "ecdf": 0.254, "esf": 0.746}, {"trace": 1.193, "density": 1.415, "ecdf": 0.921, "esf": 0.079}, {"trace": 1.016, "density": 4.309, "ecdf": 0.313, "esf": 0.687}, {"trace": 1.126, "density": 3.243, "ecdf": 0.771, "esf": 0.229}, {"trace": 1.073, "density": 4.276, "ecdf": 0.565, "esf": 0.435}, {"trace": 1.079, "density": 4.2, "ecdf": 0.593, "esf": 0.407}, {"trace": 1.008, "density": 4.188, "ecdf": 0.279, "esf": 0.721}, {"trace": 0.994, "density": 3.759, "ecdf": 0.217, "esf": 0.783}, {"trace": 1.097, "density": 3.932, "ecdf": 0.664, "esf": 0.336}, {"trace": 1.194, "density": 1.388, "ecdf": 0.924, "esf": 0.076}, {"trace": 1.136, "density": 2.947, "ecdf": 0.8, "esf": 0.2}, {"trace": 1.031, "density": 4.414, "ecdf": 0.377, "esf": 0.623}, {"trace": 0.99, "density": 3.569, "ecdf": 0.201, "esf": 0.799}, {"trace": 0.989, "density": 3.529, "ecdf": 0.198, "esf": 0.802}, {"trace": 0.983, "density": 3.279, "ecdf": 0.179, "esf": 0.821}, {"trace": 1.214, "density": 1.021, "ecdf": 0.948, "esf": 0.052}, {"trace": 1.079, "density": 4.207, "ecdf": 0.59, "esf": 0.41}, {"trace": 0.982, "density": 3.267, "ecdf": 0.178, "esf": 0.822}, {"trace": 0.976, "density": 3.021, "ecdf": 0.16, "esf": 0.84}, {"trace": 1.22, "density": 0.913, "ecdf": 0.954, "esf": 0.046}, {"trace": 1.22, "density": 0.913, "ecdf": 0.954, "esf": 0.046}, {"trace": 1.22, "density": 0.913, "ecdf": 0.954, "esf": 0.046}, {"trace": 1.101, "density": 3.863, "ecdf": 0.679, "esf": 0.321}, {"trace": 1.13, "density": 3.127, "ecdf": 0.784, "esf": 0.216}, {"trace": 0.989, "density": 3.527, "ecdf": 0.198, "esf": 0.802}, {"trace": 1.08, "density": 4.195, "ecdf": 0.596, "esf": 0.404}, {"trace": 1.134, "density": 2.998, "ecdf": 0.795, "esf": 0.205}, {"trace": 0.969, "density": 2.797, "ecdf": 0.14, "esf": 0.86}, {"trace": 1.087, "density": 4.097, "ecdf": 0.623, "esf": 0.377}, {"trace": 0.966, "density": 2.68, "ecdf": 0.13, "esf": 0.87}, {"trace": 1.003, "density": 4.049, "ecdf": 0.253, "esf": 0.747}, {"trace": 0.93, "density": 1.578, "ecdf": 0.052, "esf": 0.948}, {"trace": 1.078, "density": 4.211, "ecdf": 0.587, "esf": 0.413}, {"trace": 0.953, "density": 2.278, "ecdf": 0.098, "esf": 0.902}, {"trace": 0.963, "density": 2.591, "ecdf": 0.122, "esf": 0.878}, {"trace": 1.341, "density": 0.086, "ecdf": 0.996, "esf": 0.004}, {"trace": 1.379, "density": 0.034, "ecdf": 0.998, "esf": 0.002}, {"trace": 1.022, "density": 4.362, "ecdf": 0.34, "esf": 0.66}, {"trace": 1.057, "density": 4.414, "ecdf": 0.493, "esf": 0.507}, {"trace": 0.991, "density": 3.606, "ecdf": 0.204, "esf": 0.796}, {"trace": 1.192, "density": 1.427, "ecdf": 0.92, "esf": 0.08}, {"trace": 1.133, "density": 3.028, "ecdf": 0.793, "esf": 0.207}, {"trace": 0.983, "density": 3.28, "ecdf": 0.179, "esf": 0.821}, {"trace": 1.034, "density": 4.426, "ecdf": 0.388, "esf": 0.612}, {"trace": 1.0, "density": 3.976, "ecdf": 0.244, "esf": 0.756}, {"trace": 1.153, "density": 2.47, "ecdf": 0.846, "esf": 0.154}, {"trace": 1.0, "density": 3.952, "ecdf": 0.241, "esf": 0.759}, {"trace": 1.056, "density": 4.417, "ecdf": 0.49, "esf": 0.51}, {"trace": 0.965, "density": 2.662, "ecdf": 0.128, "esf": 0.872}, {"trace": 0.96, "density": 2.514, "ecdf": 0.115, "esf": 0.885}, {"trace": 1.197, "density": 1.341, "ecdf": 0.927, "esf": 0.073}, {"trace": 1.123, "density": 3.332, "ecdf": 0.761, "esf": 0.239}, {"trace": 1.059, "density": 4.403, "ecdf": 0.501, "esf": 0.499}, {"trace": 1.003, "density": 4.067, "ecdf": 0.256, "esf": 0.744}, {"trace": 1.007, "density": 4.165, "ecdf": 0.275, "esf": 0.725}, {"trace": 1.104, "density": 3.798, "ecdf": 0.694, "esf": 0.306}, {"trace": 1.025, "density": 4.383, "ecdf": 0.354, "esf": 0.646}, {"trace": 1.206, "density": 1.163, "ecdf": 0.941, "esf": 0.059}, {"trace": 0.988, "density": 3.48, "ecdf": 0.195, "esf": 0.805}, {"trace": 0.974, "density": 2.943, "ecdf": 0.154, "esf": 0.846}, {"trace": 1.157, "density": 2.361, "ecdf": 0.858, "esf": 0.142}, {"trace": 0.996, "density": 3.81, "ecdf": 0.223, "esf": 0.777}, {"trace": 1.091, "density": 4.022, "ecdf": 0.64, "esf": 0.36}, {"trace": 1.154, "density": 2.432, "ecdf": 0.85, "esf": 0.15}, {"trace": 1.046, "density": 4.447, "ecdf": 0.447, "esf": 0.553}, {"trace": 1.086, "density": 4.108, "ecdf": 0.62, "esf": 0.38}, {"trace": 1.118, "density": 3.473, "ecdf": 0.742, "esf": 0.258}, {"trace": 1.134, "density": 3.009, "ecdf": 0.794, "esf": 0.206}, {"trace": 1.128, "density": 3.181, "ecdf": 0.778, "esf": 0.222}, {"trace": 1.128, "density": 3.183, "ecdf": 0.778, "esf": 0.222}, {"trace": 1.225, "density": 0.824, "ecdf": 0.958, "esf": 0.042}, {"trace": 1.168, "density": 2.019, "ecdf": 0.882, "esf": 0.118}, {"trace": 1.195, "density": 1.379, "ecdf": 0.925, "esf": 0.075}, {"trace": 1.004, "density": 4.1, "ecdf": 0.261, "esf": 0.739}, {"trace": 1.1, "density": 3.887, "ecdf": 0.674, "esf": 0.326}, {"trace": 0.999, "density": 3.937, "ecdf": 0.24, "esf": 0.76}, {"trace": 1.099, "density": 3.89, "ecdf": 0.673, "esf": 0.327}, {"trace": 0.984, "density": 3.34, "ecdf": 0.183, "esf": 0.817}, {"trace": 0.975, "density": 2.998, "ecdf": 0.158, "esf": 0.842}, {"trace": 1.132, "density": 3.057, "ecdf": 0.79, "esf": 0.21}, {"trace": 1.062, "density": 4.38, "ecdf": 0.518, "esf": 0.482}, {"trace": 0.977, "density": 3.047, "ecdf": 0.162, "esf": 0.838}, {"trace": 1.166, "density": 2.099, "ecdf": 0.877, "esf": 0.123}, {"trace": 1.202, "density": 1.244, "ecdf": 0.935, "esf": 0.065}, {"trace": 1.02, "density": 4.347, "ecdf": 0.331, "esf": 0.669}, {"trace": 1.084, "density": 4.129, "ecdf": 0.616, "esf": 0.384}, {"trace": 1.126, "density": 3.228, "ecdf": 0.773, "esf": 0.227}, {"trace": 1.047, "density": 4.446, "ecdf": 0.451, "esf": 0.549}, {"trace": 1.07, "density": 4.31, "ecdf": 0.552, "esf": 0.448}, {"trace": 1.051, "density": 4.437, "ecdf": 0.47, "esf": 0.53}, {"trace": 1.084, "density": 4.138, "ecdf": 0.612, "esf": 0.388}, {"trace": 1.005, "density": 4.107, "ecdf": 0.262, "esf": 0.738}, {"trace": 1.123, "density": 3.318, "ecdf": 0.762, "esf": 0.238}, {"trace": 1.184, "density": 1.612, "ecdf": 0.909, "esf": 0.091}, {"trace": 1.107, "density": 3.75, "ecdf": 0.703, "esf": 0.297}, {"trace": 1.11, "density": 3.67, "ecdf": 0.716, "esf": 0.284}, {"trace": 1.077, "density": 4.223, "ecdf": 0.583, "esf": 0.417}, {"trace": 0.969, "density": 2.785, "ecdf": 0.139, "esf": 0.861}, {"trace": 1.076, "density": 4.238, "ecdf": 0.577, "esf": 0.423}, {"trace": 1.165, "density": 2.108, "ecdf": 0.877, "esf": 0.123}, {"trace": 1.045, "density": 4.448, "ecdf": 0.441, "esf": 0.559}, {"trace": 1.014, "density": 4.289, "ecdf": 0.306, "esf": 0.694}, {"trace": 1.033, "density": 4.421, "ecdf": 0.384, "esf": 0.616}, {"trace": 1.007, "density": 4.162, "ecdf": 0.274, "esf": 0.726}, {"trace": 1.022, "density": 4.359, "ecdf": 0.338, "esf": 0.662}, {"trace": 1.077, "density": 4.228, "ecdf": 0.581, "esf": 0.419}, {"trace": 0.933, "density": 1.675, "ecdf": 0.059, "esf": 0.941}, {"trace": 0.977, "density": 3.072, "ecdf": 0.164, "esf": 0.836}, {"trace": 1.142, "density": 2.759, "ecdf": 0.818, "esf": 0.182}, {"trace": 1.118, "density": 3.458, "ecdf": 0.744, "esf": 0.255}, {"trace": 0.972, "density": 2.893, "ecdf": 0.148, "esf": 0.852}, {"trace": 0.954, "density": 2.306, "ecdf": 0.1, "esf": 0.9}, {"trace": 0.962, "density": 2.576, "ecdf": 0.121, "esf": 0.879}, {"trace": 1.036, "density": 4.432, "ecdf": 0.399, "esf": 0.601}, {"trace": 1.077, "density": 4.225, "ecdf": 0.582, "esf": 0.418}, {"trace": 1.164, "density": 2.141, "ecdf": 0.874, "esf": 0.126}, {"trace": 0.996, "density": 3.807, "ecdf": 0.223, "esf": 0.777}, {"trace": 1.13, "density": 3.103, "ecdf": 0.787, "esf": 0.213}, {"trace": 0.997, "density": 3.845, "ecdf": 0.228, "esf": 0.772}, {"trace": 1.194, "density": 1.397, "ecdf": 0.923, "esf": 0.077}, {"trace": 1.104, "density": 3.799, "ecdf": 0.694, "esf": 0.306}, {"trace": 1.027, "density": 4.394, "ecdf": 0.362, "esf": 0.638}, {"trace": 1.25, "density": 0.54, "ecdf": 0.974, "esf": 0.025}, {"trace": 1.16, "density": 2.271, "ecdf": 0.864, "esf": 0.136}, {"trace": 1.03, "density": 4.409, "ecdf": 0.373, "esf": 0.627}, {"trace": 1.177, "density": 1.781, "ecdf": 0.899, "esf": 0.101}, {"trace": 1.048, "density": 4.444, "ecdf": 0.455, "esf": 0.545}, {"trace": 1.153, "density": 2.454, "ecdf": 0.847, "esf": 0.153}, {"trace": 1.152, "density": 2.483, "ecdf": 0.844, "esf": 0.156}, {"trace": 1.145, "density": 2.693, "ecdf": 0.826, "esf": 0.174}, {"trace": 1.079, "density": 4.205, "ecdf": 0.591, "esf": 0.409}, {"trace": 1.113, "density": 3.593, "ecdf": 0.726, "esf": 0.274}, {"trace": 1.035, "density": 4.431, "ecdf": 0.398, "esf": 0.602}, {"trace": 1.224, "density": 0.837, "ecdf": 0.957, "esf": 0.043}, {"trace": 0.967, "density": 2.718, "ecdf": 0.134, "esf": 0.866}, {"trace": 1.169, "density": 2.003, "ecdf": 0.883, "esf": 0.117}, {"trace": 1.002, "density": 4.015, "ecdf": 0.25, "esf": 0.75}, {"trace": 0.997, "density": 3.855, "ecdf": 0.23, "esf": 0.77}, {"trace": 1.042, "density": 4.446, "ecdf": 0.426, "esf": 0.574}, {"trace": 1.034, "density": 4.427, "ecdf": 0.391, "esf": 0.609}, {"trace": 1.043, "density": 4.447, "ecdf": 0.432, "esf": 0.568}, {"trace": 1.057, "density": 4.411, "ecdf": 0.497, "esf": 0.503}, {"trace": 1.022, "density": 4.364, "ecdf": 0.342, "esf": 0.658}, {"trace": 1.123, "density": 3.341, "ecdf": 0.76, "esf": 0.24}, {"trace": 1.038, "density": 4.44, "ecdf": 0.413, "esf": 0.587}, {"trace": 1.16, "density": 2.277, "ecdf": 0.864, "esf": 0.136}, {"trace": 1.134, "density": 2.992, "ecdf": 0.796, "esf": 0.204}, {"trace": 1.132, "density": 3.045, "ecdf": 0.791, "esf": 0.209}, {"trace": 1.051, "density": 4.438, "ecdf": 0.468, "esf": 0.532}, {"trace": 1.059, "density": 4.402, "ecdf": 0.502, "esf": 0.498}, {"trace": 0.989, "density": 3.545, "ecdf": 0.199, "esf": 0.8}, {"trace": 1.042, "density": 4.446, "ecdf": 0.426, "esf": 0.574}, {"trace": 1.072, "density": 4.284, "ecdf": 0.562, "esf": 0.438}, {"trace": 1.072, "density": 4.288, "ecdf": 0.559, "esf": 0.441}, {"trace": 0.96, "density": 2.501, "ecdf": 0.114, "esf": 0.886}, {"trace": 1.11, "density": 3.681, "ecdf": 0.714, "esf": 0.286}, {"trace": 1.06, "density": 4.393, "ecdf": 0.508, "esf": 0.492}, {"trace": 1.006, "density": 4.144, "ecdf": 0.27, "esf": 0.73}, {"trace": 1.004, "density": 4.099, "ecdf": 0.261, "esf": 0.739}, {"trace": 1.123, "density": 3.316, "ecdf": 0.762, "esf": 0.238}, {"trace": 1.037, "density": 4.436, "ecdf": 0.405, "esf": 0.595}, {"trace": 1.019, "density": 4.336, "ecdf": 0.325, "esf": 0.675}, {"trace": 1.01, "density": 4.224, "ecdf": 0.287, "esf": 0.713}, {"trace": 0.964, "density": 2.614, "ecdf": 0.124, "esf": 0.876}, {"trace": 1.146, "density": 2.659, "ecdf": 0.828, "esf": 0.172}, {"trace": 1.101, "density": 3.857, "ecdf": 0.681, "esf": 0.319}, {"trace": 1.226, "density": 0.811, "ecdf": 0.959, "esf": 0.041}, {"trace": 1.176, "density": 1.813, "ecdf": 0.896, "esf": 0.104}, {"trace": 1.124, "density": 3.289, "ecdf": 0.766, "esf": 0.234}, {"trace": 0.928, "density": 1.523, "ecdf": 0.05, "esf": 0.95}, {"trace": 1.055, "density": 4.424, "ecdf": 0.484, "esf": 0.516}, {"trace": 1.101, "density": 3.865, "ecdf": 0.679, "esf": 0.321}, {"trace": 1.047, "density": 4.446, "ecdf": 0.448, "esf": 0.552}, {"trace": 0.982, "density": 3.258, "ecdf": 0.177, "esf": 0.823}, {"trace": 1.038, "density": 4.44, "ecdf": 0.413, "esf": 0.587}, {"trace": 1.098, "density": 3.908, "ecdf": 0.669, "esf": 0.331}, {"trace": 1.082, "density": 4.16, "ecdf": 0.606, "esf": 0.394}, {"trace": 0.933, "density": 1.684, "ecdf": 0.06, "esf": 0.94}, {"trace": 0.933, "density": 1.684, "ecdf": 0.06, "esf": 0.94}, {"trace": 1.062, "density": 4.381, "ecdf": 0.517, "esf": 0.483}, {"trace": 0.938, "density": 1.841, "ecdf": 0.071, "esf": 0.929}, {"trace": 1.217, "density": 0.956, "ecdf": 0.952, "esf": 0.048}, {"trace": 1.133, "density": 3.031, "ecdf": 0.792, "esf": 0.208}, {"trace": 1.002, "density": 4.029, "ecdf": 0.251, "esf": 0.749}, {"trace": 1.105, "density": 3.783, "ecdf": 0.697, "esf": 0.303}, {"trace": 1.038, "density": 4.44, "ecdf": 0.412, "esf": 0.588}, {"trace": 1.031, "density": 4.413, "ecdf": 0.376, "esf": 0.624}, {"trace": 1.077, "density": 4.223, "ecdf": 0.583, "esf": 0.417}, {"trace": 1.059, "density": 4.403, "ecdf": 0.502, "esf": 0.498}, {"trace": 0.987, "density": 3.457, "ecdf": 0.193, "esf": 0.807}, {"trace": 1.158, "density": 2.316, "ecdf": 0.861, "esf": 0.139}, {"trace": 1.165, "density": 2.13, "ecdf": 0.875, "esf": 0.125}, {"trace": 0.993, "density": 3.688, "ecdf": 0.212, "esf": 0.788}, {"trace": 1.159, "density": 2.308, "ecdf": 0.862, "esf": 0.138}, {"trace": 1.142, "density": 2.763, "ecdf": 0.818, "esf": 0.182}, {"trace": 1.052, "density": 4.434, "ecdf": 0.476, "esf": 0.524}, {"trace": 1.097, "density": 3.927, "ecdf": 0.666, "esf": 0.334}, {"trace": 1.055, "density": 4.424, "ecdf": 0.484, "esf": 0.516}, {"trace": 1.06, "density": 4.394, "ecdf": 0.508, "esf": 0.492}, {"trace": 1.078, "density": 4.22, "ecdf": 0.585, "esf": 0.415}, {"trace": 0.886, "density": 0.506, "ecdf": 0.015, "esf": 0.985}, {"trace": 1.118, "density": 3.467, "ecdf": 0.743, "esf": 0.257}, {"trace": 1.14, "density": 2.825, "ecdf": 0.813, "esf": 0.187}, {"trace": 1.014, "density": 4.285, "ecdf": 0.305, "esf": 0.695}, {"trace": 1.102, "density": 3.845, "ecdf": 0.683, "esf": 0.317}, {"trace": 1.056, "density": 4.42, "ecdf": 0.488, "esf": 0.512}, {"trace": 1.359, "density": 0.056, "ecdf": 0.998, "esf": 0.002}, {"trace": 0.903, "density": 0.771, "ecdf": 0.024, "esf": 0.976}, {"trace": 1.017, "density": 4.322, "ecdf": 0.32, "esf": 0.68}, {"trace": 1.079, "density": 4.207, "ecdf": 0.59, "esf": 0.41}, {"trace": 1.038, "density": 4.438, "ecdf": 0.408, "esf": 0.592}, {"trace": 1.036, "density": 4.432, "ecdf": 0.398, "esf": 0.602}, {"trace": 0.998, "density": 3.908, "ecdf": 0.236, "esf": 0.764}, {"trace": 0.92, "density": 1.257, "ecdf": 0.039, "esf": 0.961}, {"trace": 1.117, "density": 3.487, "ecdf": 0.74, "esf": 0.26}, {"trace": 1.179, "density": 1.716, "ecdf": 0.903, "esf": 0.097}, {"trace": 0.956, "density": 2.38, "ecdf": 0.105, "esf": 0.895}, {"trace": 1.059, "density": 4.4, "ecdf": 0.504, "esf": 0.496}, {"trace": 1.111, "density": 3.643, "ecdf": 0.719, "esf": 0.281}, {"trace": 1.009, "density": 4.207, "ecdf": 0.282, "esf": 0.718}, {"trace": 1.103, "density": 3.827, "ecdf": 0.688, "esf": 0.312}, {"trace": 0.913, "density": 1.027, "ecdf": 0.032, "esf": 0.968}, {"trace": 1.255, "density": 0.499, "ecdf": 0.976, "esf": 0.024}, {"trace": 1.07, "density": 4.31, "ecdf": 0.552, "esf": 0.448}, {"trace": 1.057, "density": 4.412, "ecdf": 0.496, "esf": 0.504}, {"trace": 1.08, "density": 4.185, "ecdf": 0.598, "esf": 0.402}, {"trace": 1.059, "density": 4.403, "ecdf": 0.501, "esf": 0.499}, {"trace": 0.973, "density": 2.936, "ecdf": 0.153, "esf": 0.847}, {"trace": 1.016, "density": 4.311, "ecdf": 0.314, "esf": 0.686}, {"trace": 1.161, "density": 2.247, "ecdf": 0.867, "esf": 0.133}, {"trace": 1.106, "density": 3.758, "ecdf": 0.702, "esf": 0.298}, {"trace": 1.231, "density": 0.735, "ecdf": 0.962, "esf": 0.038}, {"trace": 0.948, "density": 2.126, "ecdf": 0.087, "esf": 0.913}, {"trace": 1.151, "density": 2.518, "ecdf": 0.841, "esf": 0.159}, {"trace": 1.137, "density": 2.897, "ecdf": 0.806, "esf": 0.194}, {"trace": 1.142, "density": 2.756, "ecdf": 0.818, "esf": 0.182}, {"trace": 1.042, "density": 4.447, "ecdf": 0.428, "esf": 0.572}, {"trace": 1.075, "density": 4.257, "ecdf": 0.572, "esf": 0.428}, {"trace": 1.179, "density": 1.716, "ecdf": 0.903, "esf": 0.097}, {"trace": 0.977, "density": 3.061, "ecdf": 0.164, "esf": 0.836}, {"trace": 1.047, "density": 4.446, "ecdf": 0.45, "esf": 0.55}, {"trace": 0.993, "density": 3.708, "ecdf": 0.214, "esf": 0.786}, {"trace": 1.162, "density": 2.217, "ecdf": 0.868, "esf": 0.132}, {"trace": 1.172, "density": 1.914, "ecdf": 0.89, "esf": 0.11}, {"trace": 1.056, "density": 4.42, "ecdf": 0.488, "esf": 0.512}, {"trace": 1.088, "density": 4.074, "ecdf": 0.629, "esf": 0.371}, {"trace": 0.937, "density": 1.799, "ecdf": 0.068, "esf": 0.932}, {"trace": 1.266, "density": 0.413, "ecdf": 0.981, "esf": 0.019}, {"trace": 0.94, "density": 1.879, "ecdf": 0.074, "esf": 0.926}, {"trace": 1.246, "density": 0.579, "ecdf": 0.972, "esf": 0.028}, {"trace": 1.075, "density": 4.257, "ecdf": 0.572, "esf": 0.428}, {"trace": 1.079, "density": 4.2, "ecdf": 0.593, "esf": 0.407}, {"trace": 1.076, "density": 4.247, "ecdf": 0.575, "esf": 0.425}, {"trace": 1.039, "density": 4.441, "ecdf": 0.416, "esf": 0.584}, {"trace": 1.061, "density": 4.386, "ecdf": 0.514, "esf": 0.486}, {"trace": 0.996, "density": 3.811, "ecdf": 0.224, "esf": 0.776}, {"trace": 0.974, "density": 2.95, "ecdf": 0.154, "esf": 0.846}, {"trace": 0.996, "density": 3.839, "ecdf": 0.227, "esf": 0.773}, {"trace": 1.071, "density": 4.297, "ecdf": 0.557, "esf": 0.443}, {"trace": 1.048, "density": 4.444, "ecdf": 0.455, "esf": 0.545}, {"trace": 0.984, "density": 3.319, "ecdf": 0.182, "esf": 0.818}, {"trace": 0.848, "density": 0.151, "ecdf": 0.003, "esf": 0.997}, {"trace": 0.945, "density": 2.045, "ecdf": 0.083, "esf": 0.917}, {"trace": 1.197, "density": 1.335, "ecdf": 0.928, "esf": 0.072}, {"trace": 1.209, "density": 1.114, "ecdf": 0.944, "esf": 0.056}, {"trace": 1.347, "density": 0.076, "ecdf": 0.997, "esf": 0.003}, {"trace": 1.068, "density": 4.335, "ecdf": 0.543, "esf": 0.457}, {"trace": 1.125, "density": 3.264, "ecdf": 0.769, "esf": 0.231}, {"trace": 0.92, "density": 1.238, "ecdf": 0.039, "esf": 0.961}, {"trace": 0.943, "density": 1.989, "ecdf": 0.079, "esf": 0.921}, {"trace": 1.017, "density": 4.317, "ecdf": 0.318, "esf": 0.682}, {"trace": 1.144, "density": 2.719, "ecdf": 0.823, "esf": 0.177}, {"trace": 1.068, "density": 4.328, "ecdf": 0.546, "esf": 0.454}, {"trace": 1.094, "density": 3.974, "ecdf": 0.653, "esf": 0.347}, {"trace": 0.954, "density": 2.317, "ecdf": 0.1, "esf": 0.9}, {"trace": 1.09, "density": 4.052, "ecdf": 0.632, "esf": 0.368}, {"trace": 1.003, "density": 4.073, "ecdf": 0.256, "esf": 0.744}, {"trace": 1.05, "density": 4.441, "ecdf": 0.464, "esf": 0.536}, {"trace": 0.916, "density": 1.101, "ecdf": 0.034, "esf": 0.966}, {"trace": 1.006, "density": 4.151, "ecdf": 0.272, "esf": 0.728}, {"trace": 1.098, "density": 3.922, "ecdf": 0.667, "esf": 0.333}, {"trace": 1.04, "density": 4.444, "ecdf": 0.421, "esf": 0.579}, {"trace": 1.043, "density": 4.447, "ecdf": 0.43, "esf": 0.57}, {"trace": 0.969, "density": 2.793, "ecdf": 0.14, "esf": 0.86}, {"trace": 0.916, "density": 1.102, "ecdf": 0.034, "esf": 0.966}, {"trace": 0.861, "density": 0.249, "ecdf": 0.005, "esf": 0.995}, {"trace": 1.233, "density": 0.721, "ecdf": 0.962, "esf": 0.037}, {"trace": 0.981, "density": 3.228, "ecdf": 0.175, "esf": 0.825}, {"trace": 1.07, "density": 4.308, "ecdf": 0.553, "esf": 0.447}, {"trace": 1.003, "density": 4.055, "ecdf": 0.254, "esf": 0.746}, {"trace": 1.023, "density": 4.37, "ecdf": 0.345, "esf": 0.655}, {"trace": 1.109, "density": 3.688, "ecdf": 0.712, "esf": 0.288}, {"trace": 1.128, "density": 3.184, "ecdf": 0.777, "esf": 0.223}, {"trace": 1.032, "density": 4.416, "ecdf": 0.379, "esf": 0.621}, {"trace": 1.145, "density": 2.678, "ecdf": 0.827, "esf": 0.173}, {"trace": 1.097, "density": 3.941, "ecdf": 0.663, "esf": 0.337}, {"trace": 0.967, "density": 2.73, "ecdf": 0.135, "esf": 0.865}, {"trace": 1.14, "density": 2.821, "ecdf": 0.813, "esf": 0.187}, {"trace": 1.05, "density": 4.441, "ecdf": 0.463, "esf": 0.537}, {"trace": 1.112, "density": 3.638, "ecdf": 0.721, "esf": 0.279}, {"trace": 1.117, "density": 3.492, "ecdf": 0.74, "esf": 0.26}, {"trace": 1.086, "density": 4.099, "ecdf": 0.622, "esf": 0.378}, {"trace": 1.01, "density": 4.218, "ecdf": 0.285, "esf": 0.715}, {"trace": 1.004, "density": 4.09, "ecdf": 0.26, "esf": 0.74}, {"trace": 1.125, "density": 3.268, "ecdf": 0.768, "esf": 0.232}, {"trace": 1.129, "density": 3.142, "ecdf": 0.783, "esf": 0.217}, {"trace": 1.087, "density": 4.094, "ecdf": 0.624, "esf": 0.376}, {"trace": 0.977, "density": 3.051, "ecdf": 0.163, "esf": 0.837}, {"trace": 0.95, "density": 2.182, "ecdf": 0.09, "esf": 0.91}, {"trace": 0.948, "density": 2.112, "ecdf": 0.086, "esf": 0.914}, {"trace": 0.999, "density": 3.917, "ecdf": 0.237, "esf": 0.763}, {"trace": 1.028, "density": 4.399, "ecdf": 0.365, "esf": 0.635}, {"trace": 1.014, "density": 4.284, "ecdf": 0.305, "esf": 0.695}, {"trace": 1.175, "density": 1.839, "ecdf": 0.894, "esf": 0.106}, {"trace": 1.003, "density": 4.07, "ecdf": 0.256, "esf": 0.744}, {"trace": 1.044, "density": 4.448, "ecdf": 0.437, "esf": 0.563}, {"trace": 1.153, "density": 2.463, "ecdf": 0.846, "esf": 0.154}, {"trace": 1.017, "density": 4.321, "ecdf": 0.319, "esf": 0.681}, {"trace": 1.039, "density": 4.44, "ecdf": 0.414, "esf": 0.586}, {"trace": 0.927, "density": 1.467, "ecdf": 0.047, "esf": 0.953}, {"trace": 1.109, "density": 3.688, "ecdf": 0.712, "esf": 0.288}, {"trace": 1.052, "density": 4.434, "ecdf": 0.474, "esf": 0.526}, {"trace": 1.228, "density": 0.786, "ecdf": 0.96, "esf": 0.04}, {"trace": 1.187, "density": 1.527, "ecdf": 0.914, "esf": 0.086}, {"trace": 1.126, "density": 3.234, "ecdf": 0.772, "esf": 0.228}, {"trace": 1.038, "density": 4.44, "ecdf": 0.412, "esf": 0.588}, {"trace": 1.1, "density": 3.887, "ecdf": 0.674, "esf": 0.326}, {"trace": 1.047, "density": 4.445, "ecdf": 0.452, "esf": 0.548}, {"trace": 1.087, "density": 4.097, "ecdf": 0.623, "esf": 0.377}, {"trace": 1.006, "density": 4.138, "ecdf": 0.268, "esf": 0.732}, {"trace": 1.096, "density": 3.954, "ecdf": 0.659, "esf": 0.341}, {"trace": 1.05, "density": 4.441, "ecdf": 0.464, "esf": 0.536}, {"trace": 1.198, "density": 1.318, "ecdf": 0.929, "esf": 0.071}, {"trace": 1.169, "density": 2.003, "ecdf": 0.883, "esf": 0.117}, {"trace": 1.062, "density": 4.385, "ecdf": 0.514, "esf": 0.486}, {"trace": 1.03, "density": 4.409, "ecdf": 0.373, "esf": 0.627}, {"trace": 1.043, "density": 4.447, "ecdf": 0.431, "esf": 0.569}, {"trace": 1.02, "density": 4.344, "ecdf": 0.329, "esf": 0.671}, {"trace": 0.975, "density": 2.978, "ecdf": 0.156, "esf": 0.844}, {"trace": 0.956, "density": 2.367, "ecdf": 0.104, "esf": 0.896}, {"trace": 1.254, "density": 0.51, "ecdf": 0.976, "esf": 0.024}, {"trace": 0.924, "density": 1.38, "ecdf": 0.044, "esf": 0.956}, {"trace": 0.941, "density": 1.909, "ecdf": 0.075, "esf": 0.925}, {"trace": 1.016, "density": 4.311, "ecdf": 0.314, "esf": 0.686}, {"trace": 0.97, "density": 2.812, "ecdf": 0.141, "esf": 0.859}, {"trace": 0.999, "density": 3.934, "ecdf": 0.239, "esf": 0.761}, {"trace": 0.973, "density": 2.908, "ecdf": 0.149, "esf": 0.851}, {"trace": 1.157, "density": 2.351, "ecdf": 0.858, "esf": 0.142}, {"trace": 0.994, "density": 3.758, "ecdf": 0.217, "esf": 0.783}, {"trace": 1.135, "density": 2.975, "ecdf": 0.798, "esf": 0.202}, {"trace": 1.103, "density": 3.822, "ecdf": 0.69, "esf": 0.31}, {"trace": 1.114, "density": 3.583, "ecdf": 0.728, "esf": 0.272}, {"trace": 1.046, "density": 4.447, "ecdf": 0.445, "esf": 0.555}, {"trace": 1.145, "density": 2.697, "ecdf": 0.825, "esf": 0.175}, {"trace": 1.116, "density": 3.524, "ecdf": 0.736, "esf": 0.264}, {"trace": 1.1, "density": 3.884, "ecdf": 0.674, "esf": 0.326}, {"trace": 1.04, "density": 4.444, "ecdf": 0.42, "esf": 0.58}, {"trace": 0.992, "density": 3.65, "ecdf": 0.209, "esf": 0.791}, {"trace": 0.964, "density": 2.633, "ecdf": 0.126, "esf": 0.874}, {"trace": 1.081, "density": 4.17, "ecdf": 0.602, "esf": 0.398}, {"trace": 1.106, "density": 3.755, "ecdf": 0.702, "esf": 0.298}, {"trace": 1.132, "density": 3.07, "ecdf": 0.789, "esf": 0.211}, {"trace": 0.969, "density": 2.805, "ecdf": 0.141, "esf": 0.859}, {"trace": 1.1, "density": 3.875, "ecdf": 0.676, "esf": 0.324}, {"trace": 1.013, "density": 4.266, "ecdf": 0.297, "esf": 0.703}, {"trace": 1.071, "density": 4.298, "ecdf": 0.557, "esf": 0.443}, {"trace": 1.031, "density": 4.414, "ecdf": 0.377, "esf": 0.623}, {"trace": 1.122, "density": 3.35, "ecdf": 0.759, "esf": 0.241}, {"trace": 1.152, "density": 2.506, "ecdf": 0.842, "esf": 0.158}, {"trace": 1.073, "density": 4.276, "ecdf": 0.564, "esf": 0.436}, {"trace": 1.088, "density": 4.075, "ecdf": 0.628, "esf": 0.372}, {"trace": 1.072, "density": 4.284, "ecdf": 0.561, "esf": 0.439}, {"trace": 1.047, "density": 4.446, "ecdf": 0.45, "esf": 0.55}, {"trace": 0.95, "density": 2.194, "ecdf": 0.091, "esf": 0.909}, {"trace": 1.034, "density": 4.427, "ecdf": 0.39, "esf": 0.61}, {"trace": 1.105, "density": 3.788, "ecdf": 0.696, "esf": 0.304}, {"trace": 1.163, "density": 2.175, "ecdf": 0.872, "esf": 0.128}, {"trace": 1.102, "density": 3.837, "ecdf": 0.686, "esf": 0.314}, {"trace": 1.049, "density": 4.443, "ecdf": 0.458, "esf": 0.542}, {"trace": 0.937, "density": 1.808, "ecdf": 0.069, "esf": 0.931}, {"trace": 1.133, "density": 3.032, "ecdf": 0.792, "esf": 0.208}, {"trace": 1.009, "density": 4.21, "ecdf": 0.283, "esf": 0.717}, {"trace": 1.009, "density": 4.213, "ecdf": 0.284, "esf": 0.716}, {"trace": 1.136, "density": 2.932, "ecdf": 0.802, "esf": 0.198}, {"trace": 1.051, "density": 4.437, "ecdf": 0.47, "esf": 0.53}, {"trace": 1.063, "density": 4.378, "ecdf": 0.519, "esf": 0.481}, {"trace": 1.036, "density": 4.435, "ecdf": 0.402, "esf": 0.598}, {"trace": 1.093, "density": 3.998, "ecdf": 0.647, "esf": 0.353}, {"trace": 1.083, "density": 4.152, "ecdf": 0.609, "esf": 0.391}, {"trace": 1.103, "density": 3.814, "ecdf": 0.691, "esf": 0.309}, {"trace": 0.998, "density": 3.9, "ecdf": 0.235, "esf": 0.765}, {"trace": 1.009, "density": 4.204, "ecdf": 0.282, "esf": 0.718}, {"trace": 1.155, "density": 2.412, "ecdf": 0.852, "esf": 0.148}, {"trace": 1.117, "density": 3.499, "ecdf": 0.739, "esf": 0.261}, {"trace": 1.056, "density": 4.419, "ecdf": 0.488, "esf": 0.512}, {"trace": 1.112, "density": 3.631, "ecdf": 0.721, "esf": 0.279}, {"trace": 0.952, "density": 2.256, "ecdf": 0.096, "esf": 0.904}, {"trace": 1.123, "density": 3.317, "ecdf": 0.762, "esf": 0.238}, {"trace": 1.112, "density": 3.625, "ecdf": 0.722, "esf": 0.278}, {"trace": 0.969, "density": 2.781, "ecdf": 0.139, "esf": 0.861}, {"trace": 0.984, "density": 3.335, "ecdf": 0.183, "esf": 0.817}, {"trace": 0.989, "density": 3.517, "ecdf": 0.197, "esf": 0.803}, {"trace": 0.977, "density": 3.05, "ecdf": 0.163, "esf": 0.837}, {"trace": 0.952, "density": 2.243, "ecdf": 0.095, "esf": 0.905}, {"trace": 1.133, "density": 3.04, "ecdf": 0.792, "esf": 0.208}, {"trace": 1.059, "density": 4.402, "ecdf": 0.502, "esf": 0.498}, {"trace": 1.068, "density": 4.333, "ecdf": 0.543, "esf": 0.457}, {"trace": 0.994, "density": 3.759, "ecdf": 0.217, "esf": 0.783}, {"trace": 0.991, "density": 3.631, "ecdf": 0.207, "esf": 0.793}, {"trace": 1.092, "density": 4.016, "ecdf": 0.642, "esf": 0.358}, {"trace": 1.078, "density": 4.22, "ecdf": 0.584, "esf": 0.416}, {"trace": 1.248, "density": 0.562, "ecdf": 0.973, "esf": 0.027}, {"trace": 1.057, "density": 4.414, "ecdf": 0.493, "esf": 0.507}, {"trace": 1.045, "density": 4.448, "ecdf": 0.439, "esf": 0.561}, {"trace": 1.159, "density": 2.302, "ecdf": 0.862, "esf": 0.138}, {"trace": 0.906, "density": 0.848, "ecdf": 0.028, "esf": 0.972}, {"trace": 1.147, "density": 2.623, "ecdf": 0.832, "esf": 0.168}, {"trace": 1.192, "density": 1.431, "ecdf": 0.92, "esf": 0.08}, {"trace": 1.195, "density": 1.371, "ecdf": 0.925, "esf": 0.075}, {"trace": 1.276, "density": 0.341, "ecdf": 0.985, "esf": 0.015}, {"trace": 1.249, "density": 0.55, "ecdf": 0.974, "esf": 0.026}, {"trace": 1.068, "density": 4.33, "ecdf": 0.545, "esf": 0.455}, {"trace": 1.111, "density": 3.642, "ecdf": 0.719, "esf": 0.281}, {"trace": 1.154, "density": 2.443, "ecdf": 0.848, "esf": 0.152}, {"trace": 1.088, "density": 4.07, "ecdf": 0.629, "esf": 0.371}, {"trace": 1.091, "density": 4.031, "ecdf": 0.637, "esf": 0.363}, {"trace": 1.001, "density": 4.006, "ecdf": 0.249, "esf": 0.751}, {"trace": 1.153, "density": 2.459, "ecdf": 0.847, "esf": 0.153}, {"trace": 0.908, "density": 0.886, "ecdf": 0.029, "esf": 0.971}, {"trace": 1.185, "density": 1.569, "ecdf": 0.912, "esf": 0.088}, {"trace": 1.029, "density": 4.403, "ecdf": 0.369, "esf": 0.631}, {"trace": 1.029, "density": 4.403, "ecdf": 0.369, "esf": 0.631}, {"trace": 1.065, "density": 4.356, "ecdf": 0.533, "esf": 0.467}, {"trace": 0.939, "density": 1.862, "ecdf": 0.072, "esf": 0.928}, {"trace": 1.05, "density": 4.44, "ecdf": 0.465, "esf": 0.535}, {"trace": 1.155, "density": 2.416, "ecdf": 0.852, "esf": 0.148}, {"trace": 1.021, "density": 4.354, "ecdf": 0.335, "esf": 0.665}, {"trace": 1.005, "density": 4.109, "ecdf": 0.263, "esf": 0.737}, {"trace": 1.07, "density": 4.314, "ecdf": 0.551, "esf": 0.449}, {"trace": 1.214, "density": 1.017, "ecdf": 0.949, "esf": 0.051}, {"trace": 0.961, "density": 2.542, "ecdf": 0.118, "esf": 0.882}, {"trace": 0.965, "density": 2.656, "ecdf": 0.127, "esf": 0.873}, {"trace": 1.068, "density": 4.332, "ecdf": 0.545, "esf": 0.455}, {"trace": 0.897, "density": 0.657, "ecdf": 0.02, "esf": 0.98}, {"trace": 1.19, "density": 1.474, "ecdf": 0.917, "esf": 0.083}, {"trace": 1.097, "density": 3.939, "ecdf": 0.663, "esf": 0.337}, {"trace": 1.05, "density": 4.441, "ecdf": 0.462, "esf": 0.538}, {"trace": 0.934, "density": 1.709, "ecdf": 0.062, "esf": 0.938}, {"trace": 1.131, "density": 3.081, "ecdf": 0.789, "esf": 0.211}, {"trace": 1.033, "density": 4.422, "ecdf": 0.385, "esf": 0.615}, {"trace": 1.113, "density": 3.601, "ecdf": 0.726, "esf": 0.274}, {"trace": 1.105, "density": 3.787, "ecdf": 0.697, "esf": 0.303}, {"trace": 0.948, "density": 2.122, "ecdf": 0.086, "esf": 0.914}, {"trace": 1.032, "density": 4.417, "ecdf": 0.38, "esf": 0.62}, {"trace": 1.02, "density": 4.348, "ecdf": 0.331, "esf": 0.669}, {"trace": 0.991, "density": 3.6, "ecdf": 0.204, "esf": 0.796}, {"trace": 1.064, "density": 4.364, "ecdf": 0.528, "esf": 0.472}, {"trace": 1.083, "density": 4.147, "ecdf": 0.61, "esf": 0.39}, {"trace": 1.153, "density": 2.465, "ecdf": 0.846, "esf": 0.154}, {"trace": 0.936, "density": 1.765, "ecdf": 0.065, "esf": 0.935}, {"trace": 1.103, "density": 3.826, "ecdf": 0.689, "esf": 0.311}, {"trace": 1.118, "density": 3.472, "ecdf": 0.742, "esf": 0.258}, {"trace": 0.97, "density": 2.818, "ecdf": 0.142, "esf": 0.858}, {"trace": 0.954, "density": 2.306, "ecdf": 0.099, "esf": 0.901}, {"trace": 0.891, "density": 0.575, "ecdf": 0.017, "esf": 0.983}, {"trace": 0.816, "density": 0.043, "ecdf": 0.001, "esf": 0.999}, {"trace": 1.336, "density": 0.094, "ecdf": 0.996, "esf": 0.004}, {"trace": 1.397, "density": 0.029, "ecdf": 0.999, "esf": 0.001}, {"trace": 1.118, "density": 3.458, "ecdf": 0.745, "esf": 0.255}, {"trace": 0.934, "density": 1.719, "ecdf": 0.063, "esf": 0.937}, {"trace": 1.148, "density": 2.606, "ecdf": 0.834, "esf": 0.166}, {"trace": 1.173, "density": 1.877, "ecdf": 0.891, "esf": 0.109}, {"trace": 1.132, "density": 3.043, "ecdf": 0.791, "esf": 0.209}, {"trace": 1.035, "density": 4.431, "ecdf": 0.397, "esf": 0.603}, {"trace": 1.087, "density": 4.096, "ecdf": 0.624, "esf": 0.376}, {"trace": 1.079, "density": 4.206, "ecdf": 0.59, "esf": 0.41}, {"trace": 1.033, "density": 4.423, "ecdf": 0.386, "esf": 0.614}, {"trace": 1.042, "density": 4.446, "ecdf": 0.426, "esf": 0.574}, {"trace": 1.193, "density": 1.419, "ecdf": 0.921, "esf": 0.079}, {"trace": 0.985, "density": 3.36, "ecdf": 0.186, "esf": 0.814}, {"trace": 0.996, "density": 3.803, "ecdf": 0.222, "esf": 0.778}, {"trace": 0.978, "density": 3.106, "ecdf": 0.168, "esf": 0.832}, {"trace": 1.112, "density": 3.632, "ecdf": 0.721, "esf": 0.279}, {"trace": 1.018, "density": 4.325, "ecdf": 0.321, "esf": 0.679}, {"trace": 1.064, "density": 4.368, "ecdf": 0.525, "esf": 0.475}, {"trace": 1.079, "density": 4.207, "ecdf": 0.589, "esf": 0.411}, {"trace": 1.007, "density": 4.162, "ecdf": 0.274, "esf": 0.726}, {"trace": 1.007, "density": 4.162, "ecdf": 0.274, "esf": 0.726}, {"trace": 0.997, "density": 3.843, "ecdf": 0.228, "esf": 0.772}, {"trace": 0.941, "density": 1.903, "ecdf": 0.075, "esf": 0.925}, {"trace": 1.054, "density": 4.429, "ecdf": 0.48, "esf": 0.52}, {"trace": 1.121, "density": 3.373, "ecdf": 0.755, "esf": 0.245}, {"trace": 1.052, "density": 4.434, "ecdf": 0.475, "esf": 0.525}, {"trace": 1.152, "density": 2.503, "ecdf": 0.843, "esf": 0.157}, {"trace": 1.053, "density": 4.431, "ecdf": 0.478, "esf": 0.522}, {"trace": 1.12, "density": 3.417, "ecdf": 0.75, "esf": 0.25}, {"trace": 1.125, "density": 3.269, "ecdf": 0.768, "esf": 0.232}, {"trace": 1.151, "density": 2.525, "ecdf": 0.84, "esf": 0.159}, {"trace": 0.995, "density": 3.801, "ecdf": 0.222, "esf": 0.778}, {"trace": 1.076, "density": 4.238, "ecdf": 0.578, "esf": 0.422}, {"trace": 1.185, "density": 1.581, "ecdf": 0.911, "esf": 0.089}, {"trace": 1.163, "density": 2.175, "ecdf": 0.872, "esf": 0.128}, {"trace": 0.952, "density": 2.232, "ecdf": 0.094, "esf": 0.906}, {"trace": 0.94, "density": 1.875, "ecdf": 0.074, "esf": 0.926}, {"trace": 1.115, "density": 3.548, "ecdf": 0.733, "esf": 0.267}, {"trace": 1.001, "density": 3.986, "ecdf": 0.246, "esf": 0.754}, {"trace": 1.072, "density": 4.287, "ecdf": 0.56, "esf": 0.44}, {"trace": 1.029, "density": 4.401, "ecdf": 0.366, "esf": 0.634}, {"trace": 1.107, "density": 3.737, "ecdf": 0.704, "esf": 0.296}, {"trace": 1.148, "density": 2.609, "ecdf": 0.834, "esf": 0.166}, {"trace": 1.08, "density": 4.195, "ecdf": 0.595, "esf": 0.405}, {"trace": 1.006, "density": 4.15, "ecdf": 0.271, "esf": 0.729}, {"trace": 1.096, "density": 3.943, "ecdf": 0.662, "esf": 0.338}, {"trace": 0.996, "density": 3.805, "ecdf": 0.222, "esf": 0.778}, {"trace": 1.125, "density": 3.256, "ecdf": 0.769, "esf": 0.231}, {"trace": 1.131, "density": 3.078, "ecdf": 0.789, "esf": 0.211}, {"trace": 1.008, "density": 4.183, "ecdf": 0.279, "esf": 0.721}, {"trace": 1.072, "density": 4.284, "ecdf": 0.561, "esf": 0.439}, {"trace": 1.135, "density": 2.963, "ecdf": 0.799, "esf": 0.201}, {"trace": 1.177, "density": 1.789, "ecdf": 0.898, "esf": 0.102}, {"trace": 1.026, "density": 4.387, "ecdf": 0.357, "esf": 0.643}, {"trace": 1.108, "density": 3.726, "ecdf": 0.705, "esf": 0.295}, {"trace": 1.093, "density": 4.0, "ecdf": 0.647, "esf": 0.353}, {"trace": 1.0, "density": 3.977, "ecdf": 0.245, "esf": 0.755}, {"trace": 0.924, "density": 1.369, "ecdf": 0.043, "esf": 0.957}, {"trace": 0.906, "density": 0.841, "ecdf": 0.028, "esf": 0.972}, {"trace": 0.991, "density": 3.626, "ecdf": 0.207, "esf": 0.793}, {"trace": 1.099, "density": 3.893, "ecdf": 0.673, "esf": 0.327}, {"trace": 1.05, "density": 4.442, "ecdf": 0.462, "esf": 0.538}, {"trace": 1.097, "density": 3.936, "ecdf": 0.664, "esf": 0.336}, {"trace": 1.002, "density": 4.036, "ecdf": 0.252, "esf": 0.748}, {"trace": 1.106, "density": 3.759, "ecdf": 0.701, "esf": 0.299}, {"trace": 1.121, "density": 3.381, "ecdf": 0.754, "esf": 0.246}, {"trace": 1.102, "density": 3.835, "ecdf": 0.687, "esf": 0.313}, {"trace": 1.004, "density": 4.082, "ecdf": 0.258, "esf": 0.742}, {"trace": 0.969, "density": 2.781, "ecdf": 0.138, "esf": 0.862}, {"trace": 0.954, "density": 2.326, "ecdf": 0.101, "esf": 0.899}, {"trace": 0.978, "density": 3.082, "ecdf": 0.165, "esf": 0.835}, {"trace": 1.084, "density": 4.132, "ecdf": 0.614, "esf": 0.385}, {"trace": 1.023, "density": 4.367, "ecdf": 0.343, "esf": 0.657}, {"trace": 1.081, "density": 4.173, "ecdf": 0.601, "esf": 0.399}, {"trace": 0.982, "density": 3.255, "ecdf": 0.177, "esf": 0.823}, {"trace": 0.989, "density": 3.552, "ecdf": 0.2, "esf": 0.8}, {"trace": 1.035, "density": 4.431, "ecdf": 0.398, "esf": 0.602}, {"trace": 1.149, "density": 2.579, "ecdf": 0.836, "esf": 0.163}, {"trace": 0.944, "density": 1.991, "ecdf": 0.079, "esf": 0.921}, {"trace": 1.181, "density": 1.672, "ecdf": 0.906, "esf": 0.094}, {"trace": 1.045, "density": 4.447, "ecdf": 0.442, "esf": 0.558}, {"trace": 1.158, "density": 2.325, "ecdf": 0.86, "esf": 0.14}, {"trace": 1.047, "density": 4.446, "ecdf": 0.45, "esf": 0.55}, {"trace": 1.031, "density": 4.411, "ecdf": 0.374, "esf": 0.626}, {"trace": 1.081, "density": 4.174, "ecdf": 0.601, "esf": 0.399}, {"trace": 1.015, "density": 4.302, "ecdf": 0.311, "esf": 0.689}, {"trace": 1.128, "density": 3.186, "ecdf": 0.777, "esf": 0.223}, {"trace": 1.055, "density": 4.422, "ecdf": 0.486, "esf": 0.514}, {"trace": 1.042, "density": 4.447, "ecdf": 0.428, "esf": 0.572}, {"trace": 1.048, "density": 4.445, "ecdf": 0.452, "esf": 0.548}, {"trace": 1.066, "density": 4.353, "ecdf": 0.535, "esf": 0.465}, {"trace": 1.043, "density": 4.447, "ecdf": 0.433, "esf": 0.567}, {"trace": 0.956, "density": 2.376, "ecdf": 0.105, "esf": 0.895}, {"trace": 0.967, "density": 2.713, "ecdf": 0.133, "esf": 0.866}, {"trace": 0.968, "density": 2.765, "ecdf": 0.137, "esf": 0.862}, {"trace": 1.122, "density": 3.37, "ecdf": 0.756, "esf": 0.244}, {"trace": 1.075, "density": 4.248, "ecdf": 0.574, "esf": 0.426}, {"trace": 1.057, "density": 4.412, "ecdf": 0.495, "esf": 0.505}, {"trace": 1.071, "density": 4.301, "ecdf": 0.555, "esf": 0.445}, {"trace": 1.011, "density": 4.248, "ecdf": 0.293, "esf": 0.707}, {"trace": 1.092, "density": 4.008, "ecdf": 0.645, "esf": 0.355}, {"trace": 1.14, "density": 2.83, "ecdf": 0.812, "esf": 0.188}, {"trace": 1.206, "density": 1.175, "ecdf": 0.94, "esf": 0.06}, {"trace": 1.317, "density": 0.142, "ecdf": 0.994, "esf": 0.006}, {"trace": 1.143, "density": 2.737, "ecdf": 0.821, "esf": 0.179}, {"trace": 1.073, "density": 4.274, "ecdf": 0.565, "esf": 0.435}, {"trace": 1.055, "density": 4.424, "ecdf": 0.484, "esf": 0.516}, {"trace": 1.073, "density": 4.276, "ecdf": 0.564, "esf": 0.436}, {"trace": 0.997, "density": 3.865, "ecdf": 0.231, "esf": 0.769}, {"trace": 0.918, "density": 1.168, "ecdf": 0.037, "esf": 0.963}, {"trace": 1.053, "density": 4.43, "ecdf": 0.479, "esf": 0.521}, {"trace": 1.208, "density": 1.134, "ecdf": 0.942, "esf": 0.058}, {"trace": 1.24, "density": 0.637, "ecdf": 0.968, "esf": 0.031}, {"trace": 1.274, "density": 0.357, "ecdf": 0.984, "esf": 0.015}, {"trace": 1.265, "density": 0.423, "ecdf": 0.981, "esf": 0.019}, {"trace": 1.128, "density": 3.165, "ecdf": 0.78, "esf": 0.22}, {"trace": 1.043, "density": 4.447, "ecdf": 0.432, "esf": 0.568}, {"trace": 1.089, "density": 4.061, "ecdf": 0.631, "esf": 0.369}, {"trace": 1.031, "density": 4.415, "ecdf": 0.378, "esf": 0.622}, {"trace": 1.022, "density": 4.361, "ecdf": 0.339, "esf": 0.661}, {"trace": 1.119, "density": 3.446, "ecdf": 0.746, "esf": 0.254}, {"trace": 1.133, "density": 3.026, "ecdf": 0.793, "esf": 0.207}, {"trace": 1.174, "density": 1.852, "ecdf": 0.893, "esf": 0.107}, {"trace": 0.952, "density": 2.259, "ecdf": 0.097, "esf": 0.903}, {"trace": 1.053, "density": 4.43, "ecdf": 0.479, "esf": 0.521}, {"trace": 1.087, "density": 4.09, "ecdf": 0.625, "esf": 0.375}, {"trace": 1.115, "density": 3.542, "ecdf": 0.734, "esf": 0.266}, {"trace": 1.188, "density": 1.517, "ecdf": 0.914, "esf": 0.086}, {"trace": 1.017, "density": 4.317, "ecdf": 0.318, "esf": 0.682}, {"trace": 1.004, "density": 4.081, "ecdf": 0.258, "esf": 0.742}, {"trace": 0.934, "density": 1.693, "ecdf": 0.06, "esf": 0.94}, {"trace": 1.022, "density": 4.364, "ecdf": 0.342, "esf": 0.658}, {"trace": 1.106, "density": 3.759, "ecdf": 0.701, "esf": 0.299}, {"trace": 1.159, "density": 2.3, "ecdf": 0.862, "esf": 0.138}, {"trace": 0.988, "density": 3.477, "ecdf": 0.195, "esf": 0.805}, {"trace": 0.98, "density": 3.176, "ecdf": 0.172, "esf": 0.828}, {"trace": 1.089, "density": 4.066, "ecdf": 0.63, "esf": 0.37}, {"trace": 1.1, "density": 3.881, "ecdf": 0.675, "esf": 0.325}, {"trace": 1.181, "density": 1.669, "ecdf": 0.906, "esf": 0.094}, {"trace": 1.004, "density": 4.086, "ecdf": 0.259, "esf": 0.741}, {"trace": 1.009, "density": 4.21, "ecdf": 0.283, "esf": 0.717}, {"trace": 0.993, "density": 3.683, "ecdf": 0.212, "esf": 0.788}, {"trace": 1.029, "density": 4.402, "ecdf": 0.367, "esf": 0.633}, {"trace": 1.085, "density": 4.116, "ecdf": 0.618, "esf": 0.382}, {"trace": 1.095, "density": 3.96, "ecdf": 0.657, "esf": 0.343}, {"trace": 1.045, "density": 4.448, "ecdf": 0.44, "esf": 0.56}, {"trace": 0.983, "density": 3.3, "ecdf": 0.18, "esf": 0.82}, {"trace": 1.026, "density": 4.389, "ecdf": 0.358, "esf": 0.642}, {"trace": 1.052, "density": 4.434, "ecdf": 0.475, "esf": 0.525}, {"trace": 1.002, "density": 4.026, "ecdf": 0.251, "esf": 0.749}, {"trace": 1.059, "density": 4.405, "ecdf": 0.5, "esf": 0.5}, {"trace": 1.077, "density": 4.232, "ecdf": 0.579, "esf": 0.421}, {"trace": 0.958, "density": 2.446, "ecdf": 0.11, "esf": 0.89}, {"trace": 1.085, "density": 4.114, "ecdf": 0.618, "esf": 0.382}, {"trace": 1.033, "density": 4.423, "ecdf": 0.386, "esf": 0.614}, {"trace": 1.149, "density": 2.588, "ecdf": 0.836, "esf": 0.164}, {"trace": 1.084, "density": 4.14, "ecdf": 0.612, "esf": 0.388}, {"trace": 1.081, "density": 4.175, "ecdf": 0.6, "esf": 0.399}, {"trace": 1.099, "density": 3.898, "ecdf": 0.671, "esf": 0.329}, {"trace": 1.036, "density": 4.433, "ecdf": 0.399, "esf": 0.601}, {"trace": 1.263, "density": 0.436, "ecdf": 0.98, "esf": 0.02}, {"trace": 1.125, "density": 3.267, "ecdf": 0.769, "esf": 0.231}, {"trace": 1.042, "density": 4.446, "ecdf": 0.427, "esf": 0.573}, {"trace": 1.008, "density": 4.175, "ecdf": 0.277, "esf": 0.723}, {"trace": 0.965, "density": 2.65, "ecdf": 0.127, "esf": 0.873}, {"trace": 0.999, "density": 3.946, "ecdf": 0.24, "esf": 0.76}, {"trace": 1.172, "density": 1.919, "ecdf": 0.889, "esf": 0.111}, {"trace": 1.084, "density": 4.139, "ecdf": 0.612, "esf": 0.388}, {"trace": 1.0, "density": 3.972, "ecdf": 0.244, "esf": 0.756}, {"trace": 1.034, "density": 4.427, "ecdf": 0.39, "esf": 0.61}, {"trace": 1.174, "density": 1.857, "ecdf": 0.893, "esf": 0.107}, {"trace": 1.13, "density": 3.122, "ecdf": 0.785, "esf": 0.215}, {"trace": 1.045, "density": 4.448, "ecdf": 0.44, "esf": 0.56}, {"trace": 1.011, "density": 4.241, "ecdf": 0.291, "esf": 0.709}, {"trace": 1.053, "density": 4.432, "ecdf": 0.478, "esf": 0.522}, {"trace": 0.947, "density": 2.089, "ecdf": 0.084, "esf": 0.916}, {"trace": 1.281, "density": 0.307, "ecdf": 0.987, "esf": 0.013}, {"trace": 1.079, "density": 4.199, "ecdf": 0.594, "esf": 0.406}, {"trace": 1.027, "density": 4.391, "ecdf": 0.36, "esf": 0.64}, {"trace": 1.201, "density": 1.268, "ecdf": 0.933, "esf": 0.067}, {"trace": 1.222, "density": 0.874, "ecdf": 0.955, "esf": 0.045}, {"trace": 0.876, "density": 0.398, "ecdf": 0.01, "esf": 0.99}, {"trace": 1.064, "density": 4.363, "ecdf": 0.529, "esf": 0.471}, {"trace": 0.937, "density": 1.8, "ecdf": 0.068, "esf": 0.932}, {"trace": 1.192, "density": 1.432, "ecdf": 0.919, "esf": 0.081}, {"trace": 0.883, "density": 0.469, "ecdf": 0.013, "esf": 0.987}, {"trace": 1.025, "density": 4.38, "ecdf": 0.351, "esf": 0.649}, {"trace": 1.026, "density": 4.386, "ecdf": 0.356, "esf": 0.644}, {"trace": 1.022, "density": 4.361, "ecdf": 0.34, "esf": 0.66}, {"trace": 0.885, "density": 0.501, "ecdf": 0.015, "esf": 0.985}, {"trace": 0.912, "density": 0.984, "ecdf": 0.03, "esf": 0.97}, {"trace": 0.972, "density": 2.904, "ecdf": 0.149, "esf": 0.851}, {"trace": 0.962, "density": 2.573, "ecdf": 0.121, "esf": 0.879}, {"trace": 1.073, "density": 4.28, "ecdf": 0.563, "esf": 0.437}, {"trace": 1.097, "density": 3.927, "ecdf": 0.666, "esf": 0.334}, {"trace": 1.072, "density": 4.288, "ecdf": 0.56, "esf": 0.44}, {"trace": 1.008, "density": 4.175, "ecdf": 0.277, "esf": 0.723}, {"trace": 0.984, "density": 3.32, "ecdf": 0.182, "esf": 0.818}, {"trace": 1.059, "density": 4.4, "ecdf": 0.503, "esf": 0.497}, {"trace": 1.127, "density": 3.211, "ecdf": 0.775, "esf": 0.225}, {"trace": 1.1, "density": 3.886, "ecdf": 0.674, "esf": 0.326}, {"trace": 1.073, "density": 4.272, "ecdf": 0.566, "esf": 0.434}, {"trace": 1.095, "density": 3.959, "ecdf": 0.657, "esf": 0.343}, {"trace": 1.092, "density": 4.014, "ecdf": 0.643, "esf": 0.357}, {"trace": 0.97, "density": 2.836, "ecdf": 0.144, "esf": 0.856}, {"trace": 1.127, "density": 3.213, "ecdf": 0.774, "esf": 0.226}, {"trace": 0.951, "density": 2.207, "ecdf": 0.092, "esf": 0.908}, {"trace": 1.077, "density": 4.232, "ecdf": 0.579, "esf": 0.421}, {"trace": 1.017, "density": 4.317, "ecdf": 0.317, "esf": 0.683}, {"trace": 1.131, "density": 3.091, "ecdf": 0.788, "esf": 0.212}, {"trace": 1.05, "density": 4.441, "ecdf": 0.462, "esf": 0.538}, {"trace": 1.077, "density": 4.233, "ecdf": 0.579, "esf": 0.421}, {"trace": 1.082, "density": 4.157, "ecdf": 0.607, "esf": 0.393}, {"trace": 1.042, "density": 4.446, "ecdf": 0.427, "esf": 0.573}, {"trace": 0.998, "density": 3.897, "ecdf": 0.234, "esf": 0.766}, {"trace": 1.002, "density": 4.025, "ecdf": 0.25, "esf": 0.75}, {"trace": 0.979, "density": 3.142, "ecdf": 0.17, "esf": 0.83}, {"trace": 1.007, "density": 4.151, "ecdf": 0.272, "esf": 0.728}, {"trace": 1.066, "density": 4.346, "ecdf": 0.538, "esf": 0.462}, {"trace": 1.156, "density": 2.38, "ecdf": 0.856, "esf": 0.144}, {"trace": 1.078, "density": 4.212, "ecdf": 0.587, "esf": 0.413}, {"trace": 1.005, "density": 4.102, "ecdf": 0.262, "esf": 0.738}, {"trace": 1.089, "density": 4.063, "ecdf": 0.631, "esf": 0.369}, {"trace": 0.998, "density": 3.893, "ecdf": 0.234, "esf": 0.766}, {"trace": 1.096, "density": 3.95, "ecdf": 0.66, "esf": 0.34}, {"trace": 1.096, "density": 3.95, "ecdf": 0.66, "esf": 0.34}, {"trace": 1.119, "density": 3.435, "ecdf": 0.747, "esf": 0.253}, {"trace": 1.043, "density": 4.447, "ecdf": 0.43, "esf": 0.57}, {"trace": 1.18, "density": 1.706, "ecdf": 0.903, "esf": 0.097}, {"trace": 0.878, "density": 0.423, "ecdf": 0.011, "esf": 0.989}, {"trace": 1.304, "density": 0.187, "ecdf": 0.992, "esf": 0.008}, {"trace": 0.881, "density": 0.452, "ecdf": 0.012, "esf": 0.988}, {"trace": 1.187, "density": 1.525, "ecdf": 0.914, "esf": 0.086}, {"trace": 1.01, "density": 4.23, "ecdf": 0.288, "esf": 0.712}, {"trace": 1.092, "density": 4.008, "ecdf": 0.645, "esf": 0.355}, {"trace": 1.029, "density": 4.405, "ecdf": 0.37, "esf": 0.63}, {"trace": 1.17, "density": 1.984, "ecdf": 0.884, "esf": 0.116}, {"trace": 0.99, "density": 3.569, "ecdf": 0.201, "esf": 0.798}, {"trace": 1.002, "density": 4.039, "ecdf": 0.252, "esf": 0.748}, {"trace": 1.211, "density": 1.072, "ecdf": 0.946, "esf": 0.054}, {"trace": 1.104, "density": 3.802, "ecdf": 0.694, "esf": 0.306}, {"trace": 0.985, "density": 3.376, "ecdf": 0.187, "esf": 0.813}, {"trace": 0.929, "density": 1.545, "ecdf": 0.05, "esf": 0.95}, {"trace": 1.208, "density": 1.128, "ecdf": 0.943, "esf": 0.057}, {"trace": 0.929, "density": 1.56, "ecdf": 0.052, "esf": 0.948}, {"trace": 0.869, "density": 0.326, "ecdf": 0.008, "esf": 0.992}, {"trace": 1.301, "density": 0.2, "ecdf": 0.992, "esf": 0.008}, {"trace": 1.245, "density": 0.585, "ecdf": 0.972, "esf": 0.028}, {"trace": 1.149, "density": 2.564, "ecdf": 0.838, "esf": 0.162}, {"trace": 1.074, "density": 4.269, "ecdf": 0.567, "esf": 0.433}, {"trace": 1.036, "density": 4.433, "ecdf": 0.399, "esf": 0.601}, {"trace": 0.945, "density": 2.022, "ecdf": 0.081, "esf": 0.919}, {"trace": 1.037, "density": 4.437, "ecdf": 0.406, "esf": 0.594}, {"trace": 1.007, "density": 4.165, "ecdf": 0.275, "esf": 0.725}, {"trace": 0.996, "density": 3.816, "ecdf": 0.224, "esf": 0.776}, {"trace": 1.056, "density": 4.42, "ecdf": 0.487, "esf": 0.513}, {"trace": 1.129, "density": 3.159, "ecdf": 0.781, "esf": 0.219}, {"trace": 1.016, "density": 4.306, "ecdf": 0.312, "esf": 0.688}, {"trace": 1.094, "density": 3.989, "ecdf": 0.65, "esf": 0.35}, {"trace": 1.073, "density": 4.272, "ecdf": 0.566, "esf": 0.434}, {"trace": 1.214, "density": 1.013, "ecdf": 0.949, "esf": 0.051}, {"trace": 1.211, "density": 1.067, "ecdf": 0.946, "esf": 0.054}, {"trace": 0.89, "density": 0.564, "ecdf": 0.016, "esf": 0.984}, {"trace": 1.221, "density": 0.887, "ecdf": 0.955, "esf": 0.045}, {"trace": 0.996, "density": 3.813, "ecdf": 0.224, "esf": 0.776}, {"trace": 1.336, "density": 0.094, "ecdf": 0.996, "esf": 0.004}, {"trace": 1.111, "density": 3.647, "ecdf": 0.719, "esf": 0.281}, {"trace": 1.065, "density": 4.361, "ecdf": 0.531, "esf": 0.469}, {"trace": 1.008, "density": 4.195, "ecdf": 0.281, "esf": 0.719}, {"trace": 1.018, "density": 4.329, "ecdf": 0.322, "esf": 0.678}, {"trace": 1.052, "density": 4.436, "ecdf": 0.471, "esf": 0.529}, {"trace": 0.893, "density": 0.608, "ecdf": 0.018, "esf": 0.982}, {"trace": 1.265, "density": 0.426, "ecdf": 0.98, "esf": 0.02}, {"trace": 1.244, "density": 0.595, "ecdf": 0.971, "esf": 0.029}, {"trace": 1.106, "density": 3.761, "ecdf": 0.701, "esf": 0.299}, {"trace": 1.278, "density": 0.325, "ecdf": 0.986, "esf": 0.014}, {"trace": 1.269, "density": 0.393, "ecdf": 0.983, "esf": 0.017}, {"trace": 1.148, "density": 2.612, "ecdf": 0.833, "esf": 0.167}, {"trace": 1.161, "density": 2.24, "ecdf": 0.867, "esf": 0.133}, {"trace": 1.034, "density": 4.426, "ecdf": 0.39, "esf": 0.61}, {"trace": 1.062, "density": 4.382, "ecdf": 0.516, "esf": 0.484}, {"trace": 1.082, "density": 4.16, "ecdf": 0.605, "esf": 0.395}, {"trace": 1.168, "density": 2.021, "ecdf": 0.882, "esf": 0.118}, {"trace": 1.133, "density": 3.014, "ecdf": 0.794, "esf": 0.206}, {"trace": 1.17, "density": 1.968, "ecdf": 0.886, "esf": 0.114}, {"trace": 1.118, "density": 3.465, "ecdf": 0.743, "esf": 0.257}, {"trace": 1.039, "density": 4.441, "ecdf": 0.416, "esf": 0.584}, {"trace": 1.054, "density": 4.429, "ecdf": 0.48, "esf": 0.52}, {"trace": 1.084, "density": 4.127, "ecdf": 0.616, "esf": 0.384}, {"trace": 1.014, "density": 4.283, "ecdf": 0.304, "esf": 0.696}, {"trace": 0.972, "density": 2.871, "ecdf": 0.147, "esf": 0.853}, {"trace": 0.979, "density": 3.127, "ecdf": 0.168, "esf": 0.832}, {"trace": 1.153, "density": 2.47, "ecdf": 0.846, "esf": 0.154}, {"trace": 0.998, "density": 3.898, "ecdf": 0.234, "esf": 0.766}, {"trace": 1.179, "density": 1.72, "ecdf": 0.902, "esf": 0.098}, {"trace": 1.296, "density": 0.221, "ecdf": 0.99, "esf": 0.01}, {"trace": 0.866, "density": 0.294, "ecdf": 0.006, "esf": 0.994}, {"trace": 1.021, "density": 4.355, "ecdf": 0.336, "esf": 0.664}, {"trace": 1.037, "density": 4.436, "ecdf": 0.405, "esf": 0.595}, {"trace": 0.995, "density": 3.788, "ecdf": 0.22, "esf": 0.78}, {"trace": 1.132, "density": 3.045, "ecdf": 0.791, "esf": 0.209}, {"trace": 1.008, "density": 4.182, "ecdf": 0.278, "esf": 0.722}, {"trace": 0.993, "density": 3.717, "ecdf": 0.214, "esf": 0.786}, {"trace": 0.872, "density": 0.355, "ecdf": 0.009, "esf": 0.991}, {"trace": 0.967, "density": 2.721, "ecdf": 0.134, "esf": 0.866}, {"trace": 0.961, "density": 2.534, "ecdf": 0.116, "esf": 0.884}, {"trace": 1.211, "density": 1.083, "ecdf": 0.945, "esf": 0.055}, {"trace": 1.168, "density": 2.045, "ecdf": 0.88, "esf": 0.12}, {"trace": 1.197, "density": 1.339, "ecdf": 0.927, "esf": 0.073}, {"trace": 1.201, "density": 1.275, "ecdf": 0.932, "esf": 0.068}, {"trace": 1.035, "density": 4.431, "ecdf": 0.398, "esf": 0.602}, {"trace": 1.051, "density": 4.439, "ecdf": 0.468, "esf": 0.532}, {"trace": 1.233, "density": 0.718, "ecdf": 0.963, "esf": 0.037}, {"trace": 0.974, "density": 2.952, "ecdf": 0.154, "esf": 0.846}, {"trace": 1.143, "density": 2.747, "ecdf": 0.82, "esf": 0.18}, {"trace": 1.119, "density": 3.432, "ecdf": 0.748, "esf": 0.252}, {"trace": 1.124, "density": 3.295, "ecdf": 0.765, "esf": 0.235}, {"trace": 0.993, "density": 3.695, "ecdf": 0.213, "esf": 0.787}, {"trace": 1.17, "density": 1.96, "ecdf": 0.886, "esf": 0.114}, {"trace": 0.991, "density": 3.6, "ecdf": 0.204, "esf": 0.796}, {"trace": 1.012, "density": 4.261, "ecdf": 0.295, "esf": 0.705}, {"trace": 1.165, "density": 2.108, "ecdf": 0.877, "esf": 0.123}, {"trace": 1.183, "density": 1.62, "ecdf": 0.909, "esf": 0.091}, {"trace": 1.058, "density": 4.407, "ecdf": 0.498, "esf": 0.502}, {"trace": 1.238, "density": 0.66, "ecdf": 0.967, "esf": 0.033}, {"trace": 1.151, "density": 2.508, "ecdf": 0.842, "esf": 0.158}, {"trace": 1.215, "density": 0.992, "ecdf": 0.95, "esf": 0.05}, {"trace": 1.102, "density": 3.841, "ecdf": 0.684, "esf": 0.316}, {"trace": 1.114, "density": 3.571, "ecdf": 0.73, "esf": 0.27}, {"trace": 0.982, "density": 3.23, "ecdf": 0.175, "esf": 0.825}, {"trace": 0.991, "density": 3.62, "ecdf": 0.206, "esf": 0.794}, {"trace": 1.012, "density": 4.26, "ecdf": 0.295, "esf": 0.705}, {"trace": 1.13, "density": 3.127, "ecdf": 0.784, "esf": 0.216}, {"trace": 1.164, "density": 2.153, "ecdf": 0.873, "esf": 0.127}, {"trace": 1.006, "density": 4.149, "ecdf": 0.271, "esf": 0.729}, {"trace": 0.921, "density": 1.29, "ecdf": 0.04, "esf": 0.96}, {"trace": 0.986, "density": 3.416, "ecdf": 0.19, "esf": 0.81}, {"trace": 1.066, "density": 4.347, "ecdf": 0.538, "esf": 0.462}, {"trace": 1.11, "density": 3.679, "ecdf": 0.714, "esf": 0.286}, {"trace": 1.176, "density": 1.806, "ecdf": 0.897, "esf": 0.103}, {"trace": 1.172, "density": 1.926, "ecdf": 0.889, "esf": 0.111}, {"trace": 1.077, "density": 4.231, "ecdf": 0.58, "esf": 0.42}, {"trace": 0.975, "density": 2.993, "ecdf": 0.158, "esf": 0.842}, {"trace": 1.113, "density": 3.614, "ecdf": 0.724, "esf": 0.276}, {"trace": 1.036, "density": 4.433, "ecdf": 0.4, "esf": 0.6}, {"trace": 1.008, "density": 4.193, "ecdf": 0.28, "esf": 0.72}, {"trace": 0.968, "density": 2.766, "ecdf": 0.138, "esf": 0.862}, {"trace": 1.143, "density": 2.752, "ecdf": 0.819, "esf": 0.181}, {"trace": 0.97, "density": 2.809, "ecdf": 0.141, "esf": 0.859}, {"trace": 0.96, "density": 2.5, "ecdf": 0.114, "esf": 0.886}, {"trace": 1.013, "density": 4.266, "ecdf": 0.297, "esf": 0.703}, {"trace": 0.987, "density": 3.443, "ecdf": 0.192, "esf": 0.808}, {"trace": 1.082, "density": 4.159, "ecdf": 0.607, "esf": 0.393}, {"trace": 0.905, "density": 0.827, "ecdf": 0.027, "esf": 0.973}, {"trace": 1.044, "density": 4.448, "ecdf": 0.436, "esf": 0.564}, {"trace": 1.04, "density": 4.444, "ecdf": 0.42, "esf": 0.58}, {"trace": 0.954, "density": 2.325, "ecdf": 0.101, "esf": 0.899}, {"trace": 1.087, "density": 4.097, "ecdf": 0.623, "esf": 0.377}, {"trace": 1.181, "density": 1.673, "ecdf": 0.906, "esf": 0.094}, {"trace": 0.995, "density": 3.797, "ecdf": 0.22, "esf": 0.78}, {"trace": 0.997, "density": 3.841, "ecdf": 0.228, "esf": 0.772}, {"trace": 1.071, "density": 4.297, "ecdf": 0.557, "esf": 0.443}, {"trace": 1.238, "density": 0.661, "ecdf": 0.967, "esf": 0.033}, {"trace": 0.898, "density": 0.679, "ecdf": 0.02, "esf": 0.98}, {"trace": 1.019, "density": 4.337, "ecdf": 0.325, "esf": 0.675}, {"trace": 0.972, "density": 2.894, "ecdf": 0.149, "esf": 0.851}, {"trace": 1.016, "density": 4.312, "ecdf": 0.315, "esf": 0.685}, {"trace": 1.175, "density": 1.819, "ecdf": 0.896, "esf": 0.104}, {"trace": 0.979, "density": 3.14, "ecdf": 0.17, "esf": 0.83}, {"trace": 1.188, "density": 1.511, "ecdf": 0.915, "esf": 0.085}, {"trace": 1.01, "density": 4.228, "ecdf": 0.287, "esf": 0.713}, {"trace": 0.898, "density": 0.675, "ecdf": 0.02, "esf": 0.98}, {"trace": 1.018, "density": 4.327, "ecdf": 0.322, "esf": 0.678}, {"trace": 0.974, "density": 2.968, "ecdf": 0.156, "esf": 0.844}, {"trace": 0.994, "density": 3.754, "ecdf": 0.217, "esf": 0.783}, {"trace": 1.025, "density": 4.383, "ecdf": 0.354, "esf": 0.646}, {"trace": 1.098, "density": 3.918, "ecdf": 0.667, "esf": 0.333}, {"trace": 1.417, "density": 0.022, "ecdf": 1.0, "esf": 0.0}, {"trace": 0.93, "density": 1.584, "ecdf": 0.053, "esf": 0.947}, {"trace": 1.056, "density": 4.417, "ecdf": 0.49, "esf": 0.51}, {"trace": 1.063, "density": 4.371, "ecdf": 0.523, "esf": 0.477}, {"trace": 0.971, "density": 2.851, "ecdf": 0.146, "esf": 0.854}, {"trace": 1.054, "density": 4.429, "ecdf": 0.48, "esf": 0.52}, {"trace": 1.112, "density": 3.621, "ecdf": 0.723, "esf": 0.277}, {"trace": 0.997, "density": 3.84, "ecdf": 0.227, "esf": 0.772}, {"trace": 1.139, "density": 2.856, "ecdf": 0.81, "esf": 0.19}, {"trace": 0.95, "density": 2.194, "ecdf": 0.092, "esf": 0.908}, {"trace": 1.122, "density": 3.365, "ecdf": 0.757, "esf": 0.243}, {"trace": 0.925, "density": 1.405, "ecdf": 0.045, "esf": 0.955}, {"trace": 1.182, "density": 1.646, "ecdf": 0.908, "esf": 0.092}, {"trace": 1.024, "density": 4.373, "ecdf": 0.347, "esf": 0.653}, {"trace": 1.023, "density": 4.368, "ecdf": 0.344, "esf": 0.656}, {"trace": 1.068, "density": 4.332, "ecdf": 0.545, "esf": 0.455}, {"trace": 1.127, "density": 3.2, "ecdf": 0.776, "esf": 0.224}, {"trace": 1.222, "density": 0.866, "ecdf": 0.956, "esf": 0.044}, {"trace": 0.931, "density": 1.599, "ecdf": 0.054, "esf": 0.946}, {"trace": 1.183, "density": 1.621, "ecdf": 0.909, "esf": 0.091}, {"trace": 1.02, "density": 4.347, "ecdf": 0.331, "esf": 0.669}, {"trace": 1.197, "density": 1.333, "ecdf": 0.928, "esf": 0.072}, {"trace": 0.939, "density": 1.855, "ecdf": 0.072, "esf": 0.928}, {"trace": 1.201, "density": 1.273, "ecdf": 0.932, "esf": 0.068}, {"trace": 1.151, "density": 2.511, "ecdf": 0.842, "esf": 0.158}, {"trace": 1.072, "density": 4.288, "ecdf": 0.56, "esf": 0.44}, {"trace": 1.134, "density": 2.982, "ecdf": 0.797, "esf": 0.203}, {"trace": 1.006, "density": 4.129, "ecdf": 0.267, "esf": 0.733}, {"trace": 1.069, "density": 4.323, "ecdf": 0.548, "esf": 0.452}, {"trace": 1.047, "density": 4.447, "ecdf": 0.448, "esf": 0.552}, {"trace": 1.053, "density": 4.43, "ecdf": 0.479, "esf": 0.521}, {"trace": 1.076, "density": 4.239, "ecdf": 0.577, "esf": 0.423}, {"trace": 1.106, "density": 3.765, "ecdf": 0.7, "esf": 0.3}, {"trace": 1.111, "density": 3.645, "ecdf": 0.719, "esf": 0.281}, {"trace": 1.008, "density": 4.185, "ecdf": 0.279, "esf": 0.721}, {"trace": 1.055, "density": 4.423, "ecdf": 0.485, "esf": 0.515}, {"trace": 0.982, "density": 3.265, "ecdf": 0.178, "esf": 0.822}, {"trace": 1.046, "density": 4.447, "ecdf": 0.446, "esf": 0.554}, {"trace": 1.016, "density": 4.313, "ecdf": 0.316, "esf": 0.684}, {"trace": 1.121, "density": 3.371, "ecdf": 0.756, "esf": 0.244}, {"trace": 1.064, "density": 4.365, "ecdf": 0.527, "esf": 0.473}, {"trace": 1.121, "density": 3.379, "ecdf": 0.754, "esf": 0.246}, {"trace": 0.985, "density": 3.387, "ecdf": 0.188, "esf": 0.812}, {"trace": 1.018, "density": 4.332, "ecdf": 0.323, "esf": 0.677}, {"trace": 1.102, "density": 3.847, "ecdf": 0.682, "esf": 0.318}, {"trace": 1.024, "density": 4.375, "ecdf": 0.348, "esf": 0.652}, {"trace": 1.109, "density": 3.706, "ecdf": 0.71, "esf": 0.29}, {"trace": 1.028, "density": 4.399, "ecdf": 0.365, "esf": 0.635}, {"trace": 1.147, "density": 2.617, "ecdf": 0.832, "esf": 0.167}, {"trace": 1.092, "density": 4.019, "ecdf": 0.641, "esf": 0.359}, {"trace": 1.241, "density": 0.63, "ecdf": 0.969, "esf": 0.031}, {"trace": 1.128, "density": 3.165, "ecdf": 0.78, "esf": 0.22}, {"trace": 1.043, "density": 4.447, "ecdf": 0.431, "esf": 0.569}, {"trace": 1.154, "density": 2.438, "ecdf": 0.849, "esf": 0.151}, {"trace": 1.094, "density": 3.975, "ecdf": 0.653, "esf": 0.347}, {"trace": 1.169, "density": 2.014, "ecdf": 0.882, "esf": 0.118}, {"trace": 1.067, "density": 4.338, "ecdf": 0.54, "esf": 0.46}, {"trace": 0.999, "density": 3.933, "ecdf": 0.239, "esf": 0.761}, {"trace": 0.844, "density": 0.13, "ecdf": 0.003, "esf": 0.997}, {"trace": 0.885, "density": 0.498, "ecdf": 0.015, "esf": 0.985}, {"trace": 1.079, "density": 4.207, "ecdf": 0.589, "esf": 0.411}, {"trace": 1.068, "density": 4.333, "ecdf": 0.543, "esf": 0.457}, {"trace": 1.039, "density": 4.442, "ecdf": 0.417, "esf": 0.583}, {"trace": 1.056, "density": 4.419, "ecdf": 0.489, "esf": 0.511}, {"trace": 1.084, "density": 4.14, "ecdf": 0.612, "esf": 0.388}, {"trace": 1.104, "density": 3.811, "ecdf": 0.692, "esf": 0.308}, {"trace": 1.006, "density": 4.142, "ecdf": 0.269, "esf": 0.731}, {"trace": 1.064, "density": 4.364, "ecdf": 0.528, "esf": 0.472}, {"trace": 1.083, "density": 4.153, "ecdf": 0.609, "esf": 0.391}, {"trace": 1.262, "density": 0.445, "ecdf": 0.979, "esf": 0.021}, {"trace": 1.063, "density": 4.375, "ecdf": 0.521, "esf": 0.479}, {"trace": 0.982, "density": 3.248, "ecdf": 0.176, "esf": 0.824}, {"trace": 1.104, "density": 3.808, "ecdf": 0.693, "esf": 0.307}, {"trace": 0.906, "density": 0.842, "ecdf": 0.028, "esf": 0.972}, {"trace": 0.934, "density": 1.694, "ecdf": 0.061, "esf": 0.939}, {"trace": 1.022, "density": 4.361, "ecdf": 0.339, "esf": 0.661}, {"trace": 1.061, "density": 4.39, "ecdf": 0.511, "esf": 0.489}, {"trace": 1.188, "density": 1.521, "ecdf": 0.914, "esf": 0.086}, {"trace": 1.025, "density": 4.383, "ecdf": 0.353, "esf": 0.647}, {"trace": 0.995, "density": 3.798, "ecdf": 0.221, "esf": 0.779}, {"trace": 1.045, "density": 4.447, "ecdf": 0.443, "esf": 0.557}, {"trace": 1.067, "density": 4.336, "ecdf": 0.542, "esf": 0.458}, {"trace": 1.041, "density": 4.446, "ecdf": 0.425, "esf": 0.575}, {"trace": 1.08, "density": 4.195, "ecdf": 0.595, "esf": 0.405}, {"trace": 1.091, "density": 4.024, "ecdf": 0.639, "esf": 0.361}, {"trace": 1.006, "density": 4.132, "ecdf": 0.268, "esf": 0.732}, {"trace": 1.096, "density": 3.946, "ecdf": 0.661, "esf": 0.339}, {"trace": 1.075, "density": 4.25, "ecdf": 0.574, "esf": 0.426}, {"trace": 0.991, "density": 3.619, "ecdf": 0.206, "esf": 0.794}, {"trace": 1.197, "density": 1.334, "ecdf": 0.928, "esf": 0.072}, {"trace": 1.128, "density": 3.18, "ecdf": 0.778, "esf": 0.222}, {"trace": 1.082, "density": 4.162, "ecdf": 0.605, "esf": 0.395}, {"trace": 1.186, "density": 1.568, "ecdf": 0.912, "esf": 0.088}, {"trace": 0.92, "density": 1.254, "ecdf": 0.039, "esf": 0.961}, {"trace": 1.235, "density": 0.696, "ecdf": 0.964, "esf": 0.036}, {"trace": 1.118, "density": 3.466, "ecdf": 0.743, "esf": 0.257}, {"trace": 1.085, "density": 4.117, "ecdf": 0.618, "esf": 0.382}, {"trace": 1.226, "density": 0.809, "ecdf": 0.959, "esf": 0.041}, {"trace": 1.165, "density": 2.133, "ecdf": 0.875, "esf": 0.125}, {"trace": 0.964, "density": 2.619, "ecdf": 0.125, "esf": 0.875}, {"trace": 0.996, "density": 3.819, "ecdf": 0.225, "esf": 0.775}, {"trace": 1.129, "density": 3.147, "ecdf": 0.782, "esf": 0.218}, {"trace": 1.021, "density": 4.357, "ecdf": 0.337, "esf": 0.663}, {"trace": 1.031, "density": 4.411, "ecdf": 0.374, "esf": 0.626}, {"trace": 1.075, "density": 4.259, "ecdf": 0.571, "esf": 0.429}, {"trace": 0.996, "density": 3.823, "ecdf": 0.225, "esf": 0.775}, {"trace": 1.005, "density": 4.118, "ecdf": 0.264, "esf": 0.736}, {"trace": 0.984, "density": 3.309, "ecdf": 0.181, "esf": 0.819}, {"trace": 1.049, "density": 4.443, "ecdf": 0.459, "esf": 0.541}, {"trace": 1.036, "density": 4.432, "ecdf": 0.399, "esf": 0.601}, {"trace": 1.164, "density": 2.138, "ecdf": 0.874, "esf": 0.126}, {"trace": 1.092, "density": 4.007, "ecdf": 0.645, "esf": 0.355}, {"trace": 1.005, "density": 4.104, "ecdf": 0.262, "esf": 0.738}, {"trace": 1.002, "density": 4.04, "ecdf": 0.252, "esf": 0.748}, {"trace": 1.065, "density": 4.357, "ecdf": 0.533, "esf": 0.467}, {"trace": 1.014, "density": 4.288, "ecdf": 0.306, "esf": 0.694}, {"trace": 0.959, "density": 2.463, "ecdf": 0.111, "esf": 0.889}, {"trace": 1.024, "density": 4.373, "ecdf": 0.347, "esf": 0.653}, {"trace": 1.032, "density": 4.417, "ecdf": 0.381, "esf": 0.619}, {"trace": 1.108, "density": 3.715, "ecdf": 0.708, "esf": 0.292}, {"trace": 1.045, "density": 4.448, "ecdf": 0.441, "esf": 0.559}, {"trace": 0.925, "density": 1.424, "ecdf": 0.045, "esf": 0.955}, {"trace": 0.994, "density": 3.739, "ecdf": 0.216, "esf": 0.784}, {"trace": 1.003, "density": 4.064, "ecdf": 0.255, "esf": 0.745}, {"trace": 1.028, "density": 4.399, "ecdf": 0.365, "esf": 0.635}, {"trace": 1.14, "density": 2.835, "ecdf": 0.812, "esf": 0.188}, {"trace": 0.938, "density": 1.82, "ecdf": 0.07, "esf": 0.93}, {"trace": 1.064, "density": 4.366, "ecdf": 0.527, "esf": 0.473}, {"trace": 1.08, "density": 4.195, "ecdf": 0.595, "esf": 0.405}, {"trace": 1.116, "density": 3.531, "ecdf": 0.736, "esf": 0.264}, {"trace": 1.079, "density": 4.201, "ecdf": 0.593, "esf": 0.407}, {"trace": 1.045, "density": 4.447, "ecdf": 0.442, "esf": 0.558}, {"trace": 0.947, "density": 2.089, "ecdf": 0.084, "esf": 0.916}, {"trace": 0.978, "density": 3.092, "ecdf": 0.166, "esf": 0.834}, {"trace": 1.199, "density": 1.296, "ecdf": 0.931, "esf": 0.069}, {"trace": 1.046, "density": 4.447, "ecdf": 0.443, "esf": 0.557}, {"trace": 0.963, "density": 2.582, "ecdf": 0.122, "esf": 0.879}, {"trace": 0.959, "density": 2.471, "ecdf": 0.112, "esf": 0.888}, {"trace": 1.024, "density": 4.377, "ecdf": 0.349, "esf": 0.651}, {"trace": 1.164, "density": 2.153, "ecdf": 0.873, "esf": 0.127}, {"trace": 0.929, "density": 1.529, "ecdf": 0.05, "esf": 0.95}, {"trace": 0.86, "density": 0.241, "ecdf": 0.005, "esf": 0.995}, {"trace": 1.015, "density": 4.294, "ecdf": 0.308, "esf": 0.692}, {"trace": 1.145, "density": 2.691, "ecdf": 0.826, "esf": 0.174}, {"trace": 1.11, "density": 3.677, "ecdf": 0.715, "esf": 0.285}, {"trace": 1.094, "density": 3.976, "ecdf": 0.653, "esf": 0.347}, {"trace": 1.147, "density": 2.636, "ecdf": 0.831, "esf": 0.169}, {"trace": 1.049, "density": 4.443, "ecdf": 0.458, "esf": 0.542}, {"trace": 1.036, "density": 4.434, "ecdf": 0.401, "esf": 0.599}, {"trace": 1.056, "density": 4.418, "ecdf": 0.489, "esf": 0.511}, {"trace": 1.09, "density": 4.044, "ecdf": 0.634, "esf": 0.366}, {"trace": 1.155, "density": 2.399, "ecdf": 0.854, "esf": 0.146}, {"trace": 0.966, "density": 2.698, "ecdf": 0.132, "esf": 0.868}, {"trace": 1.091, "density": 4.025, "ecdf": 0.638, "esf": 0.362}, {"trace": 1.074, "density": 4.263, "ecdf": 0.569, "esf": 0.431}, {"trace": 1.126, "density": 3.247, "ecdf": 0.77, "esf": 0.23}, {"trace": 1.052, "density": 4.434, "ecdf": 0.476, "esf": 0.524}, {"trace": 1.117, "density": 3.506, "ecdf": 0.738, "esf": 0.262}, {"trace": 1.165, "density": 2.109, "ecdf": 0.876, "esf": 0.124}, {"trace": 1.074, "density": 4.27, "ecdf": 0.566, "esf": 0.434}, {"trace": 1.043, "density": 4.447, "ecdf": 0.432, "esf": 0.568}, {"trace": 1.064, "density": 4.367, "ecdf": 0.526, "esf": 0.474}, {"trace": 1.189, "density": 1.487, "ecdf": 0.916, "esf": 0.084}, {"trace": 1.122, "density": 3.347, "ecdf": 0.759, "esf": 0.241}, {"trace": 1.075, "density": 4.251, "ecdf": 0.574, "esf": 0.426}, {"trace": 1.048, "density": 4.444, "ecdf": 0.457, "esf": 0.543}, {"trace": 1.088, "density": 4.072, "ecdf": 0.629, "esf": 0.371}, {"trace": 0.963, "density": 2.61, "ecdf": 0.124, "esf": 0.876}, {"trace": 1.045, "density": 4.448, "ecdf": 0.441, "esf": 0.559}, {"trace": 1.122, "density": 3.367, "ecdf": 0.757, "esf": 0.243}, {"trace": 1.073, "density": 4.277, "ecdf": 0.564, "esf": 0.436}, {"trace": 1.102, "density": 3.842, "ecdf": 0.684, "esf": 0.316}, {"trace": 1.216, "density": 0.971, "ecdf": 0.951, "esf": 0.049}, {"trace": 1.08, "density": 4.186, "ecdf": 0.597, "esf": 0.403}, {"trace": 1.002, "density": 4.033, "ecdf": 0.251, "esf": 0.749}, {"trace": 1.201, "density": 1.262, "ecdf": 0.934, "esf": 0.066}, {"trace": 1.114, "density": 3.573, "ecdf": 0.73, "esf": 0.27}, {"trace": 1.147, "density": 2.642, "ecdf": 0.83, "esf": 0.17}, {"trace": 1.073, "density": 4.274, "ecdf": 0.565, "esf": 0.435}, {"trace": 1.065, "density": 4.361, "ecdf": 0.531, "esf": 0.469}, {"trace": 1.059, "density": 4.405, "ecdf": 0.5, "esf": 0.5}, {"trace": 1.198, "density": 1.316, "ecdf": 0.929, "esf": 0.071}, {"trace": 1.28, "density": 0.312, "ecdf": 0.987, "esf": 0.013}, {"trace": 1.039, "density": 4.442, "ecdf": 0.417, "esf": 0.583}, {"trace": 1.009, "density": 4.206, "ecdf": 0.282, "esf": 0.718}, {"trace": 1.107, "density": 3.734, "ecdf": 0.704, "esf": 0.296}, {"trace": 1.048, "density": 4.445, "ecdf": 0.454, "esf": 0.546}, {"trace": 1.019, "density": 4.34, "ecdf": 0.326, "esf": 0.674}, {"trace": 0.948, "density": 2.129, "ecdf": 0.087, "esf": 0.913}, {"trace": 0.975, "density": 2.974, "ecdf": 0.156, "esf": 0.844}, {"trace": 1.054, "density": 4.426, "ecdf": 0.482, "esf": 0.518}, {"trace": 1.027, "density": 4.391, "ecdf": 0.36, "esf": 0.64}, {"trace": 0.955, "density": 2.339, "ecdf": 0.102, "esf": 0.898}, {"trace": 1.009, "density": 4.201, "ecdf": 0.281, "esf": 0.719}, {"trace": 1.034, "density": 4.426, "ecdf": 0.389, "esf": 0.611}, {"trace": 1.086, "density": 4.098, "ecdf": 0.623, "esf": 0.377}, {"trace": 0.936, "density": 1.766, "ecdf": 0.066, "esf": 0.934}, {"trace": 1.036, "density": 4.433, "ecdf": 0.399, "esf": 0.601}, {"trace": 1.026, "density": 4.388, "ecdf": 0.358, "esf": 0.643}, {"trace": 1.074, "density": 4.263, "ecdf": 0.569, "esf": 0.431}, {"trace": 1.086, "density": 4.101, "ecdf": 0.622, "esf": 0.378}, {"trace": 1.126, "density": 3.243, "ecdf": 0.771, "esf": 0.229}, {"trace": 0.971, "density": 2.864, "ecdf": 0.147, "esf": 0.853}, {"trace": 0.951, "density": 2.226, "ecdf": 0.094, "esf": 0.906}, {"trace": 0.932, "density": 1.627, "ecdf": 0.056, "esf": 0.944}, {"trace": 1.021, "density": 4.357, "ecdf": 0.337, "esf": 0.663}, {"trace": 1.08, "density": 4.183, "ecdf": 0.598, "esf": 0.402}, {"trace": 1.078, "density": 4.216, "ecdf": 0.586, "esf": 0.414}, {"trace": 1.057, "density": 4.413, "ecdf": 0.495, "esf": 0.505}, {"trace": 1.183, "density": 1.624, "ecdf": 0.909, "esf": 0.091}, {"trace": 1.108, "density": 3.711, "ecdf": 0.709, "esf": 0.291}, {"trace": 1.27, "density": 0.382, "ecdf": 0.984, "esf": 0.016}, {"trace": 1.288, "density": 0.263, "ecdf": 0.988, "esf": 0.011}, {"trace": 1.146, "density": 2.667, "ecdf": 0.828, "esf": 0.172}, {"trace": 0.973, "density": 2.932, "ecdf": 0.152, "esf": 0.848}, {"trace": 0.964, "density": 2.612, "ecdf": 0.124, "esf": 0.876}, {"trace": 1.097, "density": 3.936, "ecdf": 0.664, "esf": 0.336}, {"trace": 1.082, "density": 4.166, "ecdf": 0.603, "esf": 0.397}, {"trace": 1.096, "density": 3.949, "ecdf": 0.66, "esf": 0.34}, {"trace": 1.162, "density": 2.214, "ecdf": 0.868, "esf": 0.132}, {"trace": 1.038, "density": 4.44, "ecdf": 0.412, "esf": 0.588}, {"trace": 1.117, "density": 3.485, "ecdf": 0.741, "esf": 0.259}, {"trace": 1.181, "density": 1.675, "ecdf": 0.905, "esf": 0.095}, {"trace": 0.937, "density": 1.789, "ecdf": 0.067, "esf": 0.933}, {"trace": 1.016, "density": 4.312, "ecdf": 0.315, "esf": 0.685}, {"trace": 0.924, "density": 1.391, "ecdf": 0.044, "esf": 0.956}, {"trace": 1.034, "density": 4.427, "ecdf": 0.39, "esf": 0.609}, {"trace": 0.992, "density": 3.652, "ecdf": 0.209, "esf": 0.791}, {"trace": 1.059, "density": 4.404, "ecdf": 0.5, "esf": 0.5}, {"trace": 0.976, "density": 3.011, "ecdf": 0.16, "esf": 0.84}, {"trace": 1.071, "density": 4.298, "ecdf": 0.556, "esf": 0.444}, {"trace": 1.053, "density": 4.43, "ecdf": 0.479, "esf": 0.521}, {"trace": 1.031, "density": 4.411, "ecdf": 0.374, "esf": 0.626}, {"trace": 1.013, "density": 4.267, "ecdf": 0.298, "esf": 0.702}, {"trace": 1.091, "density": 4.03, "ecdf": 0.638, "esf": 0.362}, {"trace": 1.052, "density": 4.436, "ecdf": 0.472, "esf": 0.528}, {"trace": 0.974, "density": 2.965, "ecdf": 0.155, "esf": 0.845}, {"trace": 0.997, "density": 3.876, "ecdf": 0.232, "esf": 0.768}, {"trace": 1.083, "density": 4.145, "ecdf": 0.61, "esf": 0.39}, {"trace": 1.051, "density": 4.436, "ecdf": 0.471, "esf": 0.529}, {"trace": 1.134, "density": 3.008, "ecdf": 0.794, "esf": 0.206}, {"trace": 1.052, "density": 4.435, "ecdf": 0.473, "esf": 0.527}, {"trace": 1.032, "density": 4.417, "ecdf": 0.381, "esf": 0.619}, {"trace": 1.037, "density": 4.438, "ecdf": 0.408, "esf": 0.592}, {"trace": 0.999, "density": 3.933, "ecdf": 0.239, "esf": 0.761}, {"trace": 0.975, "density": 2.975, "ecdf": 0.156, "esf": 0.844}, {"trace": 1.0, "density": 3.972, "ecdf": 0.243, "esf": 0.757}, {"trace": 1.101, "density": 3.857, "ecdf": 0.681, "esf": 0.319}, {"trace": 1.093, "density": 4.004, "ecdf": 0.646, "esf": 0.354}, {"trace": 1.011, "density": 4.239, "ecdf": 0.29, "esf": 0.71}, {"trace": 1.019, "density": 4.342, "ecdf": 0.327, "esf": 0.673}, {"trace": 0.971, "density": 2.857, "ecdf": 0.146, "esf": 0.854}, {"trace": 1.118, "density": 3.471, "ecdf": 0.742, "esf": 0.258}, {"trace": 1.055, "density": 4.425, "ecdf": 0.483, "esf": 0.517}, {"trace": 1.061, "density": 4.389, "ecdf": 0.512, "esf": 0.488}, {"trace": 1.035, "density": 4.428, "ecdf": 0.393, "esf": 0.607}, {"trace": 1.1, "density": 3.877, "ecdf": 0.676, "esf": 0.324}, {"trace": 1.341, "density": 0.086, "ecdf": 0.996, "esf": 0.004}, {"trace": 1.109, "density": 3.689, "ecdf": 0.712, "esf": 0.288}, {"trace": 1.123, "density": 3.337, "ecdf": 0.76, "esf": 0.24}, {"trace": 1.086, "density": 4.105, "ecdf": 0.62, "esf": 0.38}, {"trace": 1.177, "density": 1.78, "ecdf": 0.899, "esf": 0.101}, {"trace": 1.144, "density": 2.724, "ecdf": 0.822, "esf": 0.178}, {"trace": 0.959, "density": 2.463, "ecdf": 0.111, "esf": 0.889}, {"trace": 1.111, "density": 3.654, "ecdf": 0.718, "esf": 0.282}, {"trace": 0.87, "density": 0.338, "ecdf": 0.008, "esf": 0.992}, {"trace": 0.885, "density": 0.492, "ecdf": 0.014, "esf": 0.986}, {"trace": 1.11, "density": 3.684, "ecdf": 0.713, "esf": 0.287}, {"trace": 1.006, "density": 4.134, "ecdf": 0.268, "esf": 0.732}, {"trace": 1.162, "density": 2.2, "ecdf": 0.87, "esf": 0.13}, {"trace": 1.092, "density": 4.011, "ecdf": 0.643, "esf": 0.357}, {"trace": 1.008, "density": 4.194, "ecdf": 0.28, "esf": 0.72}, {"trace": 1.02, "density": 4.349, "ecdf": 0.332, "esf": 0.668}, {"trace": 1.084, "density": 4.139, "ecdf": 0.612, "esf": 0.388}, {"trace": 1.015, "density": 4.295, "ecdf": 0.309, "esf": 0.691}, {"trace": 1.013, "density": 4.278, "ecdf": 0.302, "esf": 0.698}, {"trace": 1.023, "density": 4.367, "ecdf": 0.344, "esf": 0.656}, {"trace": 1.239, "density": 0.649, "ecdf": 0.967, "esf": 0.033}, {"trace": 1.08, "density": 4.185, "ecdf": 0.598, "esf": 0.402}, {"trace": 0.981, "density": 3.219, "ecdf": 0.174, "esf": 0.826}, {"trace": 1.128, "density": 3.188, "ecdf": 0.777, "esf": 0.223}, {"trace": 1.13, "density": 3.124, "ecdf": 0.784, "esf": 0.216}, {"trace": 1.199, "density": 1.304, "ecdf": 0.93, "esf": 0.07}, {"trace": 1.098, "density": 3.912, "ecdf": 0.668, "esf": 0.332}, {"trace": 1.023, "density": 4.371, "ecdf": 0.346, "esf": 0.654}, {"trace": 1.042, "density": 4.447, "ecdf": 0.429, "esf": 0.571}, {"trace": 1.09, "density": 4.045, "ecdf": 0.634, "esf": 0.366}, {"trace": 0.914, "density": 1.05, "ecdf": 0.033, "esf": 0.967}, {"trace": 1.19, "density": 1.474, "ecdf": 0.917, "esf": 0.083}, {"trace": 0.937, "density": 1.793, "ecdf": 0.067, "esf": 0.933}, {"trace": 1.198, "density": 1.323, "ecdf": 0.929, "esf": 0.071}, {"trace": 1.085, "density": 4.112, "ecdf": 0.618, "esf": 0.382}, {"trace": 1.018, "density": 4.325, "ecdf": 0.321, "esf": 0.679}, {"trace": 1.093, "density": 4.003, "ecdf": 0.646, "esf": 0.354}, {"trace": 1.136, "density": 2.926, "ecdf": 0.803, "esf": 0.197}, {"trace": 0.945, "density": 2.047, "ecdf": 0.083, "esf": 0.917}, {"trace": 1.182, "density": 1.649, "ecdf": 0.907, "esf": 0.093}, {"trace": 0.955, "density": 2.338, "ecdf": 0.102, "esf": 0.898}, {"trace": 0.978, "density": 3.108, "ecdf": 0.168, "esf": 0.832}, {"trace": 1.15, "density": 2.55, "ecdf": 0.839, "esf": 0.161}, {"trace": 0.939, "density": 1.855, "ecdf": 0.072, "esf": 0.928}, {"trace": 1.035, "density": 4.429, "ecdf": 0.394, "esf": 0.606}, {"trace": 1.047, "density": 4.446, "ecdf": 0.451, "esf": 0.549}, {"trace": 1.005, "density": 4.123, "ecdf": 0.266, "esf": 0.734}, {"trace": 1.014, "density": 4.286, "ecdf": 0.305, "esf": 0.695}, {"trace": 1.138, "density": 2.879, "ecdf": 0.807, "esf": 0.193}, {"trace": 0.857, "density": 0.22, "ecdf": 0.005, "esf": 0.996}, {"trace": 1.02, "density": 4.344, "ecdf": 0.329, "esf": 0.671}, {"trace": 1.152, "density": 2.483, "ecdf": 0.844, "esf": 0.156}, {"trace": 1.013, "density": 4.272, "ecdf": 0.299, "esf": 0.701}, {"trace": 0.966, "density": 2.692, "ecdf": 0.131, "esf": 0.868}, {"trace": 1.008, "density": 4.178, "ecdf": 0.278, "esf": 0.722}, {"trace": 1.069, "density": 4.322, "ecdf": 0.548, "esf": 0.452}, {"trace": 1.176, "density": 1.803, "ecdf": 0.897, "esf": 0.103}, {"trace": 1.154, "density": 2.438, "ecdf": 0.849, "esf": 0.151}, {"trace": 0.991, "density": 3.63, "ecdf": 0.207, "esf": 0.793}, {"trace": 1.064, "density": 4.363, "ecdf": 0.529, "esf": 0.471}, {"trace": 1.034, "density": 4.426, "ecdf": 0.389, "esf": 0.611}, {"trace": 1.234, "density": 0.7, "ecdf": 0.964, "esf": 0.036}, {"trace": 1.125, "density": 3.273, "ecdf": 0.768, "esf": 0.232}, {"trace": 1.011, "density": 4.243, "ecdf": 0.292, "esf": 0.708}, {"trace": 1.117, "density": 3.507, "ecdf": 0.738, "esf": 0.262}, {"trace": 1.043, "density": 4.447, "ecdf": 0.43, "esf": 0.57}, {"trace": 1.048, "density": 4.444, "ecdf": 0.456, "esf": 0.544}, {"trace": 1.137, "density": 2.902, "ecdf": 0.805, "esf": 0.195}, {"trace": 1.101, "density": 3.856, "ecdf": 0.681, "esf": 0.319}, {"trace": 1.02, "density": 4.349, "ecdf": 0.332, "esf": 0.668}, {"trace": 1.015, "density": 4.293, "ecdf": 0.308, "esf": 0.692}, {"trace": 1.146, "density": 2.65, "ecdf": 0.829, "esf": 0.171}, {"trace": 1.077, "density": 4.227, "ecdf": 0.581, "esf": 0.419}, {"trace": 1.075, "density": 4.256, "ecdf": 0.573, "esf": 0.427}, {"trace": 1.132, "density": 3.044, "ecdf": 0.791, "esf": 0.209}, {"trace": 1.049, "density": 4.442, "ecdf": 0.46, "esf": 0.54}, {"trace": 1.257, "density": 0.481, "ecdf": 0.977, "esf": 0.023}, {"trace": 1.304, "density": 0.188, "ecdf": 0.992, "esf": 0.008}, {"trace": 1.28, "density": 0.312, "ecdf": 0.986, "esf": 0.013}, {"trace": 0.87, "density": 0.334, "ecdf": 0.008, "esf": 0.992}, {"trace": 1.155, "density": 2.414, "ecdf": 0.852, "esf": 0.148}, {"trace": 1.084, "density": 4.138, "ecdf": 0.612, "esf": 0.388}, {"trace": 1.044, "density": 4.448, "ecdf": 0.438, "esf": 0.562}, {"trace": 1.023, "density": 4.371, "ecdf": 0.346, "esf": 0.655}, {"trace": 1.011, "density": 4.233, "ecdf": 0.289, "esf": 0.711}, {"trace": 0.985, "density": 3.385, "ecdf": 0.188, "esf": 0.812}, {"trace": 1.05, "density": 4.441, "ecdf": 0.464, "esf": 0.536}, {"trace": 1.001, "density": 3.995, "ecdf": 0.247, "esf": 0.753}, {"trace": 1.122, "density": 3.35, "ecdf": 0.758, "esf": 0.242}, {"trace": 0.984, "density": 3.323, "ecdf": 0.182, "esf": 0.818}, {"trace": 1.163, "density": 2.186, "ecdf": 0.871, "esf": 0.129}, {"trace": 1.162, "density": 2.213, "ecdf": 0.868, "esf": 0.131}, {"trace": 1.12, "density": 3.418, "ecdf": 0.75, "esf": 0.25}, {"trace": 1.244, "density": 0.598, "ecdf": 0.971, "esf": 0.029}, {"trace": 0.87, "density": 0.333, "ecdf": 0.008, "esf": 0.992}, {"trace": 1.071, "density": 4.301, "ecdf": 0.555, "esf": 0.445}, {"trace": 0.987, "density": 3.433, "ecdf": 0.191, "esf": 0.809}, {"trace": 1.187, "density": 1.525, "ecdf": 0.914, "esf": 0.086}, {"trace": 1.182, "density": 1.642, "ecdf": 0.908, "esf": 0.092}, {"trace": 1.118, "density": 3.48, "ecdf": 0.741, "esf": 0.259}, {"trace": 1.109, "density": 3.709, "ecdf": 0.71, "esf": 0.29}, {"trace": 1.104, "density": 3.812, "ecdf": 0.692, "esf": 0.308}, {"trace": 1.161, "density": 2.241, "ecdf": 0.867, "esf": 0.133}, {"trace": 1.171, "density": 1.951, "ecdf": 0.887, "esf": 0.113}, {"trace": 1.275, "density": 0.35, "ecdf": 0.985, "esf": 0.015}, {"trace": 1.072, "density": 4.293, "ecdf": 0.558, "esf": 0.442}, {"trace": 1.172, "density": 1.904, "ecdf": 0.89, "esf": 0.11}, {"trace": 1.135, "density": 2.961, "ecdf": 0.799, "esf": 0.201}, {"trace": 1.077, "density": 4.229, "ecdf": 0.58, "esf": 0.42}, {"trace": 1.003, "density": 4.072, "ecdf": 0.256, "esf": 0.744}, {"trace": 1.091, "density": 4.022, "ecdf": 0.64, "esf": 0.36}, {"trace": 1.013, "density": 4.27, "ecdf": 0.299, "esf": 0.701}, {"trace": 1.0, "density": 3.962, "ecdf": 0.242, "esf": 0.758}, {"trace": 1.095, "density": 3.96, "ecdf": 0.657, "esf": 0.343}, {"trace": 1.177, "density": 1.782, "ecdf": 0.899, "esf": 0.101}, {"trace": 1.071, "density": 4.303, "ecdf": 0.555, "esf": 0.445}, {"trace": 1.156, "density": 2.389, "ecdf": 0.855, "esf": 0.145}, {"trace": 0.885, "density": 0.5, "ecdf": 0.015, "esf": 0.985}, {"trace": 1.119, "density": 3.44, "ecdf": 0.747, "esf": 0.253}, {"trace": 1.026, "density": 4.385, "ecdf": 0.355, "esf": 0.645}, {"trace": 0.989, "density": 3.517, "ecdf": 0.197, "esf": 0.803}, {"trace": 1.147, "density": 2.631, "ecdf": 0.831, "esf": 0.169}, {"trace": 1.031, "density": 4.415, "ecdf": 0.378, "esf": 0.622}, {"trace": 0.96, "density": 2.502, "ecdf": 0.114, "esf": 0.886}, {"trace": 1.125, "density": 3.265, "ecdf": 0.769, "esf": 0.231}, {"trace": 1.185, "density": 1.577, "ecdf": 0.912, "esf": 0.088}, {"trace": 1.054, "density": 4.428, "ecdf": 0.48, "esf": 0.52}, {"trace": 0.973, "density": 2.917, "ecdf": 0.15, "esf": 0.85}, {"trace": 1.001, "density": 3.985, "ecdf": 0.246, "esf": 0.754}, {"trace": 1.024, "density": 4.374, "ecdf": 0.348, "esf": 0.652}, {"trace": 1.066, "density": 4.345, "ecdf": 0.539, "esf": 0.461}, {"trace": 1.143, "density": 2.746, "ecdf": 0.82, "esf": 0.18}, {"trace": 1.206, "density": 1.167, "ecdf": 0.94, "esf": 0.06}, {"trace": 0.987, "density": 3.434, "ecdf": 0.191, "esf": 0.809}, {"trace": 1.177, "density": 1.77, "ecdf": 0.9, "esf": 0.1}, {"trace": 1.178, "density": 1.762, "ecdf": 0.9, "esf": 0.1}, {"trace": 1.031, "density": 4.413, "ecdf": 0.377, "esf": 0.623}, {"trace": 1.1, "density": 3.872, "ecdf": 0.677, "esf": 0.323}, {"trace": 1.13, "density": 3.127, "ecdf": 0.784, "esf": 0.216}, {"trace": 1.01, "density": 4.218, "ecdf": 0.285, "esf": 0.715}, {"trace": 0.959, "density": 2.466, "ecdf": 0.112, "esf": 0.888}, {"trace": 0.958, "density": 2.426, "ecdf": 0.108, "esf": 0.892}, {"trace": 1.022, "density": 4.361, "ecdf": 0.34, "esf": 0.66}, {"trace": 1.199, "density": 1.308, "ecdf": 0.93, "esf": 0.07}, {"trace": 1.073, "density": 4.282, "ecdf": 0.562, "esf": 0.438}, {"trace": 1.055, "density": 4.423, "ecdf": 0.485, "esf": 0.515}, {"trace": 1.24, "density": 0.636, "ecdf": 0.969, "esf": 0.031}, {"trace": 0.996, "density": 3.825, "ecdf": 0.225, "esf": 0.775}, {"trace": 1.041, "density": 4.445, "ecdf": 0.424, "esf": 0.576}, {"trace": 1.096, "density": 3.951, "ecdf": 0.659, "esf": 0.341}, {"trace": 0.984, "density": 3.347, "ecdf": 0.184, "esf": 0.816}, {"trace": 0.989, "density": 3.534, "ecdf": 0.199, "esf": 0.801}, {"trace": 1.071, "density": 4.299, "ecdf": 0.556, "esf": 0.444}, {"trace": 1.117, "density": 3.497, "ecdf": 0.739, "esf": 0.261}, {"trace": 1.139, "density": 2.851, "ecdf": 0.81, "esf": 0.19}, {"trace": 1.069, "density": 4.324, "ecdf": 0.548, "esf": 0.452}, {"trace": 0.938, "density": 1.83, "ecdf": 0.07, "esf": 0.93}, {"trace": 1.215, "density": 0.99, "ecdf": 0.95, "esf": 0.05}, {"trace": 0.912, "density": 0.999, "ecdf": 0.031, "esf": 0.969}, {"trace": 0.944, "density": 2.011, "ecdf": 0.08, "esf": 0.92}, {"trace": 1.14, "density": 2.836, "ecdf": 0.811, "esf": 0.189}, {"trace": 0.926, "density": 1.45, "ecdf": 0.046, "esf": 0.954}, {"trace": 1.136, "density": 2.931, "ecdf": 0.802, "esf": 0.198}, {"trace": 0.952, "density": 2.249, "ecdf": 0.096, "esf": 0.904}, {"trace": 0.928, "density": 1.518, "ecdf": 0.049, "esf": 0.951}, {"trace": 1.124, "density": 3.292, "ecdf": 0.765, "esf": 0.235}, {"trace": 1.073, "density": 4.279, "ecdf": 0.563, "esf": 0.437}, {"trace": 1.398, "density": 0.028, "ecdf": 0.999, "esf": 0.001}, {"trace": 1.217, "density": 0.956, "ecdf": 0.952, "esf": 0.048}, {"trace": 1.115, "density": 3.549, "ecdf": 0.733, "esf": 0.267}, {"trace": 1.163, "density": 2.175, "ecdf": 0.872, "esf": 0.128}, {"trace": 0.986, "density": 3.417, "ecdf": 0.19, "esf": 0.81}, {"trace": 1.014, "density": 4.291, "ecdf": 0.307, "esf": 0.693}, {"trace": 1.093, "density": 4.004, "ecdf": 0.646, "esf": 0.354}, {"trace": 1.086, "density": 4.103, "ecdf": 0.621, "esf": 0.379}, {"trace": 1.08, "density": 4.187, "ecdf": 0.597, "esf": 0.403}, {"trace": 1.008, "density": 4.183, "ecdf": 0.278, "esf": 0.722}, {"trace": 1.069, "density": 4.318, "ecdf": 0.55, "esf": 0.45}, {"trace": 1.034, "density": 4.426, "ecdf": 0.39, "esf": 0.61}, {"trace": 1.02, "density": 4.346, "ecdf": 0.33, "esf": 0.67}, {"trace": 1.091, "density": 4.031, "ecdf": 0.637, "esf": 0.363}, {"trace": 1.033, "density": 4.422, "ecdf": 0.384, "esf": 0.616}, {"trace": 1.08, "density": 4.187, "ecdf": 0.597, "esf": 0.403}, {"trace": 1.117, "density": 3.492, "ecdf": 0.74, "esf": 0.26}, {"trace": 1.005, "density": 4.125, "ecdf": 0.266, "esf": 0.734}, {"trace": 1.086, "density": 4.11, "ecdf": 0.619, "esf": 0.381}, {"trace": 1.12, "density": 3.421, "ecdf": 0.75, "esf": 0.25}, {"trace": 1.079, "density": 4.205, "ecdf": 0.59, "esf": 0.41}, {"trace": 1.033, "density": 4.422, "ecdf": 0.385, "esf": 0.615}, {"trace": 1.137, "density": 2.898, "ecdf": 0.806, "esf": 0.194}, {"trace": 1.161, "density": 2.225, "ecdf": 0.868, "esf": 0.132}, {"trace": 1.05, "density": 4.441, "ecdf": 0.462, "esf": 0.538}, {"trace": 1.011, "density": 4.247, "ecdf": 0.293, "esf": 0.707}, {"trace": 1.003, "density": 4.066, "ecdf": 0.255, "esf": 0.745}, {"trace": 1.1, "density": 3.874, "ecdf": 0.677, "esf": 0.323}, {"trace": 1.105, "density": 3.787, "ecdf": 0.697, "esf": 0.303}, {"trace": 1.076, "density": 4.239, "ecdf": 0.577, "esf": 0.423}, {"trace": 1.018, "density": 4.325, "ecdf": 0.32, "esf": 0.68}, {"trace": 1.013, "density": 4.272, "ecdf": 0.3, "esf": 0.7}, {"trace": 0.95, "density": 2.178, "ecdf": 0.09, "esf": 0.91}, {"trace": 1.086, "density": 4.106, "ecdf": 0.62, "esf": 0.38}, {"trace": 0.991, "density": 3.632, "ecdf": 0.208, "esf": 0.792}, {"trace": 1.017, "density": 4.314, "ecdf": 0.316, "esf": 0.684}, {"trace": 1.151, "density": 2.519, "ecdf": 0.841, "esf": 0.159}, {"trace": 0.963, "density": 2.583, "ecdf": 0.122, "esf": 0.878}, {"trace": 0.973, "density": 2.929, "ecdf": 0.151, "esf": 0.849}, {"trace": 0.963, "density": 2.582, "ecdf": 0.121, "esf": 0.879}, {"trace": 1.057, "density": 4.413, "ecdf": 0.495, "esf": 0.505}, {"trace": 0.907, "density": 0.876, "ecdf": 0.029, "esf": 0.971}, {"trace": 1.17, "density": 1.974, "ecdf": 0.885, "esf": 0.115}, {"trace": 1.156, "density": 2.37, "ecdf": 0.856, "esf": 0.144}, {"trace": 1.155, "density": 2.417, "ecdf": 0.851, "esf": 0.149}, {"trace": 1.032, "density": 4.419, "ecdf": 0.381, "esf": 0.619}, {"trace": 1.197, "density": 1.333, "ecdf": 0.928, "esf": 0.072}, {"trace": 0.956, "density": 2.364, "ecdf": 0.104, "esf": 0.896}, {"trace": 1.028, "density": 4.397, "ecdf": 0.364, "esf": 0.636}, {"trace": 1.001, "density": 4.002, "ecdf": 0.248, "esf": 0.752}, {"trace": 0.965, "density": 2.66, "ecdf": 0.128, "esf": 0.872}, {"trace": 0.957, "density": 2.39, "ecdf": 0.106, "esf": 0.894}, {"trace": 1.038, "density": 4.438, "ecdf": 0.41, "esf": 0.59}, {"trace": 0.867, "density": 0.308, "ecdf": 0.007, "esf": 0.994}, {"trace": 1.24, "density": 0.639, "ecdf": 0.968, "esf": 0.032}, {"trace": 1.102, "density": 3.844, "ecdf": 0.683, "esf": 0.317}, {"trace": 1.066, "density": 4.352, "ecdf": 0.535, "esf": 0.465}, {"trace": 1.007, "density": 4.162, "ecdf": 0.274, "esf": 0.726}, {"trace": 1.171, "density": 1.949, "ecdf": 0.887, "esf": 0.113}, {"trace": 1.195, "density": 1.379, "ecdf": 0.925, "esf": 0.075}, {"trace": 1.136, "density": 2.951, "ecdf": 0.8, "esf": 0.2}, {"trace": 1.052, "density": 4.433, "ecdf": 0.477, "esf": 0.523}, {"trace": 0.993, "density": 3.692, "ecdf": 0.212, "esf": 0.788}, {"trace": 1.051, "density": 4.439, "ecdf": 0.467, "esf": 0.533}, {"trace": 1.112, "density": 3.62, "ecdf": 0.723, "esf": 0.277}, {"trace": 1.045, "density": 4.447, "ecdf": 0.442, "esf": 0.558}, {"trace": 1.019, "density": 4.341, "ecdf": 0.326, "esf": 0.674}, {"trace": 0.98, "density": 3.17, "ecdf": 0.171, "esf": 0.829}, {"trace": 1.047, "density": 4.446, "ecdf": 0.448, "esf": 0.552}, {"trace": 1.144, "density": 2.722, "ecdf": 0.822, "esf": 0.178}, {"trace": 1.013, "density": 4.273, "ecdf": 0.3, "esf": 0.7}, {"trace": 1.06, "density": 4.397, "ecdf": 0.506, "esf": 0.494}, {"trace": 1.095, "density": 3.964, "ecdf": 0.656, "esf": 0.344}, {"trace": 1.107, "density": 3.741, "ecdf": 0.703, "esf": 0.297}, {"trace": 1.128, "density": 3.165, "ecdf": 0.78, "esf": 0.22}, {"trace": 1.059, "density": 4.401, "ecdf": 0.502, "esf": 0.498}, {"trace": 1.109, "density": 3.695, "ecdf": 0.712, "esf": 0.288}, {"trace": 0.966, "density": 2.697, "ecdf": 0.132, "esf": 0.868}, {"trace": 1.041, "density": 4.445, "ecdf": 0.422, "esf": 0.578}, {"trace": 1.006, "density": 4.15, "ecdf": 0.272, "esf": 0.728}, {"trace": 0.929, "density": 1.556, "ecdf": 0.051, "esf": 0.949}, {"trace": 1.137, "density": 2.906, "ecdf": 0.805, "esf": 0.195}, {"trace": 1.008, "density": 4.191, "ecdf": 0.28, "esf": 0.72}, {"trace": 1.044, "density": 4.448, "ecdf": 0.437, "esf": 0.563}, {"trace": 1.078, "density": 4.22, "ecdf": 0.584, "esf": 0.416}, {"trace": 1.025, "density": 4.381, "ecdf": 0.352, "esf": 0.648}, {"trace": 1.081, "density": 4.181, "ecdf": 0.598, "esf": 0.402}, {"trace": 1.268, "density": 0.399, "ecdf": 0.982, "esf": 0.018}, {"trace": 1.052, "density": 4.436, "ecdf": 0.471, "esf": 0.529}, {"trace": 1.013, "density": 4.265, "ecdf": 0.296, "esf": 0.704}, {"trace": 1.116, "density": 3.524, "ecdf": 0.736, "esf": 0.264}, {"trace": 0.977, "density": 3.076, "ecdf": 0.165, "esf": 0.835}, {"trace": 1.014, "density": 4.281, "ecdf": 0.304, "esf": 0.696}, {"trace": 1.157, "density": 2.361, "ecdf": 0.858, "esf": 0.142}, {"trace": 1.049, "density": 4.443, "ecdf": 0.458, "esf": 0.542}, {"trace": 1.164, "density": 2.143, "ecdf": 0.874, "esf": 0.126}, {"trace": 1.031, "density": 4.411, "ecdf": 0.374, "esf": 0.626}, {"trace": 1.094, "density": 3.981, "ecdf": 0.652, "esf": 0.348}, {"trace": 1.084, "density": 4.132, "ecdf": 0.614, "esf": 0.386}, {"trace": 1.008, "density": 4.176, "ecdf": 0.277, "esf": 0.722}, {"trace": 1.044, "density": 4.448, "ecdf": 0.437, "esf": 0.563}, {"trace": 1.058, "density": 4.407, "ecdf": 0.498, "esf": 0.502}, {"trace": 1.015, "density": 4.294, "ecdf": 0.308, "esf": 0.692}, {"trace": 0.953, "density": 2.282, "ecdf": 0.099, "esf": 0.901}, {"trace": 0.991, "density": 3.622, "ecdf": 0.206, "esf": 0.794}, {"trace": 1.083, "density": 4.144, "ecdf": 0.611, "esf": 0.389}, {"trace": 1.113, "density": 3.609, "ecdf": 0.725, "esf": 0.275}, {"trace": 0.964, "density": 2.633, "ecdf": 0.126, "esf": 0.874}, {"trace": 1.062, "density": 4.382, "ecdf": 0.516, "esf": 0.484}, {"trace": 1.022, "density": 4.363, "ecdf": 0.34, "esf": 0.66}, {"trace": 1.037, "density": 4.437, "ecdf": 0.406, "esf": 0.594}, {"trace": 0.955, "density": 2.334, "ecdf": 0.102, "esf": 0.898}, {"trace": 1.056, "density": 4.416, "ecdf": 0.49, "esf": 0.51}, {"trace": 1.003, "density": 4.063, "ecdf": 0.255, "esf": 0.745}, {"trace": 1.029, "density": 4.403, "ecdf": 0.368, "esf": 0.632}, {"trace": 0.993, "density": 3.718, "ecdf": 0.214, "esf": 0.786}, {"trace": 1.269, "density": 0.39, "ecdf": 0.983, "esf": 0.017}, {"trace": 0.978, "density": 3.096, "ecdf": 0.167, "esf": 0.833}, {"trace": 0.948, "density": 2.134, "ecdf": 0.087, "esf": 0.913}, {"trace": 0.953, "density": 2.272, "ecdf": 0.097, "esf": 0.903}, {"trace": 0.986, "density": 3.431, "ecdf": 0.191, "esf": 0.809}, {"trace": 1.118, "density": 3.456, "ecdf": 0.745, "esf": 0.255}, {"trace": 0.951, "density": 2.214, "ecdf": 0.094, "esf": 0.906}, {"trace": 1.142, "density": 2.758, "ecdf": 0.818, "esf": 0.182}, {"trace": 1.25, "density": 0.54, "ecdf": 0.974, "esf": 0.026}, {"trace": 0.96, "density": 2.507, "ecdf": 0.114, "esf": 0.886}, {"trace": 0.996, "density": 3.803, "ecdf": 0.222, "esf": 0.778}, {"trace": 1.207, "density": 1.159, "ecdf": 0.941, "esf": 0.059}, {"trace": 0.907, "density": 0.864, "ecdf": 0.028, "esf": 0.972}, {"trace": 1.011, "density": 4.239, "ecdf": 0.291, "esf": 0.709}, {"trace": 0.981, "density": 3.22, "ecdf": 0.175, "esf": 0.825}, {"trace": 1.022, "density": 4.361, "ecdf": 0.339, "esf": 0.661}, {"trace": 0.996, "density": 3.804, "ecdf": 0.222, "esf": 0.778}, {"trace": 0.967, "density": 2.723, "ecdf": 0.134, "esf": 0.866}, {"trace": 0.992, "density": 3.68, "ecdf": 0.211, "esf": 0.789}, {"trace": 1.282, "density": 0.298, "ecdf": 0.987, "esf": 0.013}, {"trace": 1.22, "density": 0.913, "ecdf": 0.954, "esf": 0.046}, {"trace": 1.196, "density": 1.368, "ecdf": 0.925, "esf": 0.075}, {"trace": 1.057, "density": 4.414, "ecdf": 0.492, "esf": 0.508}, {"trace": 1.057, "density": 4.412, "ecdf": 0.496, "esf": 0.504}, {"trace": 1.098, "density": 3.912, "ecdf": 0.668, "esf": 0.332}, {"trace": 1.018, "density": 4.324, "ecdf": 0.32, "esf": 0.68}, {"trace": 1.043, "density": 4.447, "ecdf": 0.433, "esf": 0.567}, {"trace": 1.038, "density": 4.439, "ecdf": 0.41, "esf": 0.59}, {"trace": 1.029, "density": 4.402, "ecdf": 0.367, "esf": 0.633}, {"trace": 1.107, "density": 3.74, "ecdf": 0.703, "esf": 0.297}, {"trace": 1.036, "density": 4.432, "ecdf": 0.399, "esf": 0.601}, {"trace": 1.007, "density": 4.164, "ecdf": 0.275, "esf": 0.725}, {"trace": 1.13, "density": 3.105, "ecdf": 0.786, "esf": 0.214}, {"trace": 1.076, "density": 4.247, "ecdf": 0.575, "esf": 0.425}, {"trace": 1.061, "density": 4.388, "ecdf": 0.512, "esf": 0.488}, {"trace": 1.054, "density": 4.428, "ecdf": 0.481, "esf": 0.519}, {"trace": 1.018, "density": 4.33, "ecdf": 0.323, "esf": 0.677}, {"trace": 1.019, "density": 4.338, "ecdf": 0.326, "esf": 0.674}, {"trace": 1.055, "density": 4.425, "ecdf": 0.483, "esf": 0.517}, {"trace": 1.036, "density": 4.432, "ecdf": 0.398, "esf": 0.602}, {"trace": 0.9, "density": 0.719, "ecdf": 0.022, "esf": 0.978}, {"trace": 1.155, "density": 2.413, "ecdf": 0.852, "esf": 0.148}, {"trace": 0.954, "density": 2.321, "ecdf": 0.1, "esf": 0.9}, {"trace": 1.12, "density": 3.409, "ecdf": 0.751, "esf": 0.249}, {"trace": 1.029, "density": 4.401, "ecdf": 0.367, "esf": 0.633}, {"trace": 1.14, "density": 2.812, "ecdf": 0.814, "esf": 0.186}, {"trace": 1.046, "density": 4.447, "ecdf": 0.445, "esf": 0.555}, {"trace": 1.062, "density": 4.379, "ecdf": 0.519, "esf": 0.481}, {"trace": 1.045, "density": 4.447, "ecdf": 0.442, "esf": 0.558}, {"trace": 1.048, "density": 4.445, "ecdf": 0.453, "esf": 0.547}, {"trace": 1.097, "density": 3.929, "ecdf": 0.665, "esf": 0.335}, {"trace": 1.11, "density": 3.677, "ecdf": 0.715, "esf": 0.285}, {"trace": 0.916, "density": 1.126, "ecdf": 0.035, "esf": 0.965}, {"trace": 1.142, "density": 2.772, "ecdf": 0.816, "esf": 0.184}, {"trace": 1.034, "density": 4.426, "ecdf": 0.389, "esf": 0.611}, {"trace": 1.079, "density": 4.201, "ecdf": 0.593, "esf": 0.407}, {"trace": 1.153, "density": 2.466, "ecdf": 0.846, "esf": 0.154}, {"trace": 1.013, "density": 4.275, "ecdf": 0.301, "esf": 0.699}, {"trace": 1.066, "density": 4.353, "ecdf": 0.534, "esf": 0.466}, {"trace": 0.927, "density": 1.468, "ecdf": 0.047, "esf": 0.953}, {"trace": 1.196, "density": 1.352, "ecdf": 0.926, "esf": 0.074}, {"trace": 1.036, "density": 4.432, "ecdf": 0.398, "esf": 0.601}, {"trace": 0.948, "density": 2.123, "ecdf": 0.087, "esf": 0.913}, {"trace": 0.897, "density": 0.668, "ecdf": 0.02, "esf": 0.98}, {"trace": 1.008, "density": 4.19, "ecdf": 0.28, "esf": 0.72}, {"trace": 1.112, "density": 3.629, "ecdf": 0.722, "esf": 0.278}, {"trace": 1.035, "density": 4.429, "ecdf": 0.394, "esf": 0.606}, {"trace": 1.048, "density": 4.444, "ecdf": 0.456, "esf": 0.544}, {"trace": 1.158, "density": 2.326, "ecdf": 0.86, "esf": 0.14}, {"trace": 0.993, "density": 3.691, "ecdf": 0.212, "esf": 0.788}, {"trace": 1.046, "density": 4.447, "ecdf": 0.444, "esf": 0.556}, {"trace": 0.986, "density": 3.399, "ecdf": 0.189, "esf": 0.811}, {"trace": 1.164, "density": 2.136, "ecdf": 0.874, "esf": 0.126}, {"trace": 0.999, "density": 3.925, "ecdf": 0.238, "esf": 0.762}, {"trace": 1.077, "density": 4.234, "ecdf": 0.579, "esf": 0.421}, {"trace": 1.061, "density": 4.39, "ecdf": 0.51, "esf": 0.49}, {"trace": 0.985, "density": 3.362, "ecdf": 0.186, "esf": 0.814}, {"trace": 1.167, "density": 2.054, "ecdf": 0.879, "esf": 0.121}, {"trace": 0.951, "density": 2.209, "ecdf": 0.093, "esf": 0.907}, {"trace": 1.124, "density": 3.287, "ecdf": 0.766, "esf": 0.234}, {"trace": 1.034, "density": 4.426, "ecdf": 0.388, "esf": 0.612}, {"trace": 1.153, "density": 2.478, "ecdf": 0.845, "esf": 0.155}, {"trace": 1.044, "density": 4.448, "ecdf": 0.436, "esf": 0.564}, {"trace": 1.042, "density": 4.446, "ecdf": 0.428, "esf": 0.572}, {"trace": 1.132, "density": 3.046, "ecdf": 0.79, "esf": 0.21}, {"trace": 1.206, "density": 1.167, "ecdf": 0.941, "esf": 0.059}, {"trace": 1.04, "density": 4.444, "ecdf": 0.421, "esf": 0.579}, {"trace": 1.121, "density": 3.378, "ecdf": 0.755, "esf": 0.245}, {"trace": 1.21, "density": 1.1, "ecdf": 0.945, "esf": 0.055}, {"trace": 1.001, "density": 3.996, "ecdf": 0.247, "esf": 0.753}, {"trace": 1.146, "density": 2.654, "ecdf": 0.829, "esf": 0.171}, {"trace": 1.105, "density": 3.787, "ecdf": 0.697, "esf": 0.303}, {"trace": 0.952, "density": 2.249, "ecdf": 0.096, "esf": 0.904}, {"trace": 1.081, "density": 4.18, "ecdf": 0.599, "esf": 0.401}, {"trace": 1.092, "density": 4.006, "ecdf": 0.645, "esf": 0.355}, {"trace": 1.064, "density": 4.367, "ecdf": 0.526, "esf": 0.474}, {"trace": 1.32, "density": 0.131, "ecdf": 0.995, "esf": 0.005}, {"trace": 1.156, "density": 2.383, "ecdf": 0.855, "esf": 0.145}, {"trace": 1.071, "density": 4.295, "ecdf": 0.557, "esf": 0.443}, {"trace": 1.046, "density": 4.447, "ecdf": 0.444, "esf": 0.556}, {"trace": 1.079, "density": 4.204, "ecdf": 0.591, "esf": 0.409}, {"trace": 1.105, "density": 3.787, "ecdf": 0.697, "esf": 0.303}, {"trace": 1.034, "density": 4.425, "ecdf": 0.387, "esf": 0.613}, {"trace": 1.093, "density": 3.998, "ecdf": 0.648, "esf": 0.352}, {"trace": 1.084, "density": 4.132, "ecdf": 0.614, "esf": 0.386}, {"trace": 1.022, "density": 4.361, "ecdf": 0.34, "esf": 0.66}, {"trace": 1.087, "density": 4.092, "ecdf": 0.624, "esf": 0.376}, {"trace": 1.042, "density": 4.447, "ecdf": 0.428, "esf": 0.572}, {"trace": 0.938, "density": 1.812, "ecdf": 0.069, "esf": 0.931}, {"trace": 1.078, "density": 4.215, "ecdf": 0.586, "esf": 0.414}, {"trace": 1.047, "density": 4.446, "ecdf": 0.45, "esf": 0.55}, {"trace": 1.091, "density": 4.029, "ecdf": 0.638, "esf": 0.362}, {"trace": 0.991, "density": 3.635, "ecdf": 0.208, "esf": 0.792}, {"trace": 0.992, "density": 3.653, "ecdf": 0.209, "esf": 0.791}, {"trace": 1.102, "density": 3.839, "ecdf": 0.685, "esf": 0.315}, {"trace": 1.057, "density": 4.415, "ecdf": 0.492, "esf": 0.508}, {"trace": 0.952, "density": 2.241, "ecdf": 0.095, "esf": 0.905}, {"trace": 0.955, "density": 2.35, "ecdf": 0.103, "esf": 0.897}, {"trace": 1.009, "density": 4.2, "ecdf": 0.281, "esf": 0.719}, {"trace": 1.0, "density": 3.969, "ecdf": 0.243, "esf": 0.757}, {"trace": 1.122, "density": 3.363, "ecdf": 0.758, "esf": 0.242}, {"trace": 1.1, "density": 3.88, "ecdf": 0.675, "esf": 0.325}, {"trace": 1.13, "density": 3.118, "ecdf": 0.785, "esf": 0.215}, {"trace": 0.945, "density": 2.044, "ecdf": 0.082, "esf": 0.918}, {"trace": 0.984, "density": 3.347, "ecdf": 0.184, "esf": 0.816}, {"trace": 0.996, "density": 3.809, "ecdf": 0.223, "esf": 0.777}, {"trace": 1.027, "density": 4.393, "ecdf": 0.362, "esf": 0.638}, {"trace": 1.065, "density": 4.356, "ecdf": 0.533, "esf": 0.467}, {"trace": 1.168, "density": 2.03, "ecdf": 0.881, "esf": 0.119}, {"trace": 1.176, "density": 1.799, "ecdf": 0.897, "esf": 0.103}, {"trace": 1.088, "density": 4.068, "ecdf": 0.63, "esf": 0.37}, {"trace": 1.217, "density": 0.957, "ecdf": 0.951, "esf": 0.049}, {"trace": 1.239, "density": 0.647, "ecdf": 0.968, "esf": 0.032}, {"trace": 1.294, "density": 0.231, "ecdf": 0.989, "esf": 0.011}, {"trace": 1.275, "density": 0.35, "ecdf": 0.985, "esf": 0.015}, {"trace": 0.961, "density": 2.538, "ecdf": 0.117, "esf": 0.883}, {"trace": 1.124, "density": 3.292, "ecdf": 0.765, "esf": 0.235}, {"trace": 0.992, "density": 3.654, "ecdf": 0.21, "esf": 0.79}, {"trace": 0.956, "density": 2.388, "ecdf": 0.106, "esf": 0.894}, {"trace": 1.059, "density": 4.405, "ecdf": 0.5, "esf": 0.5}, {"trace": 0.884, "density": 0.491, "ecdf": 0.014, "esf": 0.986}, {"trace": 1.103, "density": 3.827, "ecdf": 0.689, "esf": 0.311}, {"trace": 1.11, "density": 3.669, "ecdf": 0.716, "esf": 0.284}, {"trace": 1.08, "density": 4.192, "ecdf": 0.596, "esf": 0.404}, {"trace": 1.04, "density": 4.443, "ecdf": 0.419, "esf": 0.581}, {"trace": 1.158, "density": 2.312, "ecdf": 0.861, "esf": 0.139}, {"trace": 1.177, "density": 1.769, "ecdf": 0.9, "esf": 0.1}, {"trace": 1.124, "density": 3.306, "ecdf": 0.763, "esf": 0.237}, {"trace": 1.103, "density": 3.818, "ecdf": 0.69, "esf": 0.31}, {"trace": 1.0, "density": 3.955, "ecdf": 0.242, "esf": 0.758}, {"trace": 0.968, "density": 2.743, "ecdf": 0.136, "esf": 0.864}, {"trace": 1.002, "density": 4.014, "ecdf": 0.25, "esf": 0.75}, {"trace": 1.056, "density": 4.417, "ecdf": 0.49, "esf": 0.51}, {"trace": 0.985, "density": 3.366, "ecdf": 0.186, "esf": 0.814}, {"trace": 1.235, "density": 0.691, "ecdf": 0.964, "esf": 0.035}, {"trace": 1.155, "density": 2.415, "ecdf": 0.852, "esf": 0.148}, {"trace": 1.142, "density": 2.768, "ecdf": 0.817, "esf": 0.183}, {"trace": 1.022, "density": 4.36, "ecdf": 0.338, "esf": 0.662}, {"trace": 1.084, "density": 4.127, "ecdf": 0.616, "esf": 0.384}, {"trace": 1.056, "density": 4.419, "ecdf": 0.488, "esf": 0.512}, {"trace": 1.094, "density": 3.982, "ecdf": 0.651, "esf": 0.349}, {"trace": 1.082, "density": 4.156, "ecdf": 0.608, "esf": 0.392}, {"trace": 1.118, "density": 3.458, "ecdf": 0.744, "esf": 0.256}, {"trace": 1.07, "density": 4.309, "ecdf": 0.553, "esf": 0.447}, {"trace": 1.095, "density": 3.968, "ecdf": 0.655, "esf": 0.345}, {"trace": 1.047, "density": 4.446, "ecdf": 0.448, "esf": 0.552}, {"trace": 1.002, "density": 4.035, "ecdf": 0.252, "esf": 0.748}, {"trace": 0.973, "density": 2.934, "ecdf": 0.152, "esf": 0.848}, {"trace": 1.04, "density": 4.443, "ecdf": 0.42, "esf": 0.58}, {"trace": 1.035, "density": 4.43, "ecdf": 0.395, "esf": 0.605}, {"trace": 1.179, "density": 1.717, "ecdf": 0.902, "esf": 0.098}, {"trace": 1.142, "density": 2.754, "ecdf": 0.819, "esf": 0.181}, {"trace": 1.159, "density": 2.301, "ecdf": 0.862, "esf": 0.138}, {"trace": 1.067, "density": 4.337, "ecdf": 0.542, "esf": 0.458}, {"trace": 0.966, "density": 2.701, "ecdf": 0.132, "esf": 0.868}, {"trace": 1.137, "density": 2.897, "ecdf": 0.806, "esf": 0.194}, {"trace": 1.09, "density": 4.046, "ecdf": 0.633, "esf": 0.367}, {"trace": 0.971, "density": 2.866, "ecdf": 0.147, "esf": 0.853}, {"trace": 1.086, "density": 4.099, "ecdf": 0.622, "esf": 0.378}, {"trace": 1.094, "density": 3.984, "ecdf": 0.651, "esf": 0.349}, {"trace": 1.041, "density": 4.446, "ecdf": 0.425, "esf": 0.575}, {"trace": 1.005, "density": 4.126, "ecdf": 0.266, "esf": 0.734}, {"trace": 1.113, "density": 3.613, "ecdf": 0.724, "esf": 0.276}, {"trace": 0.939, "density": 1.869, "ecdf": 0.073, "esf": 0.927}, {"trace": 1.009, "density": 4.209, "ecdf": 0.283, "esf": 0.717}, {"trace": 1.299, "density": 0.208, "ecdf": 0.991, "esf": 0.009}, {"trace": 1.074, "density": 4.27, "ecdf": 0.567, "esf": 0.433}, {"trace": 0.973, "density": 2.933, "ecdf": 0.152, "esf": 0.848}, {"trace": 1.042, "density": 4.446, "ecdf": 0.428, "esf": 0.572}, {"trace": 1.055, "density": 4.422, "ecdf": 0.486, "esf": 0.514}, {"trace": 1.096, "density": 3.948, "ecdf": 0.66, "esf": 0.34}, {"trace": 0.987, "density": 3.449, "ecdf": 0.193, "esf": 0.807}, {"trace": 0.974, "density": 2.957, "ecdf": 0.155, "esf": 0.845}, {"trace": 1.008, "density": 4.186, "ecdf": 0.279, "esf": 0.721}, {"trace": 1.143, "density": 2.737, "ecdf": 0.821, "esf": 0.179}, {"trace": 1.199, "density": 1.298, "ecdf": 0.931, "esf": 0.069}, {"trace": 1.023, "density": 4.369, "ecdf": 0.345, "esf": 0.655}, {"trace": 1.117, "density": 3.498, "ecdf": 0.739, "esf": 0.261}, {"trace": 1.189, "density": 1.504, "ecdf": 0.916, "esf": 0.084}, {"trace": 1.089, "density": 4.064, "ecdf": 0.631, "esf": 0.369}, {"trace": 1.037, "density": 4.438, "ecdf": 0.408, "esf": 0.592}, {"trace": 1.067, "density": 4.338, "ecdf": 0.541, "esf": 0.459}, {"trace": 1.025, "density": 4.383, "ecdf": 0.353, "esf": 0.647}, {"trace": 1.109, "density": 3.706, "ecdf": 0.71, "esf": 0.29}, {"trace": 1.121, "density": 3.392, "ecdf": 0.753, "esf": 0.247}, {"trace": 1.091, "density": 4.023, "ecdf": 0.64, "esf": 0.36}, {"trace": 1.047, "density": 4.446, "ecdf": 0.452, "esf": 0.548}, {"trace": 0.962, "density": 2.55, "ecdf": 0.118, "esf": 0.882}, {"trace": 1.038, "density": 4.44, "ecdf": 0.412, "esf": 0.588}, {"trace": 1.127, "density": 3.199, "ecdf": 0.776, "esf": 0.224}, {"trace": 0.87, "density": 0.339, "ecdf": 0.009, "esf": 0.991}, {"trace": 0.936, "density": 1.772, "ecdf": 0.066, "esf": 0.934}, {"trace": 1.127, "density": 3.219, "ecdf": 0.774, "esf": 0.226}, {"trace": 1.12, "density": 3.41, "ecdf": 0.751, "esf": 0.249}, {"trace": 0.95, "density": 2.182, "ecdf": 0.09, "esf": 0.91}, {"trace": 1.099, "density": 3.905, "ecdf": 0.67, "esf": 0.33}, {"trace": 1.076, "density": 4.241, "ecdf": 0.576, "esf": 0.424}, {"trace": 0.835, "density": 0.09, "ecdf": 0.002, "esf": 0.998}, {"trace": 0.893, "density": 0.602, "ecdf": 0.018, "esf": 0.982}, {"trace": 1.226, "density": 0.807, "ecdf": 0.959, "esf": 0.041}, {"trace": 1.083, "density": 4.143, "ecdf": 0.611, "esf": 0.389}, {"trace": 1.104, "density": 3.807, "ecdf": 0.693, "esf": 0.307}, {"trace": 1.129, "density": 3.152, "ecdf": 0.782, "esf": 0.218}, {"trace": 1.061, "density": 4.39, "ecdf": 0.511, "esf": 0.489}, {"trace": 1.031, "density": 4.413, "ecdf": 0.376, "esf": 0.624}, {"trace": 1.094, "density": 3.985, "ecdf": 0.651, "esf": 0.349}, {"trace": 1.011, "density": 4.239, "ecdf": 0.29, "esf": 0.71}, {"trace": 0.98, "density": 3.166, "ecdf": 0.171, "esf": 0.829}, {"trace": 1.134, "density": 3.009, "ecdf": 0.794, "esf": 0.206}, {"trace": 1.181, "density": 1.664, "ecdf": 0.907, "esf": 0.093}, {"trace": 1.062, "density": 4.38, "ecdf": 0.518, "esf": 0.482}, {"trace": 1.133, "density": 3.027, "ecdf": 0.793, "esf": 0.207}, {"trace": 0.98, "density": 3.189, "ecdf": 0.173, "esf": 0.827}, {"trace": 1.17, "density": 1.979, "ecdf": 0.885, "esf": 0.115}, {"trace": 0.977, "density": 3.075, "ecdf": 0.165, "esf": 0.835}, {"trace": 1.007, "density": 4.171, "ecdf": 0.276, "esf": 0.724}, {"trace": 1.004, "density": 4.079, "ecdf": 0.257, "esf": 0.743}, {"trace": 1.102, "density": 3.839, "ecdf": 0.686, "esf": 0.314}, {"trace": 1.055, "density": 4.421, "ecdf": 0.487, "esf": 0.513}, {"trace": 0.922, "density": 1.303, "ecdf": 0.041, "esf": 0.959}, {"trace": 1.017, "density": 4.322, "ecdf": 0.32, "esf": 0.68}, {"trace": 0.992, "density": 3.649, "ecdf": 0.208, "esf": 0.792}, {"trace": 1.117, "density": 3.486, "ecdf": 0.741, "esf": 0.259}, {"trace": 1.117, "density": 3.502, "ecdf": 0.738, "esf": 0.261}, {"trace": 0.994, "density": 3.737, "ecdf": 0.215, "esf": 0.785}, {"trace": 1.067, "density": 4.343, "ecdf": 0.539, "esf": 0.461}, {"trace": 1.173, "density": 1.877, "ecdf": 0.892, "esf": 0.108}, {"trace": 0.916, "density": 1.111, "ecdf": 0.035, "esf": 0.965}, {"trace": 1.066, "density": 4.351, "ecdf": 0.536, "esf": 0.464}, {"trace": 0.996, "density": 3.833, "ecdf": 0.226, "esf": 0.774}, {"trace": 1.137, "density": 2.906, "ecdf": 0.805, "esf": 0.195}, {"trace": 1.055, "density": 4.421, "ecdf": 0.487, "esf": 0.513}, {"trace": 1.086, "density": 4.109, "ecdf": 0.619, "esf": 0.381}, {"trace": 1.05, "density": 4.442, "ecdf": 0.461, "esf": 0.539}, {"trace": 1.214, "density": 1.019, "ecdf": 0.948, "esf": 0.051}, {"trace": 0.966, "density": 2.686, "ecdf": 0.131, "esf": 0.869}, {"trace": 1.235, "density": 0.687, "ecdf": 0.965, "esf": 0.035}, {"trace": 1.064, "density": 4.364, "ecdf": 0.528, "esf": 0.472}, {"trace": 1.064, "density": 4.37, "ecdf": 0.524, "esf": 0.476}, {"trace": 0.961, "density": 2.535, "ecdf": 0.117, "esf": 0.883}, {"trace": 1.116, "density": 3.537, "ecdf": 0.735, "esf": 0.265}, {"trace": 1.005, "density": 4.117, "ecdf": 0.264, "esf": 0.736}, {"trace": 1.165, "density": 2.115, "ecdf": 0.876, "esf": 0.124}, {"trace": 1.127, "density": 3.211, "ecdf": 0.775, "esf": 0.225}, {"trace": 1.205, "density": 1.184, "ecdf": 0.939, "esf": 0.061}, {"trace": 0.998, "density": 3.908, "ecdf": 0.236, "esf": 0.764}, {"trace": 1.102, "density": 3.843, "ecdf": 0.684, "esf": 0.316}, {"trace": 0.951, "density": 2.215, "ecdf": 0.094, "esf": 0.906}, {"trace": 0.997, "density": 3.869, "ecdf": 0.231, "esf": 0.769}, {"trace": 1.023, "density": 4.371, "ecdf": 0.346, "esf": 0.654}, {"trace": 1.152, "density": 2.48, "ecdf": 0.845, "esf": 0.155}, {"trace": 1.083, "density": 4.145, "ecdf": 0.61, "esf": 0.389}, {"trace": 1.013, "density": 4.278, "ecdf": 0.302, "esf": 0.698}, {"trace": 1.049, "density": 4.443, "ecdf": 0.459, "esf": 0.541}, {"trace": 0.987, "density": 3.47, "ecdf": 0.194, "esf": 0.806}, {"trace": 1.102, "density": 3.845, "ecdf": 0.683, "esf": 0.317}, {"trace": 1.097, "density": 3.932, "ecdf": 0.665, "esf": 0.335}, {"trace": 0.995, "density": 3.798, "ecdf": 0.221, "esf": 0.779}, {"trace": 1.113, "density": 3.591, "ecdf": 0.727, "esf": 0.273}, {"trace": 1.064, "density": 4.369, "ecdf": 0.524, "esf": 0.476}, {"trace": 1.09, "density": 4.045, "ecdf": 0.634, "esf": 0.366}, {"trace": 1.044, "density": 4.448, "ecdf": 0.436, "esf": 0.564}, {"trace": 1.026, "density": 4.387, "ecdf": 0.357, "esf": 0.643}, {"trace": 1.04, "density": 4.444, "ecdf": 0.42, "esf": 0.58}, {"trace": 1.082, "density": 4.162, "ecdf": 0.605, "esf": 0.395}, {"trace": 1.128, "density": 3.177, "ecdf": 0.779, "esf": 0.221}, {"trace": 1.161, "density": 2.249, "ecdf": 0.866, "esf": 0.134}, {"trace": 0.927, "density": 1.465, "ecdf": 0.047, "esf": 0.953}, {"trace": 1.191, "density": 1.459, "ecdf": 0.918, "esf": 0.082}, {"trace": 1.066, "density": 4.347, "ecdf": 0.538, "esf": 0.462}, {"trace": 1.067, "density": 4.338, "ecdf": 0.541, "esf": 0.459}, {"trace": 1.096, "density": 3.945, "ecdf": 0.661, "esf": 0.339}, {"trace": 0.94, "density": 1.894, "ecdf": 0.075, "esf": 0.925}, {"trace": 0.992, "density": 3.645, "ecdf": 0.208, "esf": 0.792}, {"trace": 1.108, "density": 3.725, "ecdf": 0.706, "esf": 0.294}, {"trace": 1.05, "density": 4.441, "ecdf": 0.463, "esf": 0.537}, {"trace": 1.076, "density": 4.238, "ecdf": 0.578, "esf": 0.422}, {"trace": 1.041, "density": 4.445, "ecdf": 0.423, "esf": 0.577}, {"trace": 1.003, "density": 4.051, "ecdf": 0.254, "esf": 0.746}, {"trace": 0.935, "density": 1.725, "ecdf": 0.063, "esf": 0.937}, {"trace": 1.154, "density": 2.449, "ecdf": 0.848, "esf": 0.152}, {"trace": 1.171, "density": 1.942, "ecdf": 0.888, "esf": 0.112}, {"trace": 1.14, "density": 2.835, "ecdf": 0.812, "esf": 0.188}, {"trace": 1.08, "density": 4.195, "ecdf": 0.595, "esf": 0.405}, {"trace": 1.044, "density": 4.448, "ecdf": 0.438, "esf": 0.562}, {"trace": 0.976, "density": 3.035, "ecdf": 0.161, "esf": 0.839}, {"trace": 1.092, "density": 4.016, "ecdf": 0.642, "esf": 0.358}, {"trace": 1.04, "density": 4.444, "ecdf": 0.42, "esf": 0.58}, {"trace": 1.032, "density": 4.419, "ecdf": 0.382, "esf": 0.618}, {"trace": 1.099, "density": 3.895, "ecdf": 0.672, "esf": 0.328}, {"trace": 1.025, "density": 4.383, "ecdf": 0.353, "esf": 0.647}, {"trace": 1.144, "density": 2.71, "ecdf": 0.824, "esf": 0.176}, {"trace": 1.14, "density": 2.825, "ecdf": 0.813, "esf": 0.187}, {"trace": 1.005, "density": 4.111, "ecdf": 0.263, "esf": 0.737}, {"trace": 1.154, "density": 2.439, "ecdf": 0.849, "esf": 0.151}, {"trace": 0.962, "density": 2.555, "ecdf": 0.119, "esf": 0.881}, {"trace": 1.149, "density": 2.57, "ecdf": 0.837, "esf": 0.163}, {"trace": 1.133, "density": 3.029, "ecdf": 0.792, "esf": 0.208}, {"trace": 1.141, "density": 2.807, "ecdf": 0.814, "esf": 0.186}, {"trace": 1.097, "density": 3.938, "ecdf": 0.663, "esf": 0.337}, {"trace": 0.955, "density": 2.351, "ecdf": 0.103, "esf": 0.897}, {"trace": 0.981, "density": 3.203, "ecdf": 0.174, "esf": 0.826}, {"trace": 0.998, "density": 3.892, "ecdf": 0.233, "esf": 0.766}, {"trace": 0.926, "density": 1.429, "ecdf": 0.046, "esf": 0.954}, {"trace": 1.044, "density": 4.448, "ecdf": 0.437, "esf": 0.563}, {"trace": 1.2, "density": 1.279, "ecdf": 0.932, "esf": 0.068}, {"trace": 1.27, "density": 0.385, "ecdf": 0.983, "esf": 0.017}, {"trace": 1.077, "density": 4.227, "ecdf": 0.581, "esf": 0.419}, {"trace": 1.156, "density": 2.369, "ecdf": 0.856, "esf": 0.144}, {"trace": 0.916, "density": 1.107, "ecdf": 0.034, "esf": 0.966}, {"trace": 0.846, "density": 0.144, "ecdf": 0.003, "esf": 0.997}, {"trace": 1.242, "density": 0.617, "ecdf": 0.97, "esf": 0.03}, {"trace": 0.9, "density": 0.713, "ecdf": 0.022, "esf": 0.978}, {"trace": 1.116, "density": 3.535, "ecdf": 0.735, "esf": 0.265}, {"trace": 1.012, "density": 4.251, "ecdf": 0.294, "esf": 0.706}, {"trace": 1.079, "density": 4.196, "ecdf": 0.595, "esf": 0.405}, {"trace": 1.149, "density": 2.568, "ecdf": 0.838, "esf": 0.162}, {"trace": 1.142, "density": 2.754, "ecdf": 0.819, "esf": 0.181}, {"trace": 1.078, "density": 4.216, "ecdf": 0.586, "esf": 0.414}, {"trace": 0.998, "density": 3.913, "ecdf": 0.236, "esf": 0.764}, {"trace": 1.118, "density": 3.46, "ecdf": 0.744, "esf": 0.256}, {"trace": 1.058, "density": 4.405, "ecdf": 0.499, "esf": 0.501}, {"trace": 0.987, "density": 3.47, "ecdf": 0.194, "esf": 0.806}, {"trace": 1.084, "density": 4.131, "ecdf": 0.615, "esf": 0.385}, {"trace": 1.014, "density": 4.281, "ecdf": 0.303, "esf": 0.697}, {"trace": 0.979, "density": 3.13, "ecdf": 0.169, "esf": 0.831}, {"trace": 1.167, "density": 2.052, "ecdf": 0.88, "esf": 0.12}, {"trace": 1.013, "density": 4.275, "ecdf": 0.302, "esf": 0.698}, {"trace": 1.049, "density": 4.442, "ecdf": 0.46, "esf": 0.54}, {"trace": 1.001, "density": 3.991, "ecdf": 0.247, "esf": 0.753}, {"trace": 1.101, "density": 3.86, "ecdf": 0.68, "esf": 0.32}, {"trace": 1.03, "density": 4.406, "ecdf": 0.37, "esf": 0.63}, {"trace": 1.068, "density": 4.334, "ecdf": 0.543, "esf": 0.457}, {"trace": 1.343, "density": 0.081, "ecdf": 0.997, "esf": 0.003}, {"trace": 0.98, "density": 3.163, "ecdf": 0.171, "esf": 0.829}, {"trace": 1.127, "density": 3.208, "ecdf": 0.775, "esf": 0.225}, {"trace": 1.019, "density": 4.338, "ecdf": 0.326, "esf": 0.674}, {"trace": 1.068, "density": 4.332, "ecdf": 0.544, "esf": 0.456}, {"trace": 1.05, "density": 4.441, "ecdf": 0.464, "esf": 0.536}, {"trace": 1.105, "density": 3.792, "ecdf": 0.696, "esf": 0.304}, {"trace": 0.934, "density": 1.703, "ecdf": 0.061, "esf": 0.939}, {"trace": 1.01, "density": 4.219, "ecdf": 0.285, "esf": 0.715}, {"trace": 1.113, "density": 3.606, "ecdf": 0.725, "esf": 0.275}, {"trace": 1.15, "density": 2.548, "ecdf": 0.839, "esf": 0.161}, {"trace": 1.149, "density": 2.584, "ecdf": 0.836, "esf": 0.164}, {"trace": 1.124, "density": 3.304, "ecdf": 0.764, "esf": 0.236}, {"trace": 1.194, "density": 1.403, "ecdf": 0.923, "esf": 0.077}, {"trace": 1.083, "density": 4.15, "ecdf": 0.61, "esf": 0.39}, {"trace": 0.995, "density": 3.801, "ecdf": 0.222, "esf": 0.778}, {"trace": 0.98, "density": 3.186, "ecdf": 0.172, "esf": 0.828}, {"trace": 1.122, "density": 3.367, "ecdf": 0.757, "esf": 0.243}, {"trace": 1.233, "density": 0.71, "ecdf": 0.963, "esf": 0.037}, {"trace": 1.22, "density": 0.898, "ecdf": 0.954, "esf": 0.046}, {"trace": 1.064, "density": 4.37, "ecdf": 0.524, "esf": 0.476}, {"trace": 1.161, "density": 2.253, "ecdf": 0.866, "esf": 0.134}, {"trace": 0.933, "density": 1.667, "ecdf": 0.059, "esf": 0.941}, {"trace": 0.962, "density": 2.579, "ecdf": 0.121, "esf": 0.879}, {"trace": 1.18, "density": 1.688, "ecdf": 0.904, "esf": 0.096}, {"trace": 0.975, "density": 2.975, "ecdf": 0.156, "esf": 0.844}, {"trace": 1.063, "density": 4.374, "ecdf": 0.522, "esf": 0.478}, {"trace": 1.082, "density": 4.159, "ecdf": 0.607, "esf": 0.393}, {"trace": 1.054, "density": 4.428, "ecdf": 0.48, "esf": 0.52}, {"trace": 1.128, "density": 3.171, "ecdf": 0.78, "esf": 0.22}, {"trace": 1.154, "density": 2.429, "ecdf": 0.85, "esf": 0.149}, {"trace": 1.087, "density": 4.088, "ecdf": 0.625, "esf": 0.375}, {"trace": 1.074, "density": 4.266, "ecdf": 0.568, "esf": 0.432}, {"trace": 1.054, "density": 4.428, "ecdf": 0.48, "esf": 0.52}, {"trace": 1.052, "density": 4.434, "ecdf": 0.475, "esf": 0.525}, {"trace": 1.113, "density": 3.611, "ecdf": 0.724, "esf": 0.275}, {"trace": 0.996, "density": 3.833, "ecdf": 0.226, "esf": 0.774}, {"trace": 0.985, "density": 3.365, "ecdf": 0.186, "esf": 0.814}, {"trace": 0.982, "density": 3.268, "ecdf": 0.178, "esf": 0.822}, {"trace": 1.031, "density": 4.415, "ecdf": 0.378, "esf": 0.622}, {"trace": 1.1, "density": 3.875, "ecdf": 0.676, "esf": 0.324}, {"trace": 0.927, "density": 1.475, "ecdf": 0.048, "esf": 0.952}, {"trace": 0.894, "density": 0.609, "ecdf": 0.019, "esf": 0.981}, {"trace": 1.149, "density": 2.586, "ecdf": 0.836, "esf": 0.164}, {"trace": 1.023, "density": 4.368, "ecdf": 0.344, "esf": 0.656}, {"trace": 0.96, "density": 2.503, "ecdf": 0.114, "esf": 0.886}, {"trace": 1.085, "density": 4.126, "ecdf": 0.616, "esf": 0.383}, {"trace": 1.044, "density": 4.448, "ecdf": 0.436, "esf": 0.564}, {"trace": 1.102, "density": 3.836, "ecdf": 0.686, "esf": 0.314}, {"trace": 0.979, "density": 3.153, "ecdf": 0.17, "esf": 0.83}, {"trace": 1.029, "density": 4.401, "ecdf": 0.367, "esf": 0.633}, {"trace": 1.116, "density": 3.525, "ecdf": 0.736, "esf": 0.264}, {"trace": 0.947, "density": 2.095, "ecdf": 0.084, "esf": 0.916}, {"trace": 1.12, "density": 3.414, "ecdf": 0.751, "esf": 0.249}, {"trace": 1.065, "density": 4.358, "ecdf": 0.532, "esf": 0.468}, {"trace": 0.996, "density": 3.829, "ecdf": 0.226, "esf": 0.774}, {"trace": 0.982, "density": 3.259, "ecdf": 0.178, "esf": 0.822}, {"trace": 1.161, "density": 2.248, "ecdf": 0.866, "esf": 0.134}, {"trace": 0.931, "density": 1.606, "ecdf": 0.054, "esf": 0.946}, {"trace": 1.209, "density": 1.105, "ecdf": 0.944, "esf": 0.056}, {"trace": 1.125, "density": 3.272, "ecdf": 0.768, "esf": 0.232}, {"trace": 1.074, "density": 4.262, "ecdf": 0.57, "esf": 0.43}, {"trace": 1.119, "density": 3.438, "ecdf": 0.747, "esf": 0.253}, {"trace": 0.978, "density": 3.099, "ecdf": 0.167, "esf": 0.832}, {"trace": 1.1, "density": 3.875, "ecdf": 0.676, "esf": 0.324}, {"trace": 1.081, "density": 4.172, "ecdf": 0.602, "esf": 0.398}, {"trace": 1.045, "density": 4.448, "ecdf": 0.439, "esf": 0.561}, {"trace": 1.076, "density": 4.244, "ecdf": 0.575, "esf": 0.425}, {"trace": 0.975, "density": 2.989, "ecdf": 0.157, "esf": 0.843}, {"trace": 0.913, "density": 1.039, "ecdf": 0.032, "esf": 0.968}, {"trace": 1.022, "density": 4.363, "ecdf": 0.341, "esf": 0.659}, {"trace": 1.029, "density": 4.403, "ecdf": 0.368, "esf": 0.632}, {"trace": 1.077, "density": 4.226, "ecdf": 0.582, "esf": 0.418}, {"trace": 1.198, "density": 1.331, "ecdf": 0.928, "esf": 0.072}, {"trace": 0.914, "density": 1.048, "ecdf": 0.033, "esf": 0.967}, {"trace": 1.105, "density": 3.783, "ecdf": 0.698, "esf": 0.302}, {"trace": 1.108, "density": 3.724, "ecdf": 0.706, "esf": 0.294}, {"trace": 1.126, "density": 3.228, "ecdf": 0.773, "esf": 0.227}, {"trace": 1.318, "density": 0.138, "ecdf": 0.994, "esf": 0.006}, {"trace": 1.284, "density": 0.283, "ecdf": 0.988, "esf": 0.012}, {"trace": 1.284, "density": 0.287, "ecdf": 0.988, "esf": 0.012}, {"trace": 0.873, "density": 0.367, "ecdf": 0.009, "esf": 0.991}, {"trace": 1.177, "density": 1.773, "ecdf": 0.899, "esf": 0.101}, {"trace": 1.036, "density": 4.434, "ecdf": 0.402, "esf": 0.598}, {"trace": 1.126, "density": 3.247, "ecdf": 0.77, "esf": 0.23}, {"trace": 0.978, "density": 3.088, "ecdf": 0.166, "esf": 0.834}, {"trace": 1.06, "density": 4.395, "ecdf": 0.507, "esf": 0.493}, {"trace": 0.916, "density": 1.123, "ecdf": 0.035, "esf": 0.965}, {"trace": 1.172, "density": 1.929, "ecdf": 0.889, "esf": 0.111}, {"trace": 1.092, "density": 4.01, "ecdf": 0.644, "esf": 0.356}, {"trace": 0.999, "density": 3.916, "ecdf": 0.237, "esf": 0.763}, {"trace": 1.067, "density": 4.336, "ecdf": 0.542, "esf": 0.458}, {"trace": 1.267, "density": 0.41, "ecdf": 0.982, "esf": 0.018}, {"trace": 0.962, "density": 2.56, "ecdf": 0.119, "esf": 0.881}, {"trace": 1.12, "density": 3.416, "ecdf": 0.75, "esf": 0.249}, {"trace": 1.115, "density": 3.557, "ecdf": 0.732, "esf": 0.268}, {"trace": 1.054, "density": 4.427, "ecdf": 0.481, "esf": 0.519}, {"trace": 1.095, "density": 3.971, "ecdf": 0.654, "esf": 0.346}, {"trace": 1.049, "density": 4.443, "ecdf": 0.46, "esf": 0.54}, {"trace": 1.14, "density": 2.829, "ecdf": 0.812, "esf": 0.188}, {"trace": 1.072, "density": 4.292, "ecdf": 0.558, "esf": 0.442}, {"trace": 0.974, "density": 2.942, "ecdf": 0.154, "esf": 0.846}, {"trace": 0.911, "density": 0.973, "ecdf": 0.03, "esf": 0.97}, {"trace": 1.105, "density": 3.788, "ecdf": 0.696, "esf": 0.304}, {"trace": 1.005, "density": 4.108, "ecdf": 0.262, "esf": 0.738}, {"trace": 1.059, "density": 4.403, "ecdf": 0.501, "esf": 0.499}, {"trace": 1.166, "density": 2.091, "ecdf": 0.878, "esf": 0.122}, {"trace": 1.088, "density": 4.072, "ecdf": 0.629, "esf": 0.371}, {"trace": 1.082, "density": 4.157, "ecdf": 0.608, "esf": 0.392}, {"trace": 0.97, "density": 2.824, "ecdf": 0.142, "esf": 0.858}, {"trace": 1.084, "density": 4.135, "ecdf": 0.613, "esf": 0.387}, {"trace": 0.961, "density": 2.528, "ecdf": 0.116, "esf": 0.884}, {"trace": 0.991, "density": 3.624, "ecdf": 0.206, "esf": 0.794}, {"trace": 1.052, "density": 4.435, "ecdf": 0.473, "esf": 0.527}, {"trace": 1.039, "density": 4.442, "ecdf": 0.418, "esf": 0.582}, {"trace": 1.013, "density": 4.275, "ecdf": 0.302, "esf": 0.698}, {"trace": 1.056, "density": 4.418, "ecdf": 0.49, "esf": 0.51}, {"trace": 0.972, "density": 2.881, "ecdf": 0.148, "esf": 0.852}, {"trace": 1.02, "density": 4.349, "ecdf": 0.332, "esf": 0.668}, {"trace": 1.205, "density": 1.188, "ecdf": 0.939, "esf": 0.061}, {"trace": 0.951, "density": 2.204, "ecdf": 0.092, "esf": 0.908}, {"trace": 1.013, "density": 4.274, "ecdf": 0.301, "esf": 0.699}, {"trace": 1.076, "density": 4.248, "ecdf": 0.574, "esf": 0.426}, {"trace": 1.053, "density": 4.432, "ecdf": 0.478, "esf": 0.522}, {"trace": 1.092, "density": 4.016, "ecdf": 0.642, "esf": 0.358}, {"trace": 1.102, "density": 3.838, "ecdf": 0.686, "esf": 0.314}, {"trace": 1.04, "density": 4.443, "ecdf": 0.419, "esf": 0.581}, {"trace": 1.034, "density": 4.425, "ecdf": 0.387, "esf": 0.613}, {"trace": 0.975, "density": 2.999, "ecdf": 0.158, "esf": 0.842}, {"trace": 1.079, "density": 4.196, "ecdf": 0.595, "esf": 0.405}, {"trace": 1.016, "density": 4.305, "ecdf": 0.312, "esf": 0.688}, {"trace": 1.103, "density": 3.82, "ecdf": 0.69, "esf": 0.31}, {"trace": 1.0, "density": 3.979, "ecdf": 0.246, "esf": 0.754}, {"trace": 1.155, "density": 2.411, "ecdf": 0.852, "esf": 0.147}, {"trace": 1.137, "density": 2.914, "ecdf": 0.804, "esf": 0.196}, {"trace": 0.883, "density": 0.475, "ecdf": 0.013, "esf": 0.987}, {"trace": 1.092, "density": 4.009, "ecdf": 0.644, "esf": 0.356}, {"trace": 0.884, "density": 0.486, "ecdf": 0.014, "esf": 0.986}, {"trace": 1.144, "density": 2.711, "ecdf": 0.824, "esf": 0.176}, {"trace": 0.98, "density": 3.176, "ecdf": 0.172, "esf": 0.828}, {"trace": 0.995, "density": 3.786, "ecdf": 0.22, "esf": 0.78}, {"trace": 0.979, "density": 3.14, "ecdf": 0.17, "esf": 0.83}, {"trace": 0.83, "density": 0.074, "ecdf": 0.001, "esf": 0.999}, {"trace": 1.003, "density": 4.047, "ecdf": 0.253, "esf": 0.747}, {"trace": 1.231, "density": 0.745, "ecdf": 0.961, "esf": 0.039}, {"trace": 1.092, "density": 4.013, "ecdf": 0.643, "esf": 0.357}, {"trace": 1.043, "density": 4.447, "ecdf": 0.435, "esf": 0.565}, {"trace": 0.978, "density": 3.088, "ecdf": 0.166, "esf": 0.834}, {"trace": 1.18, "density": 1.707, "ecdf": 0.903, "esf": 0.097}, {"trace": 1.198, "density": 1.328, "ecdf": 0.928, "esf": 0.072}, {"trace": 1.367, "density": 0.046, "ecdf": 0.998, "esf": 0.002}, {"trace": 1.115, "density": 3.551, "ecdf": 0.733, "esf": 0.267}, {"trace": 1.026, "density": 4.386, "ecdf": 0.357, "esf": 0.643}, {"trace": 0.989, "density": 3.553, "ecdf": 0.2, "esf": 0.8}, {"trace": 1.291, "density": 0.246, "ecdf": 0.989, "esf": 0.011}, {"trace": 0.956, "density": 2.361, "ecdf": 0.103, "esf": 0.897}, {"trace": 0.999, "density": 3.945, "ecdf": 0.24, "esf": 0.76}, {"trace": 1.185, "density": 1.579, "ecdf": 0.912, "esf": 0.088}, {"trace": 1.134, "density": 2.999, "ecdf": 0.795, "esf": 0.205}, {"trace": 1.22, "density": 0.898, "ecdf": 0.954, "esf": 0.046}, {"trace": 1.209, "density": 1.118, "ecdf": 0.944, "esf": 0.056}, {"trace": 0.902, "density": 0.746, "ecdf": 0.023, "esf": 0.977}, {"trace": 1.033, "density": 4.42, "ecdf": 0.383, "esf": 0.617}, {"trace": 1.108, "density": 3.728, "ecdf": 0.704, "esf": 0.296}, {"trace": 1.038, "density": 4.439, "ecdf": 0.411, "esf": 0.589}, {"trace": 1.059, "density": 4.402, "ecdf": 0.502, "esf": 0.498}, {"trace": 1.101, "density": 3.856, "ecdf": 0.681, "esf": 0.319}, {"trace": 1.1, "density": 3.875, "ecdf": 0.677, "esf": 0.323}, {"trace": 1.144, "density": 2.702, "ecdf": 0.825, "esf": 0.175}, {"trace": 1.048, "density": 4.445, "ecdf": 0.453, "esf": 0.547}, {"trace": 1.097, "density": 3.939, "ecdf": 0.663, "esf": 0.337}, {"trace": 1.085, "density": 4.116, "ecdf": 0.618, "esf": 0.382}, {"trace": 0.843, "density": 0.127, "ecdf": 0.002, "esf": 0.998}, {"trace": 1.303, "density": 0.192, "ecdf": 0.992, "esf": 0.008}, {"trace": 0.91, "density": 0.929, "ecdf": 0.03, "esf": 0.97}, {"trace": 0.965, "density": 2.673, "ecdf": 0.129, "esf": 0.871}, {"trace": 1.224, "density": 0.833, "ecdf": 0.957, "esf": 0.043}, {"trace": 0.975, "density": 2.981, "ecdf": 0.157, "esf": 0.843}, {"trace": 1.003, "density": 4.072, "ecdf": 0.256, "esf": 0.744}, {"trace": 0.923, "density": 1.351, "ecdf": 0.042, "esf": 0.958}, {"trace": 0.938, "density": 1.833, "ecdf": 0.07, "esf": 0.93}, {"trace": 1.224, "density": 0.841, "ecdf": 0.957, "esf": 0.043}, {"trace": 1.016, "density": 4.309, "ecdf": 0.313, "esf": 0.687}, {"trace": 0.972, "density": 2.892, "ecdf": 0.148, "esf": 0.852}, {"trace": 0.985, "density": 3.368, "ecdf": 0.186, "esf": 0.814}, {"trace": 1.078, "density": 4.21, "ecdf": 0.588, "esf": 0.412}, {"trace": 1.158, "density": 2.337, "ecdf": 0.86, "esf": 0.14}, {"trace": 1.214, "density": 1.021, "ecdf": 0.948, "esf": 0.052}, {"trace": 1.108, "density": 3.716, "ecdf": 0.707, "esf": 0.293}, {"trace": 1.09, "density": 4.05, "ecdf": 0.633, "esf": 0.367}, {"trace": 1.206, "density": 1.173, "ecdf": 0.94, "esf": 0.06}, {"trace": 1.02, "density": 4.343, "ecdf": 0.328, "esf": 0.672}, {"trace": 1.048, "density": 4.445, "ecdf": 0.454, "esf": 0.546}, {"trace": 1.033, "density": 4.421, "ecdf": 0.383, "esf": 0.617}, {"trace": 1.065, "density": 4.362, "ecdf": 0.53, "esf": 0.47}, {"trace": 0.964, "density": 2.616, "ecdf": 0.124, "esf": 0.876}, {"trace": 0.964, "density": 2.632, "ecdf": 0.126, "esf": 0.874}, {"trace": 0.987, "density": 3.46, "ecdf": 0.193, "esf": 0.807}, {"trace": 1.066, "density": 4.348, "ecdf": 0.537, "esf": 0.463}, {"trace": 1.21, "density": 1.1, "ecdf": 0.945, "esf": 0.055}, {"trace": 1.026, "density": 4.385, "ecdf": 0.355, "esf": 0.645}, {"trace": 1.06, "density": 4.397, "ecdf": 0.506, "esf": 0.494}, {"trace": 0.998, "density": 3.908, "ecdf": 0.236, "esf": 0.764}, {"trace": 1.134, "density": 2.984, "ecdf": 0.797, "esf": 0.203}, {"trace": 1.057, "density": 4.414, "ecdf": 0.493, "esf": 0.507}, {"trace": 1.102, "density": 3.846, "ecdf": 0.683, "esf": 0.317}, {"trace": 1.112, "density": 3.619, "ecdf": 0.723, "esf": 0.277}, {"trace": 1.122, "density": 3.363, "ecdf": 0.758, "esf": 0.242}, {"trace": 1.15, "density": 2.554, "ecdf": 0.838, "esf": 0.162}, {"trace": 1.051, "density": 4.438, "ecdf": 0.468, "esf": 0.532}, {"trace": 1.001, "density": 4.011, "ecdf": 0.249, "esf": 0.751}, {"trace": 1.088, "density": 4.069, "ecdf": 0.63, "esf": 0.37}, {"trace": 1.168, "density": 2.035, "ecdf": 0.881, "esf": 0.119}, {"trace": 0.986, "density": 3.407, "ecdf": 0.189, "esf": 0.811}, {"trace": 1.022, "density": 4.359, "ecdf": 0.338, "esf": 0.662}, {"trace": 1.096, "density": 3.943, "ecdf": 0.662, "esf": 0.338}, {"trace": 1.057, "density": 4.414, "ecdf": 0.493, "esf": 0.507}, {"trace": 0.929, "density": 1.552, "ecdf": 0.051, "esf": 0.949}, {"trace": 1.041, "density": 4.445, "ecdf": 0.422, "esf": 0.578}, {"trace": 1.119, "density": 3.433, "ecdf": 0.748, "esf": 0.252}, {"trace": 1.02, "density": 4.347, "ecdf": 0.331, "esf": 0.669}, {"trace": 0.949, "density": 2.154, "ecdf": 0.088, "esf": 0.912}, {"trace": 1.126, "density": 3.226, "ecdf": 0.773, "esf": 0.227}, {"trace": 1.066, "density": 4.346, "ecdf": 0.538, "esf": 0.462}, {"trace": 1.026, "density": 4.388, "ecdf": 0.357, "esf": 0.643}, {"trace": 1.0, "density": 3.981, "ecdf": 0.246, "esf": 0.754}, {"trace": 1.071, "density": 4.302, "ecdf": 0.555, "esf": 0.445}, {"trace": 0.835, "density": 0.093, "ecdf": 0.002, "esf": 0.998}, {"trace": 1.26, "density": 0.46, "ecdf": 0.979, "esf": 0.021}, {"trace": 1.23, "density": 0.752, "ecdf": 0.961, "esf": 0.039}, {"trace": 1.092, "density": 4.014, "ecdf": 0.642, "esf": 0.358}, {"trace": 1.069, "density": 4.326, "ecdf": 0.547, "esf": 0.453}, {"trace": 1.118, "density": 3.477, "ecdf": 0.742, "esf": 0.258}, {"trace": 1.02, "density": 4.347, "ecdf": 0.331, "esf": 0.669}, {"trace": 1.12, "density": 3.421, "ecdf": 0.749, "esf": 0.251}, {"trace": 0.934, "density": 1.719, "ecdf": 0.062, "esf": 0.938}, {"trace": 1.015, "density": 4.296, "ecdf": 0.309, "esf": 0.691}, {"trace": 0.957, "density": 2.403, "ecdf": 0.107, "esf": 0.893}, {"trace": 1.059, "density": 4.404, "ecdf": 0.501, "esf": 0.499}, {"trace": 1.18, "density": 1.7, "ecdf": 0.904, "esf": 0.096}, {"trace": 1.033, "density": 4.422, "ecdf": 0.384, "esf": 0.616}, {"trace": 0.996, "density": 3.815, "ecdf": 0.224, "esf": 0.776}, {"trace": 0.898, "density": 0.677, "ecdf": 0.02, "esf": 0.98}, {"trace": 1.21, "density": 1.101, "ecdf": 0.945, "esf": 0.055}, {"trace": 1.088, "density": 4.075, "ecdf": 0.628, "esf": 0.372}, {"trace": 1.106, "density": 3.767, "ecdf": 0.699, "esf": 0.301}, {"trace": 1.15, "density": 2.559, "ecdf": 0.838, "esf": 0.162}, {"trace": 1.175, "density": 1.834, "ecdf": 0.895, "esf": 0.105}, {"trace": 1.139, "density": 2.858, "ecdf": 0.809, "esf": 0.191}, {"trace": 0.946, "density": 2.064, "ecdf": 0.084, "esf": 0.916}, {"trace": 1.126, "density": 3.241, "ecdf": 0.771, "esf": 0.229}, {"trace": 1.091, "density": 4.025, "ecdf": 0.639, "esf": 0.361}, {"trace": 1.073, "density": 4.278, "ecdf": 0.564, "esf": 0.436}, {"trace": 1.13, "density": 3.106, "ecdf": 0.786, "esf": 0.214}, {"trace": 1.016, "density": 4.311, "ecdf": 0.314, "esf": 0.686}, {"trace": 1.26, "density": 0.458, "ecdf": 0.979, "esf": 0.021}, {"trace": 1.182, "density": 1.639, "ecdf": 0.908, "esf": 0.092}, {"trace": 1.067, "density": 4.345, "ecdf": 0.539, "esf": 0.461}, {"trace": 1.052, "density": 4.434, "ecdf": 0.475, "esf": 0.525}, {"trace": 0.935, "density": 1.735, "ecdf": 0.064, "esf": 0.936}, {"trace": 0.963, "density": 2.582, "ecdf": 0.121, "esf": 0.879}, {"trace": 1.157, "density": 2.362, "ecdf": 0.857, "esf": 0.143}, {"trace": 1.07, "density": 4.311, "ecdf": 0.552, "esf": 0.448}, {"trace": 1.052, "density": 4.435, "ecdf": 0.473, "esf": 0.527}, {"trace": 1.18, "density": 1.7, "ecdf": 0.904, "esf": 0.096}, {"trace": 0.934, "density": 1.708, "ecdf": 0.061, "esf": 0.939}, {"trace": 1.248, "density": 0.565, "ecdf": 0.973, "esf": 0.027}, {"trace": 1.106, "density": 3.754, "ecdf": 0.702, "esf": 0.298}, {"trace": 1.051, "density": 4.439, "ecdf": 0.467, "esf": 0.533}, {"trace": 1.071, "density": 4.303, "ecdf": 0.555, "esf": 0.445}, {"trace": 0.954, "density": 2.324, "ecdf": 0.101, "esf": 0.899}, {"trace": 0.942, "density": 1.94, "ecdf": 0.077, "esf": 0.923}, {"trace": 0.917, "density": 1.132, "ecdf": 0.036, "esf": 0.964}, {"trace": 0.956, "density": 2.38, "ecdf": 0.105, "esf": 0.895}, {"trace": 1.108, "density": 3.726, "ecdf": 0.705, "esf": 0.295}, {"trace": 1.097, "density": 3.927, "ecdf": 0.666, "esf": 0.334}, {"trace": 1.077, "density": 4.223, "ecdf": 0.583, "esf": 0.417}, {"trace": 1.083, "density": 4.146, "ecdf": 0.61, "esf": 0.39}, {"trace": 1.01, "density": 4.223, "ecdf": 0.286, "esf": 0.714}, {"trace": 1.166, "density": 2.083, "ecdf": 0.878, "esf": 0.122}, {"trace": 0.901, "density": 0.729, "ecdf": 0.022, "esf": 0.978}, {"trace": 0.996, "density": 3.828, "ecdf": 0.226, "esf": 0.774}, {"trace": 1.202, "density": 1.256, "ecdf": 0.934, "esf": 0.066}, {"trace": 0.924, "density": 1.387, "ecdf": 0.044, "esf": 0.956}, {"trace": 1.007, "density": 4.155, "ecdf": 0.272, "esf": 0.728}, {"trace": 1.014, "density": 4.288, "ecdf": 0.306, "esf": 0.694}, {"trace": 0.989, "density": 3.533, "ecdf": 0.198, "esf": 0.802}, {"trace": 0.991, "density": 3.632, "ecdf": 0.207, "esf": 0.793}, {"trace": 1.177, "density": 1.786, "ecdf": 0.898, "esf": 0.102}, {"trace": 1.191, "density": 1.446, "ecdf": 0.919, "esf": 0.081}, {"trace": 0.958, "density": 2.436, "ecdf": 0.109, "esf": 0.891}, {"trace": 0.979, "density": 3.122, "ecdf": 0.168, "esf": 0.832}, {"trace": 1.084, "density": 4.14, "ecdf": 0.612, "esf": 0.388}, {"trace": 1.176, "density": 1.804, "ecdf": 0.897, "esf": 0.103}, {"trace": 0.948, "density": 2.116, "ecdf": 0.086, "esf": 0.914}, {"trace": 0.955, "density": 2.33, "ecdf": 0.102, "esf": 0.898}, {"trace": 1.024, "density": 4.372, "ecdf": 0.346, "esf": 0.654}, {"trace": 0.996, "density": 3.837, "ecdf": 0.227, "esf": 0.773}, {"trace": 1.141, "density": 2.801, "ecdf": 0.815, "esf": 0.185}, {"trace": 1.061, "density": 4.392, "ecdf": 0.509, "esf": 0.491}, {"trace": 1.149, "density": 2.571, "ecdf": 0.837, "esf": 0.163}, {"trace": 0.975, "density": 2.986, "ecdf": 0.157, "esf": 0.843}, {"trace": 1.144, "density": 2.71, "ecdf": 0.824, "esf": 0.176}, {"trace": 1.09, "density": 4.045, "ecdf": 0.634, "esf": 0.366}, {"trace": 1.026, "density": 4.385, "ecdf": 0.355, "esf": 0.645}, {"trace": 1.092, "density": 4.013, "ecdf": 0.643, "esf": 0.357}, {"trace": 1.245, "density": 0.586, "ecdf": 0.971, "esf": 0.029}, {"trace": 0.936, "density": 1.752, "ecdf": 0.064, "esf": 0.936}, {"trace": 1.0, "density": 3.977, "ecdf": 0.245, "esf": 0.755}, {"trace": 1.152, "density": 2.5, "ecdf": 0.843, "esf": 0.157}, {"trace": 1.035, "density": 4.429, "ecdf": 0.395, "esf": 0.605}, {"trace": 0.945, "density": 2.025, "ecdf": 0.081, "esf": 0.919}, {"trace": 1.002, "density": 4.027, "ecdf": 0.251, "esf": 0.749}, {"trace": 1.1, "density": 3.873, "ecdf": 0.677, "esf": 0.323}, {"trace": 0.95, "density": 2.192, "ecdf": 0.091, "esf": 0.909}, {"trace": 0.97, "density": 2.829, "ecdf": 0.143, "esf": 0.857}, {"trace": 1.038, "density": 4.44, "ecdf": 0.414, "esf": 0.586}, {"trace": 1.102, "density": 3.84, "ecdf": 0.685, "esf": 0.315}, {"trace": 1.032, "density": 4.416, "ecdf": 0.379, "esf": 0.621}, {"trace": 1.057, "density": 4.416, "ecdf": 0.491, "esf": 0.509}, {"trace": 1.084, "density": 4.136, "ecdf": 0.613, "esf": 0.387}, {"trace": 0.967, "density": 2.729, "ecdf": 0.135, "esf": 0.865}, {"trace": 1.059, "density": 4.403, "ecdf": 0.502, "esf": 0.498}, {"trace": 1.067, "density": 4.339, "ecdf": 0.54, "esf": 0.46}, {"trace": 1.062, "density": 4.383, "ecdf": 0.516, "esf": 0.484}, {"trace": 1.015, "density": 4.3, "ecdf": 0.31, "esf": 0.69}, {"trace": 1.031, "density": 4.414, "ecdf": 0.378, "esf": 0.622}, {"trace": 0.976, "density": 3.012, "ecdf": 0.16, "esf": 0.84}, {"trace": 1.026, "density": 4.384, "ecdf": 0.355, "esf": 0.645}, {"trace": 1.02, "density": 4.343, "ecdf": 0.328, "esf": 0.672}, {"trace": 1.159, "density": 2.31, "ecdf": 0.861, "esf": 0.139}, {"trace": 1.168, "density": 2.043, "ecdf": 0.88, "esf": 0.12}, {"trace": 1.042, "density": 4.446, "ecdf": 0.427, "esf": 0.573}, {"trace": 1.243, "density": 0.604, "ecdf": 0.97, "esf": 0.03}, {"trace": 0.938, "density": 1.826, "ecdf": 0.07, "esf": 0.93}, {"trace": 1.051, "density": 4.439, "ecdf": 0.466, "esf": 0.534}, {"trace": 1.033, "density": 4.423, "ecdf": 0.386, "esf": 0.614}, {"trace": 1.088, "density": 4.08, "ecdf": 0.627, "esf": 0.373}, {"trace": 1.067, "density": 4.343, "ecdf": 0.539, "esf": 0.461}, {"trace": 1.027, "density": 4.39, "ecdf": 0.359, "esf": 0.641}, {"trace": 0.951, "density": 2.21, "ecdf": 0.093, "esf": 0.907}, {"trace": 1.308, "density": 0.174, "ecdf": 0.993, "esf": 0.007}, {"trace": 0.939, "density": 1.862, "ecdf": 0.072, "esf": 0.928}, {"trace": 1.162, "density": 2.203, "ecdf": 0.869, "esf": 0.131}, {"trace": 0.97, "density": 2.832, "ecdf": 0.144, "esf": 0.856}, {"trace": 0.995, "density": 3.763, "ecdf": 0.218, "esf": 0.782}, {"trace": 1.051, "density": 4.438, "ecdf": 0.469, "esf": 0.531}, {"trace": 1.025, "density": 4.378, "ecdf": 0.35, "esf": 0.65}, {"trace": 1.043, "density": 4.447, "ecdf": 0.431, "esf": 0.569}, {"trace": 1.026, "density": 4.388, "ecdf": 0.358, "esf": 0.642}, {"trace": 1.148, "density": 2.59, "ecdf": 0.835, "esf": 0.165}, {"trace": 1.02, "density": 4.344, "ecdf": 0.329, "esf": 0.671}, {"trace": 1.14, "density": 2.821, "ecdf": 0.813, "esf": 0.187}, {"trace": 0.984, "density": 3.317, "ecdf": 0.181, "esf": 0.819}, {"trace": 1.061, "density": 4.391, "ecdf": 0.51, "esf": 0.49}, {"trace": 1.035, "density": 4.428, "ecdf": 0.393, "esf": 0.607}, {"trace": 1.028, "density": 4.4, "ecdf": 0.366, "esf": 0.634}, {"trace": 0.974, "density": 2.94, "ecdf": 0.153, "esf": 0.847}, {"trace": 1.103, "density": 3.829, "ecdf": 0.688, "esf": 0.312}, {"trace": 1.038, "density": 4.438, "ecdf": 0.408, "esf": 0.592}, {"trace": 1.022, "density": 4.364, "ecdf": 0.342, "esf": 0.658}, {"trace": 1.057, "density": 4.415, "ecdf": 0.492, "esf": 0.508}, {"trace": 0.99, "density": 3.587, "ecdf": 0.202, "esf": 0.798}, {"trace": 1.038, "density": 4.438, "ecdf": 0.409, "esf": 0.591}, {"trace": 1.034, "density": 4.427, "ecdf": 0.391, "esf": 0.609}, {"trace": 1.148, "density": 2.599, "ecdf": 0.835, "esf": 0.165}, {"trace": 1.108, "density": 3.712, "ecdf": 0.708, "esf": 0.292}, {"trace": 1.16, "density": 2.262, "ecdf": 0.865, "esf": 0.135}, {"trace": 1.057, "density": 4.413, "ecdf": 0.494, "esf": 0.506}, {"trace": 1.17, "density": 1.961, "ecdf": 0.886, "esf": 0.114}, {"trace": 0.988, "density": 3.511, "ecdf": 0.197, "esf": 0.803}, {"trace": 1.296, "density": 0.223, "ecdf": 0.99, "esf": 0.01}, {"trace": 1.165, "density": 2.113, "ecdf": 0.876, "esf": 0.124}, {"trace": 0.935, "density": 1.733, "ecdf": 0.063, "esf": 0.937}, {"trace": 1.242, "density": 0.619, "ecdf": 0.97, "esf": 0.03}, {"trace": 0.868, "density": 0.323, "ecdf": 0.007, "esf": 0.993}, {"trace": 1.126, "density": 3.244, "ecdf": 0.771, "esf": 0.229}, {"trace": 1.016, "density": 4.303, "ecdf": 0.312, "esf": 0.688}, {"trace": 1.005, "density": 4.119, "ecdf": 0.265, "esf": 0.735}, {"trace": 0.97, "density": 2.834, "ecdf": 0.144, "esf": 0.856}, {"trace": 0.959, "density": 2.463, "ecdf": 0.111, "esf": 0.889}, {"trace": 1.075, "density": 4.256, "ecdf": 0.572, "esf": 0.428}, {"trace": 1.231, "density": 0.737, "ecdf": 0.962, "esf": 0.038}, {"trace": 1.117, "density": 3.51, "ecdf": 0.738, "esf": 0.262}, {"trace": 1.021, "density": 4.354, "ecdf": 0.335, "esf": 0.665}, {"trace": 1.038, "density": 4.438, "ecdf": 0.409, "esf": 0.591}, {"trace": 0.984, "density": 3.339, "ecdf": 0.183, "esf": 0.817}, {"trace": 1.105, "density": 3.784, "ecdf": 0.697, "esf": 0.303}, {"trace": 1.006, "density": 4.134, "ecdf": 0.268, "esf": 0.732}, {"trace": 1.128, "density": 3.182, "ecdf": 0.778, "esf": 0.222}, {"trace": 1.101, "density": 3.862, "ecdf": 0.68, "esf": 0.32}, {"trace": 1.026, "density": 4.386, "ecdf": 0.355, "esf": 0.645}, {"trace": 0.944, "density": 2.015, "ecdf": 0.081, "esf": 0.919}, {"trace": 1.149, "density": 2.577, "ecdf": 0.837, "esf": 0.163}, {"trace": 1.175, "density": 1.828, "ecdf": 0.895, "esf": 0.105}, {"trace": 1.124, "density": 3.297, "ecdf": 0.765, "esf": 0.235}, {"trace": 1.07, "density": 4.306, "ecdf": 0.553, "esf": 0.447}, {"trace": 1.011, "density": 4.243, "ecdf": 0.292, "esf": 0.708}, {"trace": 1.064, "density": 4.367, "ecdf": 0.526, "esf": 0.474}, {"trace": 0.961, "density": 2.538, "ecdf": 0.117, "esf": 0.883}, {"trace": 1.117, "density": 3.51, "ecdf": 0.737, "esf": 0.263}, {"trace": 0.935, "density": 1.739, "ecdf": 0.064, "esf": 0.936}, {"trace": 1.048, "density": 4.445, "ecdf": 0.452, "esf": 0.548}, {"trace": 1.141, "density": 2.802, "ecdf": 0.815, "esf": 0.185}, {"trace": 1.055, "density": 4.424, "ecdf": 0.484, "esf": 0.516}, {"trace": 1.103, "density": 3.824, "ecdf": 0.689, "esf": 0.311}, {"trace": 1.006, "density": 4.147, "ecdf": 0.27, "esf": 0.73}, {"trace": 0.965, "density": 2.667, "ecdf": 0.129, "esf": 0.871}, {"trace": 1.172, "density": 1.907, "ecdf": 0.89, "esf": 0.11}, {"trace": 0.981, "density": 3.198, "ecdf": 0.173, "esf": 0.827}, {"trace": 1.182, "density": 1.64, "ecdf": 0.908, "esf": 0.092}, {"trace": 0.999, "density": 3.947, "ecdf": 0.241, "esf": 0.759}, {"trace": 1.011, "density": 4.237, "ecdf": 0.29, "esf": 0.71}, {"trace": 0.946, "density": 2.059, "ecdf": 0.083, "esf": 0.917}, {"trace": 1.055, "density": 4.422, "ecdf": 0.486, "esf": 0.514}, {"trace": 0.946, "density": 2.079, "ecdf": 0.084, "esf": 0.916}, {"trace": 1.002, "density": 4.027, "ecdf": 0.251, "esf": 0.749}, {"trace": 0.963, "density": 2.602, "ecdf": 0.123, "esf": 0.877}, {"trace": 0.976, "density": 3.034, "ecdf": 0.161, "esf": 0.839}, {"trace": 1.171, "density": 1.954, "ecdf": 0.887, "esf": 0.113}, {"trace": 0.936, "density": 1.763, "ecdf": 0.065, "esf": 0.935}, {"trace": 1.277, "density": 0.335, "ecdf": 0.986, "esf": 0.014}, {"trace": 1.209, "density": 1.113, "ecdf": 0.944, "esf": 0.056}, {"trace": 1.026, "density": 4.385, "ecdf": 0.355, "esf": 0.645}, {"trace": 1.141, "density": 2.79, "ecdf": 0.815, "esf": 0.185}, {"trace": 1.086, "density": 4.1, "ecdf": 0.622, "esf": 0.378}, {"trace": 0.929, "density": 1.537, "ecdf": 0.05, "esf": 0.95}, {"trace": 1.1, "density": 3.88, "ecdf": 0.675, "esf": 0.325}, {"trace": 1.157, "density": 2.345, "ecdf": 0.859, "esf": 0.141}, {"trace": 1.187, "density": 1.532, "ecdf": 0.913, "esf": 0.087}, {"trace": 1.127, "density": 3.208, "ecdf": 0.775, "esf": 0.225}, {"trace": 1.139, "density": 2.862, "ecdf": 0.809, "esf": 0.191}, {"trace": 0.925, "density": 1.415, "ecdf": 0.045, "esf": 0.955}, {"trace": 1.13, "density": 3.129, "ecdf": 0.783, "esf": 0.217}, {"trace": 1.07, "density": 4.311, "ecdf": 0.552, "esf": 0.448}, {"trace": 1.15, "density": 2.542, "ecdf": 0.839, "esf": 0.161}, {"trace": 1.145, "density": 2.692, "ecdf": 0.826, "esf": 0.174}, {"trace": 1.117, "density": 3.488, "ecdf": 0.74, "esf": 0.26}, {"trace": 1.029, "density": 4.405, "ecdf": 0.37, "esf": 0.63}, {"trace": 1.052, "density": 4.435, "ecdf": 0.473, "esf": 0.527}, {"trace": 1.102, "density": 3.844, "ecdf": 0.683, "esf": 0.317}, {"trace": 1.034, "density": 4.427, "ecdf": 0.392, "esf": 0.608}, {"trace": 1.004, "density": 4.101, "ecdf": 0.262, "esf": 0.738}, {"trace": 0.972, "density": 2.905, "ecdf": 0.149, "esf": 0.851}, {"trace": 1.147, "density": 2.631, "ecdf": 0.831, "esf": 0.169}, {"trace": 1.022, "density": 4.359, "ecdf": 0.338, "esf": 0.662}, {"trace": 0.996, "density": 3.824, "ecdf": 0.225, "esf": 0.775}, {"trace": 0.994, "density": 3.724, "ecdf": 0.215, "esf": 0.785}, {"trace": 0.926, "density": 1.456, "ecdf": 0.047, "esf": 0.953}, {"trace": 1.072, "density": 4.29, "ecdf": 0.559, "esf": 0.441}, {"trace": 1.101, "density": 3.862, "ecdf": 0.68, "esf": 0.32}, {"trace": 1.028, "density": 4.396, "ecdf": 0.364, "esf": 0.637}, {"trace": 1.118, "density": 3.473, "ecdf": 0.742, "esf": 0.258}, {"trace": 0.987, "density": 3.436, "ecdf": 0.192, "esf": 0.808}, {"trace": 1.181, "density": 1.666, "ecdf": 0.906, "esf": 0.094}, {"trace": 0.981, "density": 3.213, "ecdf": 0.174, "esf": 0.826}, {"trace": 1.156, "density": 2.379, "ecdf": 0.856, "esf": 0.144}, {"trace": 1.048, "density": 4.445, "ecdf": 0.453, "esf": 0.547}, {"trace": 1.128, "density": 3.174, "ecdf": 0.779, "esf": 0.221}, {"trace": 1.068, "density": 4.33, "ecdf": 0.545, "esf": 0.455}, {"trace": 1.072, "density": 4.284, "ecdf": 0.561, "esf": 0.439}, {"trace": 1.096, "density": 3.948, "ecdf": 0.66, "esf": 0.34}, {"trace": 1.034, "density": 4.424, "ecdf": 0.387, "esf": 0.613}, {"trace": 1.124, "density": 3.304, "ecdf": 0.764, "esf": 0.236}, {"trace": 0.967, "density": 2.724, "ecdf": 0.134, "esf": 0.866}, {"trace": 1.081, "density": 4.169, "ecdf": 0.602, "esf": 0.398}, {"trace": 1.005, "density": 4.11, "ecdf": 0.263, "esf": 0.737}, {"trace": 1.065, "density": 4.357, "ecdf": 0.533, "esf": 0.467}, {"trace": 1.047, "density": 4.446, "ecdf": 0.449, "esf": 0.551}, {"trace": 1.079, "density": 4.201, "ecdf": 0.593, "esf": 0.407}, {"trace": 1.078, "density": 4.21, "ecdf": 0.588, "esf": 0.412}, {"trace": 1.222, "density": 0.874, "ecdf": 0.955, "esf": 0.045}, {"trace": 1.073, "density": 4.273, "ecdf": 0.566, "esf": 0.434}, {"trace": 1.111, "density": 3.64, "ecdf": 0.72, "esf": 0.28}, {"trace": 1.031, "density": 4.413, "ecdf": 0.376, "esf": 0.624}, {"trace": 1.151, "density": 2.512, "ecdf": 0.842, "esf": 0.158}, {"trace": 0.998, "density": 3.896, "ecdf": 0.234, "esf": 0.766}, {"trace": 0.957, "density": 2.42, "ecdf": 0.107, "esf": 0.893}, {"trace": 1.07, "density": 4.308, "ecdf": 0.553, "esf": 0.447}, {"trace": 1.082, "density": 4.162, "ecdf": 0.605, "esf": 0.395}, {"trace": 1.04, "density": 4.444, "ecdf": 0.421, "esf": 0.579}, {"trace": 1.109, "density": 3.695, "ecdf": 0.712, "esf": 0.288}, {"trace": 1.027, "density": 4.391, "ecdf": 0.361, "esf": 0.639}, {"trace": 0.973, "density": 2.935, "ecdf": 0.152, "esf": 0.848}, {"trace": 1.078, "density": 4.22, "ecdf": 0.585, "esf": 0.415}, {"trace": 1.045, "density": 4.448, "ecdf": 0.442, "esf": 0.558}, {"trace": 1.037, "density": 4.435, "ecdf": 0.403, "esf": 0.597}, {"trace": 1.04, "density": 4.444, "ecdf": 0.42, "esf": 0.58}, {"trace": 1.048, "density": 4.444, "ecdf": 0.457, "esf": 0.543}, {"trace": 1.01, "density": 4.222, "ecdf": 0.286, "esf": 0.714}, {"trace": 0.977, "density": 3.074, "ecdf": 0.164, "esf": 0.836}, {"trace": 1.114, "density": 3.58, "ecdf": 0.729, "esf": 0.271}, {"trace": 1.051, "density": 4.437, "ecdf": 0.47, "esf": 0.53}, {"trace": 1.063, "density": 4.374, "ecdf": 0.522, "esf": 0.478}, {"trace": 1.042, "density": 4.446, "ecdf": 0.427, "esf": 0.573}, {"trace": 0.975, "density": 2.99, "ecdf": 0.157, "esf": 0.843}, {"trace": 0.989, "density": 3.519, "ecdf": 0.197, "esf": 0.803}, {"trace": 1.012, "density": 4.256, "ecdf": 0.294, "esf": 0.706}, {"trace": 1.074, "density": 4.266, "ecdf": 0.568, "esf": 0.432}, {"trace": 0.954, "density": 2.309, "ecdf": 0.1, "esf": 0.9}, {"trace": 0.931, "density": 1.624, "ecdf": 0.055, "esf": 0.945}, {"trace": 1.124, "density": 3.3, "ecdf": 0.764, "esf": 0.236}, {"trace": 1.091, "density": 4.021, "ecdf": 0.64, "esf": 0.36}, {"trace": 0.924, "density": 1.385, "ecdf": 0.044, "esf": 0.956}, {"trace": 1.254, "density": 0.51, "ecdf": 0.976, "esf": 0.024}, {"trace": 0.924, "density": 1.39, "ecdf": 0.044, "esf": 0.956}, {"trace": 1.117, "density": 3.509, "ecdf": 0.738, "esf": 0.262}, {"trace": 1.115, "density": 3.552, "ecdf": 0.732, "esf": 0.268}, {"trace": 0.995, "density": 3.784, "ecdf": 0.219, "esf": 0.781}, {"trace": 1.115, "density": 3.548, "ecdf": 0.733, "esf": 0.267}, {"trace": 1.032, "density": 4.419, "ecdf": 0.382, "esf": 0.618}, {"trace": 1.177, "density": 1.784, "ecdf": 0.898, "esf": 0.102}, {"trace": 1.306, "density": 0.18, "ecdf": 0.992, "esf": 0.008}, {"trace": 1.099, "density": 3.904, "ecdf": 0.67, "esf": 0.33}, {"trace": 1.079, "density": 4.203, "ecdf": 0.591, "esf": 0.409}, {"trace": 1.093, "density": 3.992, "ecdf": 0.649, "esf": 0.351}, {"trace": 1.091, "density": 4.028, "ecdf": 0.638, "esf": 0.362}, {"trace": 1.011, "density": 4.238, "ecdf": 0.29, "esf": 0.71}, {"trace": 1.03, "density": 4.406, "ecdf": 0.371, "esf": 0.629}, {"trace": 1.054, "density": 4.425, "ecdf": 0.482, "esf": 0.518}, {"trace": 1.119, "density": 3.439, "ecdf": 0.747, "esf": 0.253}, {"trace": 1.143, "density": 2.731, "ecdf": 0.821, "esf": 0.179}, {"trace": 1.125, "density": 3.267, "ecdf": 0.769, "esf": 0.231}, {"trace": 1.009, "density": 4.203, "ecdf": 0.282, "esf": 0.718}, {"trace": 1.131, "density": 3.081, "ecdf": 0.788, "esf": 0.212}, {"trace": 1.063, "density": 4.376, "ecdf": 0.52, "esf": 0.48}, {"trace": 0.966, "density": 2.708, "ecdf": 0.133, "esf": 0.867}, {"trace": 0.995, "density": 3.797, "ecdf": 0.22, "esf": 0.78}, {"trace": 1.105, "density": 3.792, "ecdf": 0.696, "esf": 0.304}, {"trace": 0.986, "density": 3.408, "ecdf": 0.189, "esf": 0.811}, {"trace": 1.114, "density": 3.582, "ecdf": 0.728, "esf": 0.272}, {"trace": 1.189, "density": 1.486, "ecdf": 0.916, "esf": 0.084}, {"trace": 1.053, "density": 4.432, "ecdf": 0.477, "esf": 0.523}, {"trace": 1.23, "density": 0.747, "ecdf": 0.961, "esf": 0.039}, {"trace": 1.062, "density": 4.385, "ecdf": 0.514, "esf": 0.486}, {"trace": 1.164, "density": 2.163, "ecdf": 0.873, "esf": 0.127}, {"trace": 0.989, "density": 3.536, "ecdf": 0.199, "esf": 0.801}, {"trace": 1.12, "density": 3.413, "ecdf": 0.751, "esf": 0.249}, {"trace": 0.966, "density": 2.689, "ecdf": 0.131, "esf": 0.869}, {"trace": 1.011, "density": 4.246, "ecdf": 0.292, "esf": 0.708}, {"trace": 1.0, "density": 3.956, "ecdf": 0.242, "esf": 0.758}, {"trace": 1.136, "density": 2.946, "ecdf": 0.801, "esf": 0.199}, {"trace": 1.158, "density": 2.319, "ecdf": 0.861, "esf": 0.139}, {"trace": 0.921, "density": 1.283, "ecdf": 0.04, "esf": 0.96}, {"trace": 0.967, "density": 2.735, "ecdf": 0.136, "esf": 0.864}, {"trace": 0.991, "density": 3.625, "ecdf": 0.206, "esf": 0.794}, {"trace": 1.062, "density": 4.385, "ecdf": 0.514, "esf": 0.486}, {"trace": 1.059, "density": 4.401, "ecdf": 0.503, "esf": 0.497}, {"trace": 1.066, "density": 4.347, "ecdf": 0.537, "esf": 0.463}, {"trace": 0.984, "density": 3.324, "ecdf": 0.182, "esf": 0.818}, {"trace": 1.17, "density": 1.978, "ecdf": 0.885, "esf": 0.115}, {"trace": 1.05, "density": 4.441, "ecdf": 0.464, "esf": 0.536}, {"trace": 1.082, "density": 4.16, "ecdf": 0.606, "esf": 0.394}, {"trace": 1.191, "density": 1.456, "ecdf": 0.918, "esf": 0.082}, {"trace": 1.164, "density": 2.148, "ecdf": 0.874, "esf": 0.126}, {"trace": 1.069, "density": 4.319, "ecdf": 0.55, "esf": 0.45}, {"trace": 0.994, "density": 3.758, "ecdf": 0.217, "esf": 0.783}, {"trace": 1.109, "density": 3.707, "ecdf": 0.71, "esf": 0.29}, {"trace": 1.251, "density": 0.532, "ecdf": 0.975, "esf": 0.025}, {"trace": 1.138, "density": 2.894, "ecdf": 0.806, "esf": 0.194}, {"trace": 1.16, "density": 2.264, "ecdf": 0.864, "esf": 0.135}, {"trace": 1.188, "density": 1.516, "ecdf": 0.915, "esf": 0.085}, {"trace": 1.065, "density": 4.358, "ecdf": 0.532, "esf": 0.468}, {"trace": 0.982, "density": 3.234, "ecdf": 0.176, "esf": 0.824}, {"trace": 1.165, "density": 2.124, "ecdf": 0.875, "esf": 0.125}, {"trace": 1.037, "density": 4.437, "ecdf": 0.407, "esf": 0.593}, {"trace": 0.956, "density": 2.361, "ecdf": 0.104, "esf": 0.896}, {"trace": 1.035, "density": 4.431, "ecdf": 0.397, "esf": 0.603}, {"trace": 1.123, "density": 3.318, "ecdf": 0.762, "esf": 0.238}, {"trace": 1.134, "density": 3.002, "ecdf": 0.794, "esf": 0.206}, {"trace": 1.025, "density": 4.382, "ecdf": 0.353, "esf": 0.647}, {"trace": 1.017, "density": 4.317, "ecdf": 0.317, "esf": 0.683}, {"trace": 1.057, "density": 4.412, "ecdf": 0.495, "esf": 0.505}, {"trace": 1.063, "density": 4.376, "ecdf": 0.521, "esf": 0.479}, {"trace": 0.968, "density": 2.758, "ecdf": 0.137, "esf": 0.863}, {"trace": 1.064, "density": 4.363, "ecdf": 0.529, "esf": 0.471}, {"trace": 0.96, "density": 2.512, "ecdf": 0.115, "esf": 0.885}, {"trace": 1.035, "density": 4.43, "ecdf": 0.395, "esf": 0.605}, {"trace": 0.975, "density": 2.975, "ecdf": 0.156, "esf": 0.844}, {"trace": 1.114, "density": 3.574, "ecdf": 0.73, "esf": 0.27}, {"trace": 1.127, "density": 3.217, "ecdf": 0.774, "esf": 0.226}, {"trace": 1.157, "density": 2.363, "ecdf": 0.857, "esf": 0.143}, {"trace": 1.093, "density": 3.999, "ecdf": 0.647, "esf": 0.353}, {"trace": 1.01, "density": 4.229, "ecdf": 0.288, "esf": 0.712}, {"trace": 1.095, "density": 3.969, "ecdf": 0.654, "esf": 0.346}, {"trace": 1.003, "density": 4.046, "ecdf": 0.253, "esf": 0.747}, {"trace": 1.0, "density": 3.969, "ecdf": 0.243, "esf": 0.757}, {"trace": 1.04, "density": 4.444, "ecdf": 0.421, "esf": 0.579}, {"trace": 1.103, "density": 3.815, "ecdf": 0.691, "esf": 0.309}, {"trace": 1.039, "density": 4.442, "ecdf": 0.417, "esf": 0.583}, {"trace": 1.082, "density": 4.164, "ecdf": 0.604, "esf": 0.396}, {"trace": 0.963, "density": 2.598, "ecdf": 0.122, "esf": 0.878}, {"trace": 1.004, "density": 4.084, "ecdf": 0.258, "esf": 0.742}, {"trace": 1.203, "density": 1.226, "ecdf": 0.937, "esf": 0.063}, {"trace": 0.924, "density": 1.383, "ecdf": 0.044, "esf": 0.956}, {"trace": 1.237, "density": 0.671, "ecdf": 0.966, "esf": 0.034}, {"trace": 1.262, "density": 0.448, "ecdf": 0.979, "esf": 0.021}, {"trace": 1.283, "density": 0.293, "ecdf": 0.987, "esf": 0.013}, {"trace": 0.795, "density": 0.019, "ecdf": 0.0, "esf": 1.0}, {"trace": 1.195, "density": 1.387, "ecdf": 0.924, "esf": 0.076}, {"trace": 0.993, "density": 3.703, "ecdf": 0.213, "esf": 0.787}, {"trace": 0.939, "density": 1.842, "ecdf": 0.071, "esf": 0.929}, {"trace": 0.992, "density": 3.653, "ecdf": 0.209, "esf": 0.791}, {"trace": 1.139, "density": 2.851, "ecdf": 0.81, "esf": 0.19}, {"trace": 1.239, "density": 0.65, "ecdf": 0.967, "esf": 0.033}, {"trace": 1.058, "density": 4.41, "ecdf": 0.497, "esf": 0.503}, {"trace": 1.329, "density": 0.108, "ecdf": 0.995, "esf": 0.005}, {"trace": 1.188, "density": 1.508, "ecdf": 0.916, "esf": 0.084}, {"trace": 0.952, "density": 2.245, "ecdf": 0.096, "esf": 0.904}, {"trace": 1.153, "density": 2.452, "ecdf": 0.848, "esf": 0.152}, {"trace": 1.011, "density": 4.241, "ecdf": 0.291, "esf": 0.709}, {"trace": 1.102, "density": 3.834, "ecdf": 0.687, "esf": 0.313}, {"trace": 0.977, "density": 3.073, "ecdf": 0.164, "esf": 0.836}, {"trace": 1.115, "density": 3.539, "ecdf": 0.735, "esf": 0.265}, {"trace": 1.096, "density": 3.946, "ecdf": 0.661, "esf": 0.339}, {"trace": 1.035, "density": 4.43, "ecdf": 0.396, "esf": 0.604}, {"trace": 1.052, "density": 4.436, "ecdf": 0.472, "esf": 0.528}, {"trace": 1.119, "density": 3.446, "ecdf": 0.746, "esf": 0.254}, {"trace": 1.076, "density": 4.238, "ecdf": 0.577, "esf": 0.423}, {"trace": 1.068, "density": 4.331, "ecdf": 0.545, "esf": 0.455}, {"trace": 1.073, "density": 4.282, "ecdf": 0.562, "esf": 0.438}, {"trace": 1.081, "density": 4.17, "ecdf": 0.602, "esf": 0.398}, {"trace": 1.109, "density": 3.707, "ecdf": 0.71, "esf": 0.29}, {"trace": 1.136, "density": 2.931, "ecdf": 0.802, "esf": 0.198}, {"trace": 1.014, "density": 4.279, "ecdf": 0.303, "esf": 0.697}, {"trace": 1.036, "density": 4.434, "ecdf": 0.402, "esf": 0.598}, {"trace": 1.172, "density": 1.929, "ecdf": 0.889, "esf": 0.111}, {"trace": 0.992, "density": 3.665, "ecdf": 0.21, "esf": 0.79}, {"trace": 1.073, "density": 4.277, "ecdf": 0.564, "esf": 0.436}, {"trace": 1.088, "density": 4.079, "ecdf": 0.627, "esf": 0.373}, {"trace": 1.068, "density": 4.329, "ecdf": 0.546, "esf": 0.454}, {"trace": 1.027, "density": 4.393, "ecdf": 0.362, "esf": 0.638}, {"trace": 1.06, "density": 4.394, "ecdf": 0.508, "esf": 0.492}, {"trace": 1.064, "density": 4.368, "ecdf": 0.525, "esf": 0.475}, {"trace": 1.005, "density": 4.114, "ecdf": 0.264, "esf": 0.736}, {"trace": 1.129, "density": 3.156, "ecdf": 0.781, "esf": 0.219}, {"trace": 0.998, "density": 3.913, "ecdf": 0.236, "esf": 0.764}, {"trace": 1.014, "density": 4.282, "ecdf": 0.304, "esf": 0.696}, {"trace": 1.147, "density": 2.643, "ecdf": 0.83, "esf": 0.17}, {"trace": 1.03, "density": 4.409, "ecdf": 0.373, "esf": 0.627}, {"trace": 1.057, "density": 4.414, "ecdf": 0.493, "esf": 0.507}, {"trace": 1.121, "density": 3.373, "ecdf": 0.756, "esf": 0.244}, {"trace": 1.031, "density": 4.413, "ecdf": 0.376, "esf": 0.624}, {"trace": 1.126, "density": 3.248, "ecdf": 0.77, "esf": 0.23}, {"trace": 1.153, "density": 2.453, "ecdf": 0.847, "esf": 0.153}, {"trace": 1.051, "density": 4.439, "ecdf": 0.466, "esf": 0.534}, {"trace": 1.16, "density": 2.264, "ecdf": 0.865, "esf": 0.135}, {"trace": 1.007, "density": 4.159, "ecdf": 0.273, "esf": 0.727}, {"trace": 1.143, "density": 2.744, "ecdf": 0.82, "esf": 0.18}, {"trace": 1.108, "density": 3.714, "ecdf": 0.708, "esf": 0.292}, {"trace": 1.158, "density": 2.324, "ecdf": 0.86, "esf": 0.14}, {"trace": 0.913, "density": 1.018, "ecdf": 0.032, "esf": 0.968}, {"trace": 1.126, "density": 3.237, "ecdf": 0.771, "esf": 0.229}, {"trace": 0.991, "density": 3.605, "ecdf": 0.204, "esf": 0.796}, {"trace": 1.096, "density": 3.943, "ecdf": 0.662, "esf": 0.338}, {"trace": 1.035, "density": 4.429, "ecdf": 0.395, "esf": 0.605}, {"trace": 1.009, "density": 4.21, "ecdf": 0.283, "esf": 0.717}, {"trace": 1.127, "density": 3.213, "ecdf": 0.774, "esf": 0.226}, {"trace": 1.099, "density": 3.898, "ecdf": 0.671, "esf": 0.329}, {"trace": 1.136, "density": 2.931, "ecdf": 0.802, "esf": 0.198}, {"trace": 1.026, "density": 4.386, "ecdf": 0.356, "esf": 0.644}, {"trace": 0.915, "density": 1.093, "ecdf": 0.034, "esf": 0.966}, {"trace": 1.008, "density": 4.174, "ecdf": 0.277, "esf": 0.723}, {"trace": 0.907, "density": 0.873, "ecdf": 0.029, "esf": 0.971}, {"trace": 0.949, "density": 2.163, "ecdf": 0.089, "esf": 0.911}, {"trace": 1.101, "density": 3.856, "ecdf": 0.681, "esf": 0.319}, {"trace": 1.073, "density": 4.278, "ecdf": 0.563, "esf": 0.437}, {"trace": 1.162, "density": 2.212, "ecdf": 0.869, "esf": 0.131}, {"trace": 1.075, "density": 4.257, "ecdf": 0.572, "esf": 0.428}, {"trace": 1.118, "density": 3.48, "ecdf": 0.741, "esf": 0.259}, {"trace": 1.177, "density": 1.787, "ecdf": 0.898, "esf": 0.102}, {"trace": 1.282, "density": 0.297, "ecdf": 0.987, "esf": 0.013}, {"trace": 1.021, "density": 4.352, "ecdf": 0.333, "esf": 0.667}, {"trace": 1.169, "density": 2.007, "ecdf": 0.882, "esf": 0.118}, {"trace": 1.212, "density": 1.053, "ecdf": 0.947, "esf": 0.053}, {"trace": 1.081, "density": 4.174, "ecdf": 0.601, "esf": 0.399}, {"trace": 1.037, "density": 4.437, "ecdf": 0.406, "esf": 0.594}, {"trace": 1.043, "density": 4.447, "ecdf": 0.432, "esf": 0.568}, {"trace": 1.119, "density": 3.429, "ecdf": 0.748, "esf": 0.252}, {"trace": 1.072, "density": 4.291, "ecdf": 0.558, "esf": 0.442}, {"trace": 1.099, "density": 3.897, "ecdf": 0.672, "esf": 0.328}, {"trace": 1.163, "density": 2.166, "ecdf": 0.872, "esf": 0.128}, {"trace": 1.062, "density": 4.379, "ecdf": 0.518, "esf": 0.482}, {"trace": 1.097, "density": 3.926, "ecdf": 0.666, "esf": 0.334}, {"trace": 1.062, "density": 4.381, "ecdf": 0.517, "esf": 0.483}, {"trace": 1.078, "density": 4.222, "ecdf": 0.584, "esf": 0.416}, {"trace": 1.079, "density": 4.201, "ecdf": 0.593, "esf": 0.407}, {"trace": 1.024, "density": 4.375, "ecdf": 0.348, "esf": 0.652}, {"trace": 1.079, "density": 4.198, "ecdf": 0.594, "esf": 0.406}, {"trace": 0.994, "density": 3.73, "ecdf": 0.215, "esf": 0.785}, {"trace": 1.029, "density": 4.402, "ecdf": 0.368, "esf": 0.633}, {"trace": 1.021, "density": 4.351, "ecdf": 0.333, "esf": 0.667}, {"trace": 1.092, "density": 4.017, "ecdf": 0.641, "esf": 0.359}, {"trace": 1.135, "density": 2.978, "ecdf": 0.798, "esf": 0.202}, {"trace": 1.093, "density": 3.99, "ecdf": 0.649, "esf": 0.351}, {"trace": 1.037, "density": 4.435, "ecdf": 0.403, "esf": 0.596}, {"trace": 1.055, "density": 4.424, "ecdf": 0.484, "esf": 0.516}, {"trace": 0.991, "density": 3.633, "ecdf": 0.208, "esf": 0.792}, {"trace": 0.988, "density": 3.475, "ecdf": 0.194, "esf": 0.806}, {"trace": 1.142, "density": 2.759, "ecdf": 0.818, "esf": 0.182}, {"trace": 1.142, "density": 2.757, "ecdf": 0.818, "esf": 0.182}, {"trace": 1.157, "density": 2.349, "ecdf": 0.858, "esf": 0.142}, {"trace": 1.05, "density": 4.441, "ecdf": 0.462, "esf": 0.538}, {"trace": 1.05, "density": 4.44, "ecdf": 0.465, "esf": 0.535}, {"trace": 1.111, "density": 3.647, "ecdf": 0.719, "esf": 0.281}, {"trace": 1.048, "density": 4.445, "ecdf": 0.452, "esf": 0.548}, {"trace": 0.963, "density": 2.599, "ecdf": 0.123, "esf": 0.877}, {"trace": 1.196, "density": 1.36, "ecdf": 0.925, "esf": 0.075}, {"trace": 0.972, "density": 2.881, "ecdf": 0.148, "esf": 0.852}, {"trace": 1.116, "density": 3.518, "ecdf": 0.736, "esf": 0.263}, {"trace": 1.013, "density": 4.265, "ecdf": 0.296, "esf": 0.704}, {"trace": 0.998, "density": 3.899, "ecdf": 0.234, "esf": 0.766}, {"trace": 0.936, "density": 1.758, "ecdf": 0.064, "esf": 0.936}, {"trace": 0.936, "density": 1.781, "ecdf": 0.067, "esf": 0.933}, {"trace": 0.921, "density": 1.286, "ecdf": 0.04, "esf": 0.96}, {"trace": 1.035, "density": 4.429, "ecdf": 0.394, "esf": 0.606}, {"trace": 1.024, "density": 4.372, "ecdf": 0.346, "esf": 0.654}, {"trace": 1.037, "density": 4.436, "ecdf": 0.404, "esf": 0.596}, {"trace": 1.132, "density": 3.07, "ecdf": 0.789, "esf": 0.211}, {"trace": 1.109, "density": 3.686, "ecdf": 0.713, "esf": 0.287}, {"trace": 1.051, "density": 4.438, "ecdf": 0.469, "esf": 0.531}, {"trace": 1.157, "density": 2.341, "ecdf": 0.859, "esf": 0.141}, {"trace": 1.003, "density": 4.048, "ecdf": 0.253, "esf": 0.747}, {"trace": 0.961, "density": 2.534, "ecdf": 0.117, "esf": 0.883}, {"trace": 0.994, "density": 3.754, "ecdf": 0.216, "esf": 0.784}, {"trace": 1.045, "density": 4.448, "ecdf": 0.439, "esf": 0.561}, {"trace": 1.2, "density": 1.294, "ecdf": 0.931, "esf": 0.069}, {"trace": 0.881, "density": 0.457, "ecdf": 0.012, "esf": 0.988}, {"trace": 0.96, "density": 2.507, "ecdf": 0.114, "esf": 0.886}, {"trace": 1.111, "density": 3.659, "ecdf": 0.717, "esf": 0.283}, {"trace": 0.966, "density": 2.708, "ecdf": 0.133, "esf": 0.867}, {"trace": 1.057, "density": 4.416, "ecdf": 0.491, "esf": 0.509}, {"trace": 1.032, "density": 4.419, "ecdf": 0.381, "esf": 0.619}, {"trace": 1.005, "density": 4.112, "ecdf": 0.264, "esf": 0.736}, {"trace": 0.967, "density": 2.727, "ecdf": 0.135, "esf": 0.865}, {"trace": 1.119, "density": 3.432, "ecdf": 0.748, "esf": 0.252}, {"trace": 0.958, "density": 2.452, "ecdf": 0.11, "esf": 0.89}, {"trace": 0.991, "density": 3.626, "ecdf": 0.207, "esf": 0.793}, {"trace": 1.112, "density": 3.629, "ecdf": 0.722, "esf": 0.278}, {"trace": 1.027, "density": 4.391, "ecdf": 0.36, "esf": 0.64}, {"trace": 1.004, "density": 4.087, "ecdf": 0.259, "esf": 0.741}, {"trace": 1.093, "density": 4.0, "ecdf": 0.647, "esf": 0.353}, {"trace": 1.015, "density": 4.301, "ecdf": 0.31, "esf": 0.69}, {"trace": 1.014, "density": 4.291, "ecdf": 0.307, "esf": 0.693}, {"trace": 1.032, "density": 4.416, "ecdf": 0.38, "esf": 0.62}, {"trace": 1.154, "density": 2.445, "ecdf": 0.848, "esf": 0.152}, {"trace": 0.904, "density": 0.804, "ecdf": 0.026, "esf": 0.974}, {"trace": 1.224, "density": 0.836, "ecdf": 0.957, "esf": 0.043}, {"trace": 1.101, "density": 3.869, "ecdf": 0.678, "esf": 0.322}, {"trace": 1.109, "density": 3.705, "ecdf": 0.71, "esf": 0.29}, {"trace": 1.116, "density": 3.513, "ecdf": 0.737, "esf": 0.263}, {"trace": 1.063, "density": 4.378, "ecdf": 0.519, "esf": 0.481}, {"trace": 1.079, "density": 4.202, "ecdf": 0.592, "esf": 0.408}, {"trace": 1.039, "density": 4.442, "ecdf": 0.416, "esf": 0.584}, {"trace": 1.057, "density": 4.412, "ecdf": 0.496, "esf": 0.504}, {"trace": 1.202, "density": 1.245, "ecdf": 0.935, "esf": 0.065}, {"trace": 1.053, "density": 4.431, "ecdf": 0.478, "esf": 0.522}, {"trace": 1.136, "density": 2.938, "ecdf": 0.801, "esf": 0.199}, {"trace": 0.912, "density": 0.995, "ecdf": 0.031, "esf": 0.969}, {"trace": 1.091, "density": 4.034, "ecdf": 0.637, "esf": 0.363}, {"trace": 1.001, "density": 3.99, "ecdf": 0.246, "esf": 0.754}, {"trace": 0.97, "density": 2.825, "ecdf": 0.143, "esf": 0.857}, {"trace": 0.921, "density": 1.293, "ecdf": 0.04, "esf": 0.96}, {"trace": 0.882, "density": 0.466, "ecdf": 0.012, "esf": 0.988}, {"trace": 1.155, "density": 2.414, "ecdf": 0.852, "esf": 0.148}, {"trace": 0.883, "density": 0.471, "ecdf": 0.013, "esf": 0.987}, {"trace": 1.302, "density": 0.195, "ecdf": 0.992, "esf": 0.008}, {"trace": 1.199, "density": 1.304, "ecdf": 0.93, "esf": 0.07}, {"trace": 0.922, "density": 1.318, "ecdf": 0.041, "esf": 0.959}, {"trace": 0.986, "density": 3.422, "ecdf": 0.191, "esf": 0.809}, {"trace": 1.096, "density": 3.956, "ecdf": 0.658, "esf": 0.342}, {"trace": 1.082, "density": 4.166, "ecdf": 0.603, "esf": 0.397}, {"trace": 1.02, "density": 4.346, "ecdf": 0.33, "esf": 0.67}, {"trace": 1.029, "density": 4.404, "ecdf": 0.369, "esf": 0.631}, {"trace": 1.127, "density": 3.22, "ecdf": 0.773, "esf": 0.227}, {"trace": 1.119, "density": 3.437, "ecdf": 0.747, "esf": 0.253}, {"trace": 1.182, "density": 1.656, "ecdf": 0.907, "esf": 0.093}, {"trace": 1.061, "density": 4.392, "ecdf": 0.509, "esf": 0.491}, {"trace": 1.013, "density": 4.277, "ecdf": 0.302, "esf": 0.698}, {"trace": 1.023, "density": 4.368, "ecdf": 0.344, "esf": 0.656}, {"trace": 1.278, "density": 0.326, "ecdf": 0.986, "esf": 0.014}, {"trace": 1.1, "density": 3.875, "ecdf": 0.676, "esf": 0.324}, {"trace": 1.026, "density": 4.389, "ecdf": 0.358, "esf": 0.642}, {"trace": 1.127, "density": 3.214, "ecdf": 0.774, "esf": 0.226}, {"trace": 1.055, "density": 4.421, "ecdf": 0.486, "esf": 0.514}, {"trace": 1.123, "density": 3.314, "ecdf": 0.763, "esf": 0.237}, {"trace": 1.011, "density": 4.24, "ecdf": 0.291, "esf": 0.709}, {"trace": 1.099, "density": 3.899, "ecdf": 0.671, "esf": 0.329}, {"trace": 1.089, "density": 4.055, "ecdf": 0.632, "esf": 0.368}, {"trace": 1.066, "density": 4.349, "ecdf": 0.536, "esf": 0.464}, {"trace": 1.137, "density": 2.912, "ecdf": 0.804, "esf": 0.196}, {"trace": 0.988, "density": 3.488, "ecdf": 0.195, "esf": 0.805}, {"trace": 0.989, "density": 3.522, "ecdf": 0.198, "esf": 0.802}, {"trace": 0.958, "density": 2.44, "ecdf": 0.109, "esf": 0.891}, {"trace": 1.056, "density": 4.419, "ecdf": 0.488, "esf": 0.512}, {"trace": 1.073, "density": 4.281, "ecdf": 0.562, "esf": 0.438}, {"trace": 0.978, "density": 3.083, "ecdf": 0.165, "esf": 0.835}, {"trace": 0.954, "density": 2.316, "ecdf": 0.1, "esf": 0.9}, {"trace": 1.152, "density": 2.507, "ecdf": 0.842, "esf": 0.158}, {"trace": 1.152, "density": 2.506, "ecdf": 0.842, "esf": 0.157}, {"trace": 0.949, "density": 2.167, "ecdf": 0.089, "esf": 0.911}, {"trace": 1.013, "density": 4.269, "ecdf": 0.299, "esf": 0.701}, {"trace": 1.013, "density": 4.275, "ecdf": 0.302, "esf": 0.698}, {"trace": 1.072, "density": 4.293, "ecdf": 0.558, "esf": 0.442}, {"trace": 1.07, "density": 4.315, "ecdf": 0.551, "esf": 0.449}, {"trace": 1.122, "density": 3.344, "ecdf": 0.76, "esf": 0.24}, {"trace": 0.987, "density": 3.441, "ecdf": 0.192, "esf": 0.808}, {"trace": 1.153, "density": 2.461, "ecdf": 0.847, "esf": 0.153}, {"trace": 1.197, "density": 1.34, "ecdf": 0.927, "esf": 0.073}, {"trace": 1.179, "density": 1.713, "ecdf": 0.903, "esf": 0.097}, {"trace": 1.025, "density": 4.381, "ecdf": 0.352, "esf": 0.648}, {"trace": 0.959, "density": 2.464, "ecdf": 0.112, "esf": 0.888}, {"trace": 1.049, "density": 4.443, "ecdf": 0.459, "esf": 0.541}, {"trace": 0.984, "density": 3.325, "ecdf": 0.182, "esf": 0.818}, {"trace": 0.87, "density": 0.334, "ecdf": 0.008, "esf": 0.992}, {"trace": 1.226, "density": 0.813, "ecdf": 0.959, "esf": 0.041}, {"trace": 1.095, "density": 3.972, "ecdf": 0.653, "esf": 0.347}, {"trace": 1.066, "density": 4.352, "ecdf": 0.535, "esf": 0.465}, {"trace": 1.134, "density": 3.009, "ecdf": 0.794, "esf": 0.206}, {"trace": 1.1, "density": 3.875, "ecdf": 0.677, "esf": 0.323}, {"trace": 1.009, "density": 4.214, "ecdf": 0.284, "esf": 0.716}, {"trace": 1.213, "density": 1.037, "ecdf": 0.948, "esf": 0.052}, {"trace": 1.222, "density": 0.87, "ecdf": 0.955, "esf": 0.045}, {"trace": 0.882, "density": 0.464, "ecdf": 0.012, "esf": 0.988}, {"trace": 0.871, "density": 0.35, "ecdf": 0.009, "esf": 0.991}, {"trace": 0.967, "density": 2.719, "ecdf": 0.134, "esf": 0.866}, {"trace": 0.914, "density": 1.055, "ecdf": 0.033, "esf": 0.967}, {"trace": 0.971, "density": 2.865, "ecdf": 0.147, "esf": 0.853}, {"trace": 0.986, "density": 3.427, "ecdf": 0.191, "esf": 0.809}, {"trace": 1.077, "density": 4.225, "ecdf": 0.582, "esf": 0.418}, {"trace": 0.949, "density": 2.168, "ecdf": 0.089, "esf": 0.911}, {"trace": 1.043, "density": 4.447, "ecdf": 0.434, "esf": 0.566}, {"trace": 0.986, "density": 3.424, "ecdf": 0.191, "esf": 0.809}, {"trace": 1.11, "density": 3.677, "ecdf": 0.715, "esf": 0.285}, {"trace": 0.997, "density": 3.876, "ecdf": 0.232, "esf": 0.768}, {"trace": 1.049, "density": 4.444, "ecdf": 0.457, "esf": 0.543}, {"trace": 1.042, "density": 4.447, "ecdf": 0.428, "esf": 0.572}, {"trace": 1.111, "density": 3.652, "ecdf": 0.718, "esf": 0.282}, {"trace": 1.074, "density": 4.27, "ecdf": 0.566, "esf": 0.434}, {"trace": 1.037, "density": 4.435, "ecdf": 0.403, "esf": 0.597}, {"trace": 0.963, "density": 2.596, "ecdf": 0.122, "esf": 0.878}, {"trace": 1.114, "density": 3.568, "ecdf": 0.73, "esf": 0.27}, {"trace": 0.983, "density": 3.295, "ecdf": 0.18, "esf": 0.82}, {"trace": 0.939, "density": 1.846, "ecdf": 0.072, "esf": 0.928}, {"trace": 1.103, "density": 3.82, "ecdf": 0.69, "esf": 0.31}, {"trace": 1.237, "density": 0.67, "ecdf": 0.966, "esf": 0.034}, {"trace": 1.202, "density": 1.252, "ecdf": 0.935, "esf": 0.065}, {"trace": 1.082, "density": 4.161, "ecdf": 0.605, "esf": 0.395}, {"trace": 1.071, "density": 4.301, "ecdf": 0.555, "esf": 0.445}, {"trace": 1.121, "density": 3.384, "ecdf": 0.754, "esf": 0.246}, {"trace": 1.01, "density": 4.227, "ecdf": 0.287, "esf": 0.713}, {"trace": 0.913, "density": 1.024, "ecdf": 0.032, "esf": 0.968}, {"trace": 1.171, "density": 1.95, "ecdf": 0.887, "esf": 0.113}, {"trace": 1.024, "density": 4.375, "ecdf": 0.349, "esf": 0.651}, {"trace": 1.132, "density": 3.06, "ecdf": 0.79, "esf": 0.21}, {"trace": 1.036, "density": 4.433, "ecdf": 0.4, "esf": 0.6}, {"trace": 1.014, "density": 4.279, "ecdf": 0.303, "esf": 0.697}, {"trace": 1.071, "density": 4.296, "ecdf": 0.557, "esf": 0.443}, {"trace": 1.096, "density": 3.957, "ecdf": 0.657, "esf": 0.343}, {"trace": 0.996, "density": 3.836, "ecdf": 0.227, "esf": 0.773}, {"trace": 1.119, "density": 3.437, "ecdf": 0.747, "esf": 0.253}, {"trace": 1.11, "density": 3.679, "ecdf": 0.714, "esf": 0.286}, {"trace": 1.149, "density": 2.566, "ecdf": 0.838, "esf": 0.162}, {"trace": 1.149, "density": 2.586, "ecdf": 0.836, "esf": 0.164}, {"trace": 1.004, "density": 4.089, "ecdf": 0.259, "esf": 0.741}, {"trace": 0.938, "density": 1.835, "ecdf": 0.071, "esf": 0.929}, {"trace": 1.097, "density": 3.933, "ecdf": 0.664, "esf": 0.336}, {"trace": 1.312, "density": 0.157, "ecdf": 0.993, "esf": 0.007}, {"trace": 0.929, "density": 1.53, "ecdf": 0.05, "esf": 0.95}, {"trace": 0.966, "density": 2.704, "ecdf": 0.133, "esf": 0.867}, {"trace": 1.019, "density": 4.337, "ecdf": 0.325, "esf": 0.675}, {"trace": 1.049, "density": 4.443, "ecdf": 0.458, "esf": 0.542}, {"trace": 1.207, "density": 1.144, "ecdf": 0.942, "esf": 0.058}, {"trace": 1.009, "density": 4.208, "ecdf": 0.283, "esf": 0.717}, {"trace": 1.118, "density": 3.467, "ecdf": 0.743, "esf": 0.257}, {"trace": 1.062, "density": 4.379, "ecdf": 0.518, "esf": 0.482}, {"trace": 1.054, "density": 4.426, "ecdf": 0.481, "esf": 0.519}, {"trace": 1.015, "density": 4.295, "ecdf": 0.309, "esf": 0.691}, {"trace": 1.006, "density": 4.15, "ecdf": 0.271, "esf": 0.729}, {"trace": 0.913, "density": 1.02, "ecdf": 0.032, "esf": 0.968}, {"trace": 0.864, "density": 0.282, "ecdf": 0.006, "esf": 0.994}, {"trace": 1.082, "density": 4.166, "ecdf": 0.603, "esf": 0.397}, {"trace": 1.128, "density": 3.19, "ecdf": 0.777, "esf": 0.223}, {"trace": 0.949, "density": 2.144, "ecdf": 0.087, "esf": 0.913}, {"trace": 1.165, "density": 2.129, "ecdf": 0.875, "esf": 0.125}, {"trace": 1.034, "density": 4.427, "ecdf": 0.391, "esf": 0.609}, {"trace": 0.929, "density": 1.545, "ecdf": 0.051, "esf": 0.949}, {"trace": 0.932, "density": 1.655, "ecdf": 0.058, "esf": 0.942}, {"trace": 1.037, "density": 4.437, "ecdf": 0.407, "esf": 0.593}, {"trace": 1.039, "density": 4.442, "ecdf": 0.417, "esf": 0.583}, {"trace": 1.124, "density": 3.298, "ecdf": 0.764, "esf": 0.236}, {"trace": 1.049, "density": 4.442, "ecdf": 0.46, "esf": 0.54}, {"trace": 1.09, "density": 4.043, "ecdf": 0.635, "esf": 0.365}, {"trace": 1.074, "density": 4.261, "ecdf": 0.57, "esf": 0.43}, {"trace": 1.088, "density": 4.075, "ecdf": 0.628, "esf": 0.372}, {"trace": 1.101, "density": 3.862, "ecdf": 0.679, "esf": 0.321}, {"trace": 1.048, "density": 4.444, "ecdf": 0.456, "esf": 0.544}, {"trace": 1.138, "density": 2.876, "ecdf": 0.808, "esf": 0.192}, {"trace": 1.034, "density": 4.426, "ecdf": 0.388, "esf": 0.611}, {"trace": 1.093, "density": 3.995, "ecdf": 0.648, "esf": 0.352}, {"trace": 1.059, "density": 4.4, "ecdf": 0.504, "esf": 0.496}, {"trace": 1.063, "density": 4.373, "ecdf": 0.522, "esf": 0.478}, {"trace": 1.095, "density": 3.958, "ecdf": 0.657, "esf": 0.343}, {"trace": 1.048, "density": 4.444, "ecdf": 0.456, "esf": 0.544}, {"trace": 1.081, "density": 4.17, "ecdf": 0.602, "esf": 0.398}, {"trace": 1.118, "density": 3.466, "ecdf": 0.743, "esf": 0.257}, {"trace": 1.081, "density": 4.179, "ecdf": 0.599, "esf": 0.401}, {"trace": 0.937, "density": 1.81, "ecdf": 0.069, "esf": 0.931}, {"trace": 0.944, "density": 1.999, "ecdf": 0.08, "esf": 0.92}, {"trace": 1.218, "density": 0.942, "ecdf": 0.952, "esf": 0.047}, {"trace": 0.956, "density": 2.381, "ecdf": 0.105, "esf": 0.895}, {"trace": 1.021, "density": 4.355, "ecdf": 0.336, "esf": 0.664}, {"trace": 0.997, "density": 3.859, "ecdf": 0.23, "esf": 0.77}, {"trace": 1.027, "density": 4.39, "ecdf": 0.36, "esf": 0.64}, {"trace": 1.029, "density": 4.403, "ecdf": 0.368, "esf": 0.632}, {"trace": 0.952, "density": 2.254, "ecdf": 0.096, "esf": 0.904}, {"trace": 0.928, "density": 1.495, "ecdf": 0.048, "esf": 0.952}, {"trace": 1.111, "density": 3.641, "ecdf": 0.72, "esf": 0.28}, {"trace": 1.027, "density": 4.395, "ecdf": 0.363, "esf": 0.637}, {"trace": 1.017, "density": 4.315, "ecdf": 0.317, "esf": 0.683}, {"trace": 1.081, "density": 4.176, "ecdf": 0.6, "esf": 0.4}, {"trace": 1.02, "density": 4.349, "ecdf": 0.332, "esf": 0.668}, {"trace": 0.867, "density": 0.313, "ecdf": 0.007, "esf": 0.993}, {"trace": 0.872, "density": 0.362, "ecdf": 0.009, "esf": 0.991}, {"trace": 1.267, "density": 0.408, "ecdf": 0.982, "esf": 0.018}, {"trace": 1.189, "density": 1.488, "ecdf": 0.916, "esf": 0.084}, {"trace": 1.214, "density": 1.015, "ecdf": 0.949, "esf": 0.051}, {"trace": 1.212, "density": 1.051, "ecdf": 0.947, "esf": 0.053}, {"trace": 1.265, "density": 0.42, "ecdf": 0.981, "esf": 0.019}, {"trace": 1.274, "density": 0.352, "ecdf": 0.985, "esf": 0.015}, {"trace": 0.97, "density": 2.826, "ecdf": 0.143, "esf": 0.857}, {"trace": 1.117, "density": 3.503, "ecdf": 0.738, "esf": 0.262}, {"trace": 1.016, "density": 4.313, "ecdf": 0.316, "esf": 0.684}, {"trace": 1.008, "density": 4.195, "ecdf": 0.281, "esf": 0.719}, {"trace": 0.99, "density": 3.559, "ecdf": 0.201, "esf": 0.799}, {"trace": 1.132, "density": 3.058, "ecdf": 0.79, "esf": 0.21}, {"trace": 1.001, "density": 3.997, "ecdf": 0.247, "esf": 0.753}, {"trace": 1.101, "density": 3.869, "ecdf": 0.678, "esf": 0.322}, {"trace": 1.034, "density": 4.425, "ecdf": 0.388, "esf": 0.612}, {"trace": 1.075, "density": 4.25, "ecdf": 0.574, "esf": 0.426}, {"trace": 1.053, "density": 4.431, "ecdf": 0.478, "esf": 0.522}, {"trace": 1.146, "density": 2.656, "ecdf": 0.829, "esf": 0.171}, {"trace": 1.075, "density": 4.259, "ecdf": 0.571, "esf": 0.429}, {"trace": 0.976, "density": 3.009, "ecdf": 0.159, "esf": 0.841}, {"trace": 1.013, "density": 4.271, "ecdf": 0.299, "esf": 0.701}, {"trace": 0.993, "density": 3.72, "ecdf": 0.214, "esf": 0.786}, {"trace": 0.97, "density": 2.806, "ecdf": 0.141, "esf": 0.859}, {"trace": 1.062, "density": 4.383, "ecdf": 0.516, "esf": 0.484}, {"trace": 1.027, "density": 4.39, "ecdf": 0.359, "esf": 0.641}, {"trace": 1.135, "density": 2.98, "ecdf": 0.797, "esf": 0.203}, {"trace": 1.155, "density": 2.412, "ecdf": 0.852, "esf": 0.148}, {"trace": 1.203, "density": 1.226, "ecdf": 0.937, "esf": 0.063}, {"trace": 0.925, "density": 1.401, "ecdf": 0.045, "esf": 0.955}, {"trace": 1.194, "density": 1.4, "ecdf": 0.923, "esf": 0.077}, {"trace": 1.082, "density": 4.157, "ecdf": 0.607, "esf": 0.393}, {"trace": 1.057, "density": 4.412, "ecdf": 0.496, "esf": 0.504}, {"trace": 1.043, "density": 4.447, "ecdf": 0.433, "esf": 0.567}, {"trace": 0.917, "density": 1.144, "ecdf": 0.036, "esf": 0.964}, {"trace": 1.092, "density": 4.009, "ecdf": 0.644, "esf": 0.356}, {"trace": 1.081, "density": 4.177, "ecdf": 0.599, "esf": 0.401}, {"trace": 1.031, "density": 4.413, "ecdf": 0.377, "esf": 0.623}, {"trace": 1.033, "density": 4.422, "ecdf": 0.384, "esf": 0.615}, {"trace": 1.029, "density": 4.405, "ecdf": 0.37, "esf": 0.63}, {"trace": 1.026, "density": 4.386, "ecdf": 0.356, "esf": 0.644}, {"trace": 1.013, "density": 4.273, "ecdf": 0.301, "esf": 0.699}, {"trace": 1.088, "density": 4.077, "ecdf": 0.627, "esf": 0.373}, {"trace": 1.083, "density": 4.152, "ecdf": 0.609, "esf": 0.391}, {"trace": 1.268, "density": 0.396, "ecdf": 0.982, "esf": 0.018}, {"trace": 1.005, "density": 4.102, "ecdf": 0.262, "esf": 0.738}, {"trace": 1.086, "density": 4.104, "ecdf": 0.62, "esf": 0.38}, {"trace": 0.989, "density": 3.539, "ecdf": 0.199, "esf": 0.801}, {"trace": 1.109, "density": 3.708, "ecdf": 0.71, "esf": 0.29}, {"trace": 1.066, "density": 4.35, "ecdf": 0.536, "esf": 0.464}, {"trace": 1.039, "density": 4.44, "ecdf": 0.414, "esf": 0.586}, {"trace": 1.092, "density": 4.015, "ecdf": 0.642, "esf": 0.358}, {"trace": 0.987, "density": 3.461, "ecdf": 0.193, "esf": 0.806}, {"trace": 1.037, "density": 4.437, "ecdf": 0.407, "esf": 0.593}, {"trace": 1.085, "density": 4.122, "ecdf": 0.617, "esf": 0.383}, {"trace": 1.226, "density": 0.814, "ecdf": 0.958, "esf": 0.041}, {"trace": 1.216, "density": 0.987, "ecdf": 0.95, "esf": 0.05}, {"trace": 1.296, "density": 0.221, "ecdf": 0.99, "esf": 0.01}, {"trace": 0.912, "density": 0.99, "ecdf": 0.03, "esf": 0.97}, {"trace": 1.227, "density": 0.789, "ecdf": 0.959, "esf": 0.041}, {"trace": 0.919, "density": 1.205, "ecdf": 0.038, "esf": 0.962}, {"trace": 1.096, "density": 3.955, "ecdf": 0.658, "esf": 0.342}, {"trace": 0.933, "density": 1.686, "ecdf": 0.06, "esf": 0.94}, {"trace": 0.99, "density": 3.587, "ecdf": 0.202, "esf": 0.798}, {"trace": 1.05, "density": 4.44, "ecdf": 0.465, "esf": 0.535}, {"trace": 1.245, "density": 0.591, "ecdf": 0.971, "esf": 0.029}, {"trace": 0.902, "density": 0.749, "ecdf": 0.023, "esf": 0.977}, {"trace": 0.885, "density": 0.494, "ecdf": 0.014, "esf": 0.986}, {"trace": 1.188, "density": 1.522, "ecdf": 0.914, "esf": 0.086}, {"trace": 1.03, "density": 4.407, "ecdf": 0.371, "esf": 0.629}, {"trace": 1.035, "density": 4.43, "ecdf": 0.395, "esf": 0.605}, {"trace": 1.002, "density": 4.042, "ecdf": 0.252, "esf": 0.748}, {"trace": 0.984, "density": 3.349, "ecdf": 0.185, "esf": 0.815}, {"trace": 1.02, "density": 4.349, "ecdf": 0.332, "esf": 0.668}, {"trace": 1.001, "density": 4.013, "ecdf": 0.249, "esf": 0.751}, {"trace": 0.979, "density": 3.146, "ecdf": 0.17, "esf": 0.83}, {"trace": 0.903, "density": 0.77, "ecdf": 0.024, "esf": 0.976}, {"trace": 0.958, "density": 2.436, "ecdf": 0.109, "esf": 0.891}, {"trace": 1.011, "density": 4.233, "ecdf": 0.289, "esf": 0.711}, {"trace": 1.135, "density": 2.976, "ecdf": 0.798, "esf": 0.202}, {"trace": 1.057, "density": 4.416, "ecdf": 0.491, "esf": 0.509}, {"trace": 1.09, "density": 4.04, "ecdf": 0.636, "esf": 0.364}, {"trace": 0.994, "density": 3.743, "ecdf": 0.216, "esf": 0.784}, {"trace": 1.13, "density": 3.11, "ecdf": 0.786, "esf": 0.214}, {"trace": 1.105, "density": 3.789, "ecdf": 0.696, "esf": 0.304}, {"trace": 1.094, "density": 3.984, "ecdf": 0.651, "esf": 0.349}, {"trace": 1.024, "density": 4.375, "ecdf": 0.349, "esf": 0.651}, {"trace": 1.151, "density": 2.528, "ecdf": 0.84, "esf": 0.16}, {"trace": 0.977, "density": 3.049, "ecdf": 0.163, "esf": 0.837}, {"trace": 1.201, "density": 1.273, "ecdf": 0.932, "esf": 0.068}, {"trace": 1.225, "density": 0.83, "ecdf": 0.957, "esf": 0.043}, {"trace": 0.847, "density": 0.146, "ecdf": 0.003, "esf": 0.997}, {"trace": 1.035, "density": 4.428, "ecdf": 0.393, "esf": 0.607}, {"trace": 1.022, "density": 4.359, "ecdf": 0.338, "esf": 0.662}, {"trace": 0.974, "density": 2.966, "ecdf": 0.155, "esf": 0.845}, {"trace": 1.157, "density": 2.343, "ecdf": 0.859, "esf": 0.141}, {"trace": 0.946, "density": 2.064, "ecdf": 0.084, "esf": 0.916}, {"trace": 1.079, "density": 4.203, "ecdf": 0.592, "esf": 0.408}, {"trace": 1.021, "density": 4.351, "ecdf": 0.332, "esf": 0.668}, {"trace": 1.09, "density": 4.051, "ecdf": 0.633, "esf": 0.367}, {"trace": 0.917, "density": 1.134, "ecdf": 0.036, "esf": 0.964}, {"trace": 1.044, "density": 4.448, "ecdf": 0.438, "esf": 0.562}, {"trace": 1.094, "density": 3.981, "ecdf": 0.652, "esf": 0.348}, {"trace": 0.987, "density": 3.464, "ecdf": 0.194, "esf": 0.806}, {"trace": 1.299, "density": 0.208, "ecdf": 0.991, "esf": 0.009}, {"trace": 1.321, "density": 0.126, "ecdf": 0.995, "esf": 0.005}, {"trace": 0.994, "density": 3.727, "ecdf": 0.215, "esf": 0.785}, {"trace": 1.102, "density": 3.843, "ecdf": 0.684, "esf": 0.316}, {"trace": 1.114, "density": 3.579, "ecdf": 0.729, "esf": 0.271}, {"trace": 1.105, "density": 3.792, "ecdf": 0.695, "esf": 0.305}, {"trace": 1.154, "density": 2.452, "ecdf": 0.848, "esf": 0.152}, {"trace": 1.238, "density": 0.656, "ecdf": 0.967, "esf": 0.033}, {"trace": 1.234, "density": 0.71, "ecdf": 0.963, "esf": 0.037}, {"trace": 1.205, "density": 1.183, "ecdf": 0.939, "esf": 0.061}, {"trace": 1.0, "density": 3.954, "ecdf": 0.242, "esf": 0.758}, {"trace": 1.075, "density": 4.248, "ecdf": 0.574, "esf": 0.426}, {"trace": 1.075, "density": 4.258, "ecdf": 0.572, "esf": 0.428}, {"trace": 1.076, "density": 4.237, "ecdf": 0.578, "esf": 0.422}, {"trace": 0.971, "density": 2.849, "ecdf": 0.145, "esf": 0.855}, {"trace": 1.027, "density": 4.393, "ecdf": 0.361, "esf": 0.639}, {"trace": 0.986, "density": 3.411, "ecdf": 0.19, "esf": 0.81}, {"trace": 1.092, "density": 4.02, "ecdf": 0.641, "esf": 0.359}, {"trace": 1.018, "density": 4.329, "ecdf": 0.322, "esf": 0.678}, {"trace": 1.057, "density": 4.413, "ecdf": 0.494, "esf": 0.506}, {"trace": 1.165, "density": 2.125, "ecdf": 0.875, "esf": 0.125}, {"trace": 0.915, "density": 1.081, "ecdf": 0.033, "esf": 0.967}, {"trace": 1.047, "density": 4.446, "ecdf": 0.449, "esf": 0.551}, {"trace": 1.069, "density": 4.318, "ecdf": 0.55, "esf": 0.45}, {"trace": 1.055, "density": 4.425, "ecdf": 0.482, "esf": 0.518}, {"trace": 1.029, "density": 4.404, "ecdf": 0.369, "esf": 0.631}, {"trace": 1.139, "density": 2.865, "ecdf": 0.809, "esf": 0.191}, {"trace": 1.072, "density": 4.293, "ecdf": 0.558, "esf": 0.442}, {"trace": 1.028, "density": 4.4, "ecdf": 0.366, "esf": 0.634}, {"trace": 1.016, "density": 4.313, "ecdf": 0.315, "esf": 0.685}, {"trace": 1.144, "density": 2.721, "ecdf": 0.822, "esf": 0.178}, {"trace": 1.076, "density": 4.238, "ecdf": 0.577, "esf": 0.423}, {"trace": 1.012, "density": 4.264, "ecdf": 0.296, "esf": 0.704}, {"trace": 0.972, "density": 2.883, "ecdf": 0.148, "esf": 0.852}, {"trace": 1.295, "density": 0.227, "ecdf": 0.99, "esf": 0.01}, {"trace": 0.884, "density": 0.485, "ecdf": 0.014, "esf": 0.986}, {"trace": 0.976, "density": 3.02, "ecdf": 0.16, "esf": 0.84}, {"trace": 1.179, "density": 1.734, "ecdf": 0.901, "esf": 0.099}, {"trace": 1.147, "density": 2.617, "ecdf": 0.832, "esf": 0.168}, {"trace": 1.133, "density": 3.033, "ecdf": 0.792, "esf": 0.208}, {"trace": 1.147, "density": 2.634, "ecdf": 0.831, "esf": 0.169}, {"trace": 1.139, "density": 2.856, "ecdf": 0.81, "esf": 0.19}, {"trace": 1.025, "density": 4.382, "ecdf": 0.352, "esf": 0.648}, {"trace": 0.995, "density": 3.767, "ecdf": 0.218, "esf": 0.782}, {"trace": 1.032, "density": 4.415, "ecdf": 0.379, "esf": 0.621}, {"trace": 1.136, "density": 2.935, "ecdf": 0.801, "esf": 0.199}, {"trace": 0.906, "density": 0.833, "ecdf": 0.027, "esf": 0.973}, {"trace": 1.16, "density": 2.263, "ecdf": 0.865, "esf": 0.135}, {"trace": 0.905, "density": 0.829, "ecdf": 0.027, "esf": 0.973}, {"trace": 1.106, "density": 3.764, "ecdf": 0.7, "esf": 0.3}, {"trace": 0.965, "density": 2.648, "ecdf": 0.127, "esf": 0.873}, {"trace": 0.997, "density": 3.856, "ecdf": 0.23, "esf": 0.77}, {"trace": 0.989, "density": 3.544, "ecdf": 0.199, "esf": 0.801}, {"trace": 1.009, "density": 4.203, "ecdf": 0.282, "esf": 0.718}, {"trace": 1.077, "density": 4.228, "ecdf": 0.581, "esf": 0.419}, {"trace": 0.989, "density": 3.521, "ecdf": 0.197, "esf": 0.802}, {"trace": 1.146, "density": 2.649, "ecdf": 0.83, "esf": 0.17}, {"trace": 1.127, "density": 3.216, "ecdf": 0.774, "esf": 0.226}, {"trace": 1.004, "density": 4.092, "ecdf": 0.26, "esf": 0.74}, {"trace": 1.125, "density": 3.27, "ecdf": 0.768, "esf": 0.232}, {"trace": 0.97, "density": 2.833, "ecdf": 0.144, "esf": 0.856}, {"trace": 1.142, "density": 2.766, "ecdf": 0.817, "esf": 0.183}, {"trace": 1.108, "density": 3.714, "ecdf": 0.708, "esf": 0.292}, {"trace": 1.036, "density": 4.432, "ecdf": 0.399, "esf": 0.601}, {"trace": 1.014, "density": 4.288, "ecdf": 0.306, "esf": 0.694}, {"trace": 1.033, "density": 4.422, "ecdf": 0.384, "esf": 0.616}, {"trace": 1.142, "density": 2.755, "ecdf": 0.819, "esf": 0.181}, {"trace": 1.003, "density": 4.049, "ecdf": 0.253, "esf": 0.747}, {"trace": 1.037, "density": 4.437, "ecdf": 0.407, "esf": 0.593}, {"trace": 1.149, "density": 2.574, "ecdf": 0.837, "esf": 0.163}, {"trace": 1.03, "density": 4.406, "ecdf": 0.371, "esf": 0.629}, {"trace": 0.965, "density": 2.651, "ecdf": 0.127, "esf": 0.873}, {"trace": 0.927, "density": 1.47, "ecdf": 0.047, "esf": 0.953}, {"trace": 1.01, "density": 4.225, "ecdf": 0.287, "esf": 0.713}, {"trace": 1.077, "density": 4.226, "ecdf": 0.582, "esf": 0.418}, {"trace": 1.031, "density": 4.411, "ecdf": 0.374, "esf": 0.626}, {"trace": 1.02, "density": 4.346, "ecdf": 0.33, "esf": 0.67}, {"trace": 1.075, "density": 4.257, "ecdf": 0.572, "esf": 0.428}, {"trace": 0.981, "density": 3.219, "ecdf": 0.174, "esf": 0.826}, {"trace": 1.071, "density": 4.302, "ecdf": 0.555, "esf": 0.445}, {"trace": 1.069, "density": 4.325, "ecdf": 0.547, "esf": 0.453}, {"trace": 1.179, "density": 1.719, "ecdf": 0.902, "esf": 0.098}, {"trace": 1.021, "density": 4.352, "ecdf": 0.333, "esf": 0.667}, {"trace": 0.957, "density": 2.405, "ecdf": 0.107, "esf": 0.893}, {"trace": 1.026, "density": 4.388, "ecdf": 0.358, "esf": 0.642}, {"trace": 1.23, "density": 0.754, "ecdf": 0.961, "esf": 0.039}, {"trace": 1.049, "density": 4.442, "ecdf": 0.46, "esf": 0.54}, {"trace": 1.035, "density": 4.43, "ecdf": 0.396, "esf": 0.604}, {"trace": 1.059, "density": 4.401, "ecdf": 0.503, "esf": 0.497}, {"trace": 1.14, "density": 2.812, "ecdf": 0.814, "esf": 0.186}, {"trace": 1.113, "density": 3.603, "ecdf": 0.726, "esf": 0.274}, {"trace": 0.976, "density": 3.016, "ecdf": 0.16, "esf": 0.84}, {"trace": 1.168, "density": 2.045, "ecdf": 0.88, "esf": 0.12}, {"trace": 1.162, "density": 2.198, "ecdf": 0.87, "esf": 0.13}, {"trace": 1.168, "density": 2.037, "ecdf": 0.881, "esf": 0.119}, {"trace": 1.102, "density": 3.844, "ecdf": 0.683, "esf": 0.317}, {"trace": 1.101, "density": 3.866, "ecdf": 0.679, "esf": 0.321}, {"trace": 1.09, "density": 4.039, "ecdf": 0.636, "esf": 0.364}, {"trace": 1.074, "density": 4.262, "ecdf": 0.57, "esf": 0.43}, {"trace": 1.06, "density": 4.396, "ecdf": 0.506, "esf": 0.494}, {"trace": 1.141, "density": 2.785, "ecdf": 0.816, "esf": 0.184}, {"trace": 0.875, "density": 0.386, "ecdf": 0.01, "esf": 0.99}, {"trace": 1.106, "density": 3.771, "ecdf": 0.699, "esf": 0.301}, {"trace": 1.114, "density": 3.587, "ecdf": 0.728, "esf": 0.272}, {"trace": 0.965, "density": 2.659, "ecdf": 0.128, "esf": 0.872}, {"trace": 1.005, "density": 4.106, "ecdf": 0.262, "esf": 0.738}, {"trace": 1.034, "density": 4.425, "ecdf": 0.388, "esf": 0.612}, {"trace": 1.0, "density": 3.978, "ecdf": 0.245, "esf": 0.755}, {"trace": 0.954, "density": 2.298, "ecdf": 0.099, "esf": 0.901}, {"trace": 1.078, "density": 4.221, "ecdf": 0.584, "esf": 0.416}, {"trace": 0.985, "density": 3.354, "ecdf": 0.185, "esf": 0.815}, {"trace": 1.067, "density": 4.336, "ecdf": 0.542, "esf": 0.458}, {"trace": 1.028, "density": 4.396, "ecdf": 0.364, "esf": 0.636}, {"trace": 0.952, "density": 2.261, "ecdf": 0.097, "esf": 0.903}, {"trace": 1.112, "density": 3.623, "ecdf": 0.723, "esf": 0.277}, {"trace": 1.024, "density": 4.372, "ecdf": 0.347, "esf": 0.653}, {"trace": 1.144, "density": 2.72, "ecdf": 0.823, "esf": 0.177}, {"trace": 0.929, "density": 1.548, "ecdf": 0.051, "esf": 0.949}, {"trace": 0.994, "density": 3.742, "ecdf": 0.216, "esf": 0.784}, {"trace": 1.153, "density": 2.47, "ecdf": 0.846, "esf": 0.154}, {"trace": 1.108, "density": 3.711, "ecdf": 0.709, "esf": 0.291}, {"trace": 0.996, "density": 3.819, "ecdf": 0.225, "esf": 0.775}, {"trace": 1.066, "density": 4.345, "ecdf": 0.538, "esf": 0.462}, {"trace": 1.074, "density": 4.261, "ecdf": 0.57, "esf": 0.43}, {"trace": 0.878, "density": 0.417, "ecdf": 0.011, "esf": 0.989}, {"trace": 1.014, "density": 4.288, "ecdf": 0.306, "esf": 0.694}, {"trace": 1.024, "density": 4.373, "ecdf": 0.347, "esf": 0.653}, {"trace": 1.063, "density": 4.377, "ecdf": 0.52, "esf": 0.48}, {"trace": 1.144, "density": 2.7, "ecdf": 0.825, "esf": 0.175}, {"trace": 1.087, "density": 4.087, "ecdf": 0.625, "esf": 0.375}, {"trace": 1.003, "density": 4.065, "ecdf": 0.255, "esf": 0.745}, {"trace": 1.095, "density": 3.966, "ecdf": 0.655, "esf": 0.345}, {"trace": 1.084, "density": 4.132, "ecdf": 0.614, "esf": 0.386}, {"trace": 1.116, "density": 3.517, "ecdf": 0.737, "esf": 0.263}, {"trace": 1.101, "density": 3.861, "ecdf": 0.68, "esf": 0.32}, {"trace": 1.004, "density": 4.094, "ecdf": 0.26, "esf": 0.74}, {"trace": 1.128, "density": 3.163, "ecdf": 0.78, "esf": 0.22}, {"trace": 0.951, "density": 2.216, "ecdf": 0.094, "esf": 0.906}, {"trace": 1.118, "density": 3.469, "ecdf": 0.742, "esf": 0.257}, {"trace": 0.969, "density": 2.789, "ecdf": 0.139, "esf": 0.861}, {"trace": 1.083, "density": 4.144, "ecdf": 0.611, "esf": 0.389}, {"trace": 0.986, "density": 3.408, "ecdf": 0.19, "esf": 0.81}, {"trace": 0.971, "density": 2.847, "ecdf": 0.145, "esf": 0.855}, {"trace": 1.14, "density": 2.814, "ecdf": 0.813, "esf": 0.187}, {"trace": 1.011, "density": 4.235, "ecdf": 0.289, "esf": 0.711}, {"trace": 1.155, "density": 2.421, "ecdf": 0.851, "esf": 0.149}, {"trace": 0.892, "density": 0.584, "ecdf": 0.017, "esf": 0.983}, {"trace": 1.046, "density": 4.447, "ecdf": 0.446, "esf": 0.554}, {"trace": 0.998, "density": 3.9, "ecdf": 0.235, "esf": 0.765}, {"trace": 1.038, "density": 4.44, "ecdf": 0.412, "esf": 0.588}, {"trace": 1.039, "density": 4.441, "ecdf": 0.415, "esf": 0.585}, {"trace": 1.057, "density": 4.415, "ecdf": 0.492, "esf": 0.508}, {"trace": 1.048, "density": 4.445, "ecdf": 0.453, "esf": 0.547}, {"trace": 1.221, "density": 0.889, "ecdf": 0.954, "esf": 0.046}, {"trace": 0.983, "density": 3.305, "ecdf": 0.18, "esf": 0.82}, {"trace": 1.016, "density": 4.314, "ecdf": 0.316, "esf": 0.684}, {"trace": 0.974, "density": 2.942, "ecdf": 0.153, "esf": 0.847}, {"trace": 0.996, "density": 3.833, "ecdf": 0.226, "esf": 0.774}, {"trace": 1.008, "density": 4.177, "ecdf": 0.278, "esf": 0.722}, {"trace": 0.904, "density": 0.788, "ecdf": 0.025, "esf": 0.975}, {"trace": 1.044, "density": 4.448, "ecdf": 0.435, "esf": 0.565}, {"trace": 1.014, "density": 4.287, "ecdf": 0.306, "esf": 0.694}, {"trace": 0.905, "density": 0.814, "ecdf": 0.026, "esf": 0.974}, {"trace": 1.159, "density": 2.303, "ecdf": 0.862, "esf": 0.138}, {"trace": 1.119, "density": 3.428, "ecdf": 0.748, "esf": 0.251}, {"trace": 0.969, "density": 2.782, "ecdf": 0.139, "esf": 0.861}, {"trace": 1.128, "density": 3.189, "ecdf": 0.777, "esf": 0.223}, {"trace": 1.181, "density": 1.679, "ecdf": 0.905, "esf": 0.095}, {"trace": 1.166, "density": 2.104, "ecdf": 0.877, "esf": 0.123}, {"trace": 1.05, "density": 4.44, "ecdf": 0.465, "esf": 0.535}, {"trace": 1.087, "density": 4.086, "ecdf": 0.626, "esf": 0.374}, {"trace": 0.955, "density": 2.329, "ecdf": 0.102, "esf": 0.898}, {"trace": 0.95, "density": 2.174, "ecdf": 0.09, "esf": 0.91}, {"trace": 1.162, "density": 2.195, "ecdf": 0.87, "esf": 0.13}, {"trace": 1.129, "density": 3.144, "ecdf": 0.782, "esf": 0.218}, {"trace": 1.035, "density": 4.431, "ecdf": 0.397, "esf": 0.603}, {"trace": 0.995, "density": 3.786, "ecdf": 0.22, "esf": 0.78}, {"trace": 1.209, "density": 1.118, "ecdf": 0.943, "esf": 0.057}, {"trace": 1.029, "density": 4.405, "ecdf": 0.369, "esf": 0.631}, {"trace": 1.171, "density": 1.958, "ecdf": 0.886, "esf": 0.114}, {"trace": 1.156, "density": 2.392, "ecdf": 0.854, "esf": 0.146}, {"trace": 1.245, "density": 0.585, "ecdf": 0.972, "esf": 0.028}, {"trace": 0.94, "density": 1.885, "ecdf": 0.074, "esf": 0.926}, {"trace": 1.259, "density": 0.467, "ecdf": 0.978, "esf": 0.022}, {"trace": 1.246, "density": 0.578, "ecdf": 0.972, "esf": 0.028}, {"trace": 0.978, "density": 3.084, "ecdf": 0.165, "esf": 0.834}, {"trace": 1.061, "density": 4.39, "ecdf": 0.511, "esf": 0.489}, {"trace": 1.045, "density": 4.447, "ecdf": 0.443, "esf": 0.557}, {"trace": 0.959, "density": 2.459, "ecdf": 0.111, "esf": 0.889}, {"trace": 1.269, "density": 0.389, "ecdf": 0.983, "esf": 0.017}, {"trace": 1.176, "density": 1.791, "ecdf": 0.898, "esf": 0.102}, {"trace": 0.941, "density": 1.915, "ecdf": 0.076, "esf": 0.924}, {"trace": 0.946, "density": 2.053, "ecdf": 0.083, "esf": 0.917}, {"trace": 1.104, "density": 3.801, "ecdf": 0.694, "esf": 0.306}, {"trace": 0.97, "density": 2.822, "ecdf": 0.142, "esf": 0.858}, {"trace": 1.082, "density": 4.156, "ecdf": 0.608, "esf": 0.392}, {"trace": 1.038, "density": 4.44, "ecdf": 0.414, "esf": 0.586}, {"trace": 1.092, "density": 4.021, "ecdf": 0.641, "esf": 0.359}, {"trace": 1.046, "density": 4.447, "ecdf": 0.444, "esf": 0.556}, {"trace": 1.049, "density": 4.442, "ecdf": 0.461, "esf": 0.539}, {"trace": 1.013, "density": 4.266, "ecdf": 0.297, "esf": 0.703}, {"trace": 1.062, "density": 4.382, "ecdf": 0.516, "esf": 0.484}, {"trace": 1.137, "density": 2.91, "ecdf": 0.805, "esf": 0.195}, {"trace": 0.916, "density": 1.114, "ecdf": 0.035, "esf": 0.965}, {"trace": 1.158, "density": 2.339, "ecdf": 0.859, "esf": 0.141}, {"trace": 1.007, "density": 4.174, "ecdf": 0.277, "esf": 0.723}, {"trace": 1.111, "density": 3.662, "ecdf": 0.717, "esf": 0.283}, {"trace": 1.071, "density": 4.299, "ecdf": 0.556, "esf": 0.444}, {"trace": 0.999, "density": 3.917, "ecdf": 0.237, "esf": 0.763}, {"trace": 0.991, "density": 3.607, "ecdf": 0.204, "esf": 0.796}, {"trace": 0.963, "density": 2.591, "ecdf": 0.122, "esf": 0.878}, {"trace": 0.986, "density": 3.417, "ecdf": 0.19, "esf": 0.81}, {"trace": 1.08, "density": 4.194, "ecdf": 0.596, "esf": 0.404}, {"trace": 1.013, "density": 4.274, "ecdf": 0.301, "esf": 0.699}, {"trace": 1.006, "density": 4.146, "ecdf": 0.27, "esf": 0.73}, {"trace": 1.239, "density": 0.648, "ecdf": 0.968, "esf": 0.032}, {"trace": 1.174, "density": 1.867, "ecdf": 0.892, "esf": 0.108}, {"trace": 1.157, "density": 2.347, "ecdf": 0.858, "esf": 0.141}, {"trace": 1.179, "density": 1.711, "ecdf": 0.903, "esf": 0.097}, {"trace": 1.127, "density": 3.21, "ecdf": 0.775, "esf": 0.225}, {"trace": 1.007, "density": 4.16, "ecdf": 0.273, "esf": 0.726}, {"trace": 0.998, "density": 3.901, "ecdf": 0.235, "esf": 0.765}, {"trace": 1.137, "density": 2.918, "ecdf": 0.804, "esf": 0.196}, {"trace": 1.212, "density": 1.053, "ecdf": 0.947, "esf": 0.053}, {"trace": 1.067, "density": 4.337, "ecdf": 0.541, "esf": 0.459}, {"trace": 1.056, "density": 4.42, "ecdf": 0.488, "esf": 0.512}, {"trace": 1.061, "density": 4.391, "ecdf": 0.51, "esf": 0.49}, {"trace": 1.079, "density": 4.198, "ecdf": 0.594, "esf": 0.406}, {"trace": 1.26, "density": 0.463, "ecdf": 0.978, "esf": 0.021}, {"trace": 0.971, "density": 2.865, "ecdf": 0.147, "esf": 0.853}, {"trace": 0.946, "density": 2.077, "ecdf": 0.084, "esf": 0.916}, {"trace": 1.098, "density": 3.91, "ecdf": 0.668, "esf": 0.332}, {"trace": 1.022, "density": 4.358, "ecdf": 0.338, "esf": 0.662}, {"trace": 1.009, "density": 4.197, "ecdf": 0.281, "esf": 0.719}, {"trace": 0.99, "density": 3.567, "ecdf": 0.201, "esf": 0.799}, {"trace": 1.245, "density": 0.591, "ecdf": 0.971, "esf": 0.029}, {"trace": 1.065, "density": 4.357, "ecdf": 0.533, "esf": 0.467}, {"trace": 0.974, "density": 2.947, "ecdf": 0.154, "esf": 0.846}, {"trace": 0.914, "density": 1.056, "ecdf": 0.033, "esf": 0.967}, {"trace": 1.157, "density": 2.357, "ecdf": 0.858, "esf": 0.142}, {"trace": 1.343, "density": 0.083, "ecdf": 0.997, "esf": 0.003}, {"trace": 1.119, "density": 3.431, "ecdf": 0.748, "esf": 0.252}, {"trace": 1.064, "density": 4.364, "ecdf": 0.528, "esf": 0.472}, {"trace": 1.11, "density": 3.678, "ecdf": 0.714, "esf": 0.286}, {"trace": 1.079, "density": 4.203, "ecdf": 0.592, "esf": 0.408}, {"trace": 1.098, "density": 3.919, "ecdf": 0.667, "esf": 0.333}, {"trace": 1.089, "density": 4.065, "ecdf": 0.63, "esf": 0.37}, {"trace": 0.984, "density": 3.343, "ecdf": 0.184, "esf": 0.816}, {"trace": 1.074, "density": 4.263, "ecdf": 0.569, "esf": 0.431}, {"trace": 0.924, "density": 1.375, "ecdf": 0.043, "esf": 0.957}, {"trace": 1.225, "density": 0.823, "ecdf": 0.958, "esf": 0.042}, {"trace": 1.18, "density": 1.698, "ecdf": 0.904, "esf": 0.096}, {"trace": 0.996, "density": 3.812, "ecdf": 0.224, "esf": 0.776}, {"trace": 0.922, "density": 1.326, "ecdf": 0.042, "esf": 0.958}, {"trace": 1.07, "density": 4.31, "ecdf": 0.553, "esf": 0.447}, {"trace": 1.116, "density": 3.518, "ecdf": 0.737, "esf": 0.263}, {"trace": 1.057, "density": 4.411, "ecdf": 0.497, "esf": 0.503}, {"trace": 0.991, "density": 3.615, "ecdf": 0.205, "esf": 0.795}, {"trace": 1.095, "density": 3.968, "ecdf": 0.655, "esf": 0.345}, {"trace": 1.155, "density": 2.422, "ecdf": 0.851, "esf": 0.149}, {"trace": 1.239, "density": 0.648, "ecdf": 0.968, "esf": 0.032}, {"trace": 0.996, "density": 3.839, "ecdf": 0.227, "esf": 0.773}, {"trace": 1.106, "density": 3.763, "ecdf": 0.7, "esf": 0.3}, {"trace": 1.119, "density": 3.454, "ecdf": 0.745, "esf": 0.255}, {"trace": 1.11, "density": 3.67, "ecdf": 0.716, "esf": 0.284}, {"trace": 1.095, "density": 3.968, "ecdf": 0.655, "esf": 0.345}, {"trace": 0.981, "density": 3.193, "ecdf": 0.173, "esf": 0.827}, {"trace": 1.01, "density": 4.23, "ecdf": 0.288, "esf": 0.712}, {"trace": 1.087, "density": 4.094, "ecdf": 0.624, "esf": 0.376}, {"trace": 1.003, "density": 4.07, "ecdf": 0.256, "esf": 0.744}, {"trace": 0.975, "density": 3.002, "ecdf": 0.158, "esf": 0.842}, {"trace": 1.18, "density": 1.706, "ecdf": 0.903, "esf": 0.097}, {"trace": 1.064, "density": 4.365, "ecdf": 0.528, "esf": 0.472}, {"trace": 1.015, "density": 4.294, "ecdf": 0.308, "esf": 0.692}, {"trace": 1.112, "density": 3.625, "ecdf": 0.722, "esf": 0.278}, {"trace": 1.181, "density": 1.667, "ecdf": 0.906, "esf": 0.094}, {"trace": 1.163, "density": 2.175, "ecdf": 0.872, "esf": 0.128}, {"trace": 1.027, "density": 4.395, "ecdf": 0.363, "esf": 0.637}, {"trace": 1.002, "density": 4.015, "ecdf": 0.25, "esf": 0.75}, {"trace": 1.21, "density": 1.098, "ecdf": 0.945, "esf": 0.055}, {"trace": 0.987, "density": 3.471, "ecdf": 0.194, "esf": 0.806}, {"trace": 1.153, "density": 2.461, "ecdf": 0.847, "esf": 0.153}, {"trace": 1.256, "density": 0.494, "ecdf": 0.976, "esf": 0.024}, {"trace": 1.063, "density": 4.374, "ecdf": 0.522, "esf": 0.478}, {"trace": 1.027, "density": 4.393, "ecdf": 0.362, "esf": 0.638}, {"trace": 1.033, "density": 4.42, "ecdf": 0.382, "esf": 0.617}, {"trace": 1.102, "density": 3.836, "ecdf": 0.686, "esf": 0.314}, {"trace": 1.064, "density": 4.368, "ecdf": 0.525, "esf": 0.475}, {"trace": 1.151, "density": 2.528, "ecdf": 0.84, "esf": 0.16}, {"trace": 1.243, "density": 0.611, "ecdf": 0.97, "esf": 0.03}, {"trace": 1.161, "density": 2.248, "ecdf": 0.866, "esf": 0.133}, {"trace": 1.124, "density": 3.282, "ecdf": 0.767, "esf": 0.233}, {"trace": 1.141, "density": 2.787, "ecdf": 0.815, "esf": 0.185}, {"trace": 0.933, "density": 1.675, "ecdf": 0.059, "esf": 0.941}, {"trace": 1.056, "density": 4.417, "ecdf": 0.49, "esf": 0.51}, {"trace": 1.115, "density": 3.562, "ecdf": 0.731, "esf": 0.269}, {"trace": 1.086, "density": 4.099, "ecdf": 0.622, "esf": 0.378}, {"trace": 1.055, "density": 4.425, "ecdf": 0.482, "esf": 0.518}, {"trace": 1.04, "density": 4.443, "ecdf": 0.419, "esf": 0.581}, {"trace": 1.232, "density": 0.724, "ecdf": 0.962, "esf": 0.038}, {"trace": 1.217, "density": 0.953, "ecdf": 0.952, "esf": 0.048}, {"trace": 0.932, "density": 1.632, "ecdf": 0.056, "esf": 0.944}, {"trace": 0.935, "density": 1.733, "ecdf": 0.063, "esf": 0.937}, {"trace": 1.192, "density": 1.434, "ecdf": 0.919, "esf": 0.081}, {"trace": 0.976, "density": 3.043, "ecdf": 0.162, "esf": 0.838}, {"trace": 1.147, "density": 2.635, "ecdf": 0.831, "esf": 0.169}, {"trace": 1.024, "density": 4.374, "ecdf": 0.348, "esf": 0.652}, {"trace": 1.197, "density": 1.342, "ecdf": 0.926, "esf": 0.074}, {"trace": 1.109, "density": 3.705, "ecdf": 0.71, "esf": 0.29}, {"trace": 1.145, "density": 2.689, "ecdf": 0.826, "esf": 0.174}, {"trace": 1.015, "density": 4.298, "ecdf": 0.31, "esf": 0.69}, {"trace": 1.111, "density": 3.641, "ecdf": 0.72, "esf": 0.28}, {"trace": 1.124, "density": 3.286, "ecdf": 0.766, "esf": 0.234}, {"trace": 1.076, "density": 4.244, "ecdf": 0.575, "esf": 0.425}, {"trace": 1.051, "density": 4.439, "ecdf": 0.466, "esf": 0.534}, {"trace": 1.075, "density": 4.259, "ecdf": 0.571, "esf": 0.429}, {"trace": 1.077, "density": 4.23, "ecdf": 0.58, "esf": 0.42}, {"trace": 1.066, "density": 4.349, "ecdf": 0.537, "esf": 0.463}, {"trace": 1.054, "density": 4.426, "ecdf": 0.482, "esf": 0.518}, {"trace": 1.02, "density": 4.345, "ecdf": 0.33, "esf": 0.67}, {"trace": 0.946, "density": 2.078, "ecdf": 0.084, "esf": 0.916}, {"trace": 1.127, "density": 3.221, "ecdf": 0.773, "esf": 0.227}, {"trace": 1.048, "density": 4.444, "ecdf": 0.455, "esf": 0.545}, {"trace": 1.213, "density": 1.045, "ecdf": 0.947, "esf": 0.053}, {"trace": 1.24, "density": 0.636, "ecdf": 0.969, "esf": 0.031}, {"trace": 1.084, "density": 4.135, "ecdf": 0.613, "esf": 0.387}, {"trace": 1.015, "density": 4.302, "ecdf": 0.311, "esf": 0.689}, {"trace": 1.005, "density": 4.113, "ecdf": 0.264, "esf": 0.736}, {"trace": 1.031, "density": 4.412, "ecdf": 0.375, "esf": 0.625}, {"trace": 1.088, "density": 4.071, "ecdf": 0.629, "esf": 0.371}, {"trace": 1.114, "density": 3.567, "ecdf": 0.73, "esf": 0.269}, {"trace": 0.996, "density": 3.83, "ecdf": 0.226, "esf": 0.774}, {"trace": 1.094, "density": 3.979, "ecdf": 0.652, "esf": 0.348}, {"trace": 1.167, "density": 2.056, "ecdf": 0.879, "esf": 0.121}, {"trace": 1.063, "density": 4.371, "ecdf": 0.523, "esf": 0.477}, {"trace": 1.064, "density": 4.364, "ecdf": 0.528, "esf": 0.472}, {"trace": 1.177, "density": 1.78, "ecdf": 0.899, "esf": 0.101}, {"trace": 1.175, "density": 1.821, "ecdf": 0.896, "esf": 0.104}, {"trace": 1.228, "density": 0.777, "ecdf": 0.96, "esf": 0.04}, {"trace": 1.207, "density": 1.155, "ecdf": 0.941, "esf": 0.059}, {"trace": 1.013, "density": 4.271, "ecdf": 0.299, "esf": 0.701}, {"trace": 1.209, "density": 1.112, "ecdf": 0.944, "esf": 0.056}, {"trace": 1.179, "density": 1.731, "ecdf": 0.901, "esf": 0.099}, {"trace": 1.137, "density": 2.901, "ecdf": 0.805, "esf": 0.195}, {"trace": 1.186, "density": 1.548, "ecdf": 0.913, "esf": 0.087}, {"trace": 1.038, "density": 4.44, "ecdf": 0.411, "esf": 0.589}, {"trace": 1.158, "density": 2.319, "ecdf": 0.861, "esf": 0.139}, {"trace": 1.054, "density": 4.426, "ecdf": 0.481, "esf": 0.519}, {"trace": 1.156, "density": 2.39, "ecdf": 0.854, "esf": 0.145}, {"trace": 1.186, "density": 1.567, "ecdf": 0.912, "esf": 0.088}, {"trace": 1.021, "density": 4.351, "ecdf": 0.333, "esf": 0.667}, {"trace": 1.036, "density": 4.434, "ecdf": 0.401, "esf": 0.599}, {"trace": 1.0, "density": 3.976, "ecdf": 0.244, "esf": 0.756}, {"trace": 1.102, "density": 3.844, "ecdf": 0.683, "esf": 0.317}, {"trace": 1.076, "density": 4.24, "ecdf": 0.576, "esf": 0.424}, {"trace": 1.126, "density": 3.228, "ecdf": 0.773, "esf": 0.227}, {"trace": 0.995, "density": 3.795, "ecdf": 0.22, "esf": 0.78}, {"trace": 1.07, "density": 4.31, "ecdf": 0.552, "esf": 0.448}, {"trace": 0.892, "density": 0.585, "ecdf": 0.018, "esf": 0.982}, {"trace": 1.226, "density": 0.815, "ecdf": 0.958, "esf": 0.042}, {"trace": 1.014, "density": 4.282, "ecdf": 0.304, "esf": 0.696}, {"trace": 1.158, "density": 2.321, "ecdf": 0.86, "esf": 0.139}, {"trace": 1.013, "density": 4.273, "ecdf": 0.3, "esf": 0.7}, {"trace": 1.148, "density": 2.613, "ecdf": 0.833, "esf": 0.167}, {"trace": 1.019, "density": 4.336, "ecdf": 0.324, "esf": 0.676}, {"trace": 1.11, "density": 3.678, "ecdf": 0.714, "esf": 0.286}, {"trace": 1.13, "density": 3.117, "ecdf": 0.785, "esf": 0.215}, {"trace": 0.854, "density": 0.196, "ecdf": 0.004, "esf": 0.996}, {"trace": 0.885, "density": 0.496, "ecdf": 0.015, "esf": 0.985}, {"trace": 1.161, "density": 2.251, "ecdf": 0.866, "esf": 0.134}, {"trace": 1.013, "density": 4.268, "ecdf": 0.298, "esf": 0.702}, {"trace": 0.955, "density": 2.355, "ecdf": 0.103, "esf": 0.897}, {"trace": 1.232, "density": 0.733, "ecdf": 0.962, "esf": 0.038}, {"trace": 1.273, "density": 0.364, "ecdf": 0.984, "esf": 0.016}, {"trace": 1.134, "density": 2.987, "ecdf": 0.796, "esf": 0.204}, {"trace": 1.119, "density": 3.453, "ecdf": 0.745, "esf": 0.255}, {"trace": 1.115, "density": 3.556, "ecdf": 0.732, "esf": 0.268}, {"trace": 1.061, "density": 4.391, "ecdf": 0.509, "esf": 0.491}, {"trace": 1.005, "density": 4.127, "ecdf": 0.267, "esf": 0.733}, {"trace": 1.096, "density": 3.944, "ecdf": 0.661, "esf": 0.339}, {"trace": 1.11, "density": 3.671, "ecdf": 0.716, "esf": 0.284}, {"trace": 1.012, "density": 4.26, "ecdf": 0.295, "esf": 0.705}, {"trace": 1.058, "density": 4.408, "ecdf": 0.498, "esf": 0.502}, {"trace": 1.122, "density": 3.349, "ecdf": 0.759, "esf": 0.241}, {"trace": 0.957, "density": 2.401, "ecdf": 0.106, "esf": 0.894}, {"trace": 1.139, "density": 2.849, "ecdf": 0.811, "esf": 0.189}, {"trace": 0.984, "density": 3.312, "ecdf": 0.181, "esf": 0.819}, {"trace": 1.083, "density": 4.149, "ecdf": 0.61, "esf": 0.39}, {"trace": 1.071, "density": 4.299, "ecdf": 0.556, "esf": 0.444}, {"trace": 0.998, "density": 3.908, "ecdf": 0.236, "esf": 0.764}, {"trace": 1.145, "density": 2.692, "ecdf": 0.826, "esf": 0.174}, {"trace": 0.868, "density": 0.316, "ecdf": 0.007, "esf": 0.993}, {"trace": 0.997, "density": 3.848, "ecdf": 0.228, "esf": 0.772}, {"trace": 1.016, "density": 4.311, "ecdf": 0.314, "esf": 0.686}, {"trace": 1.134, "density": 2.982, "ecdf": 0.797, "esf": 0.203}, {"trace": 1.106, "density": 3.771, "ecdf": 0.698, "esf": 0.302}, {"trace": 1.148, "density": 2.606, "ecdf": 0.834, "esf": 0.166}, {"trace": 1.063, "density": 4.376, "ecdf": 0.52, "esf": 0.48}, {"trace": 1.107, "density": 3.739, "ecdf": 0.704, "esf": 0.296}, {"trace": 1.016, "density": 4.307, "ecdf": 0.313, "esf": 0.687}, {"trace": 1.017, "density": 4.32, "ecdf": 0.319, "esf": 0.681}, {"trace": 0.975, "density": 2.998, "ecdf": 0.158, "esf": 0.842}, {"trace": 1.1, "density": 3.876, "ecdf": 0.676, "esf": 0.324}, {"trace": 1.123, "density": 3.312, "ecdf": 0.763, "esf": 0.237}, {"trace": 1.13, "density": 3.127, "ecdf": 0.784, "esf": 0.216}, {"trace": 1.225, "density": 0.822, "ecdf": 0.958, "esf": 0.042}, {"trace": 0.996, "density": 3.82, "ecdf": 0.225, "esf": 0.775}, {"trace": 1.096, "density": 3.947, "ecdf": 0.661, "esf": 0.339}, {"trace": 1.123, "density": 3.326, "ecdf": 0.761, "esf": 0.239}, {"trace": 1.045, "density": 4.447, "ecdf": 0.442, "esf": 0.558}, {"trace": 0.912, "density": 1.007, "ecdf": 0.031, "esf": 0.969}, {"trace": 0.917, "density": 1.143, "ecdf": 0.036, "esf": 0.964}, {"trace": 1.109, "density": 3.704, "ecdf": 0.711, "esf": 0.289}, {"trace": 1.172, "density": 1.906, "ecdf": 0.89, "esf": 0.11}, {"trace": 1.021, "density": 4.355, "ecdf": 0.336, "esf": 0.664}, {"trace": 1.041, "density": 4.445, "ecdf": 0.424, "esf": 0.576}, {"trace": 1.059, "density": 4.4, "ecdf": 0.504, "esf": 0.496}, {"trace": 1.126, "density": 3.23, "ecdf": 0.772, "esf": 0.228}, {"trace": 1.074, "density": 4.268, "ecdf": 0.568, "esf": 0.432}, {"trace": 1.161, "density": 2.244, "ecdf": 0.867, "esf": 0.133}, {"trace": 1.025, "density": 4.381, "ecdf": 0.352, "esf": 0.648}, {"trace": 1.056, "density": 4.416, "ecdf": 0.491, "esf": 0.509}, {"trace": 1.111, "density": 3.65, "ecdf": 0.718, "esf": 0.282}, {"trace": 1.027, "density": 4.39, "ecdf": 0.36, "esf": 0.64}, {"trace": 1.092, "density": 4.01, "ecdf": 0.644, "esf": 0.356}, {"trace": 0.936, "density": 1.761, "ecdf": 0.065, "esf": 0.935}, {"trace": 1.037, "density": 4.436, "ecdf": 0.404, "esf": 0.596}, {"trace": 1.03, "density": 4.407, "ecdf": 0.371, "esf": 0.629}, {"trace": 1.032, "density": 4.419, "ecdf": 0.382, "esf": 0.618}, {"trace": 1.134, "density": 2.996, "ecdf": 0.795, "esf": 0.205}, {"trace": 1.035, "density": 4.431, "ecdf": 0.397, "esf": 0.603}, {"trace": 1.127, "density": 3.199, "ecdf": 0.776, "esf": 0.224}, {"trace": 1.097, "density": 3.926, "ecdf": 0.666, "esf": 0.334}, {"trace": 1.042, "density": 4.446, "ecdf": 0.426, "esf": 0.574}, {"trace": 0.988, "density": 3.484, "ecdf": 0.195, "esf": 0.805}, {"trace": 1.113, "density": 3.61, "ecdf": 0.725, "esf": 0.275}, {"trace": 0.963, "density": 2.593, "ecdf": 0.122, "esf": 0.878}, {"trace": 1.092, "density": 4.017, "ecdf": 0.641, "esf": 0.359}, {"trace": 1.138, "density": 2.892, "ecdf": 0.806, "esf": 0.194}, {"trace": 1.064, "density": 4.366, "ecdf": 0.527, "esf": 0.473}, {"trace": 1.086, "density": 4.098, "ecdf": 0.623, "esf": 0.377}, {"trace": 1.279, "density": 0.315, "ecdf": 0.986, "esf": 0.014}, {"trace": 1.287, "density": 0.269, "ecdf": 0.988, "esf": 0.012}, {"trace": 1.089, "density": 4.057, "ecdf": 0.632, "esf": 0.368}, {"trace": 1.001, "density": 4.011, "ecdf": 0.249, "esf": 0.751}, {"trace": 0.916, "density": 1.124, "ecdf": 0.035, "esf": 0.965}, {"trace": 1.078, "density": 4.212, "ecdf": 0.587, "esf": 0.413}, {"trace": 1.013, "density": 4.265, "ecdf": 0.297, "esf": 0.703}, {"trace": 1.063, "density": 4.375, "ecdf": 0.521, "esf": 0.479}, {"trace": 1.025, "density": 4.383, "ecdf": 0.354, "esf": 0.646}, {"trace": 0.987, "density": 3.439, "ecdf": 0.192, "esf": 0.808}, {"trace": 0.995, "density": 3.781, "ecdf": 0.219, "esf": 0.781}, {"trace": 1.157, "density": 2.359, "ecdf": 0.858, "esf": 0.142}, {"trace": 1.099, "density": 3.89, "ecdf": 0.673, "esf": 0.327}, {"trace": 0.934, "density": 1.692, "ecdf": 0.06, "esf": 0.94}, {"trace": 0.932, "density": 1.646, "ecdf": 0.058, "esf": 0.942}, {"trace": 0.943, "density": 1.977, "ecdf": 0.078, "esf": 0.922}, {"trace": 1.137, "density": 2.915, "ecdf": 0.804, "esf": 0.196}, {"trace": 0.951, "density": 2.211, "ecdf": 0.093, "esf": 0.907}, {"trace": 1.089, "density": 4.065, "ecdf": 0.63, "esf": 0.37}, {"trace": 1.161, "density": 2.249, "ecdf": 0.866, "esf": 0.134}, {"trace": 1.225, "density": 0.817, "ecdf": 0.958, "esf": 0.042}, {"trace": 1.126, "density": 3.248, "ecdf": 0.77, "esf": 0.23}, {"trace": 1.087, "density": 4.094, "ecdf": 0.624, "esf": 0.376}, {"trace": 0.939, "density": 1.847, "ecdf": 0.072, "esf": 0.928}, {"trace": 0.931, "density": 1.608, "ecdf": 0.054, "esf": 0.946}, {"trace": 1.1, "density": 3.873, "ecdf": 0.677, "esf": 0.323}, {"trace": 1.052, "density": 4.435, "ecdf": 0.474, "esf": 0.526}, {"trace": 1.035, "density": 4.428, "ecdf": 0.393, "esf": 0.607}, {"trace": 1.048, "density": 4.444, "ecdf": 0.457, "esf": 0.543}, {"trace": 1.113, "density": 3.605, "ecdf": 0.726, "esf": 0.274}, {"trace": 1.016, "density": 4.308, "ecdf": 0.313, "esf": 0.687}, {"trace": 1.236, "density": 0.679, "ecdf": 0.965, "esf": 0.035}, {"trace": 0.947, "density": 2.101, "ecdf": 0.085, "esf": 0.915}, {"trace": 1.121, "density": 3.387, "ecdf": 0.754, "esf": 0.246}, {"trace": 1.2, "density": 1.279, "ecdf": 0.931, "esf": 0.069}, {"trace": 1.086, "density": 4.102, "ecdf": 0.621, "esf": 0.379}, {"trace": 1.03, "density": 4.408, "ecdf": 0.372, "esf": 0.628}, {"trace": 1.039, "density": 4.442, "ecdf": 0.417, "esf": 0.583}, {"trace": 0.994, "density": 3.723, "ecdf": 0.214, "esf": 0.786}, {"trace": 1.038, "density": 4.44, "ecdf": 0.412, "esf": 0.588}, {"trace": 1.104, "density": 3.812, "ecdf": 0.692, "esf": 0.308}, {"trace": 0.997, "density": 3.863, "ecdf": 0.23, "esf": 0.77}, {"trace": 1.248, "density": 0.561, "ecdf": 0.973, "esf": 0.027}, {"trace": 1.228, "density": 0.777, "ecdf": 0.96, "esf": 0.04}, {"trace": 1.183, "density": 1.633, "ecdf": 0.908, "esf": 0.092}, {"trace": 0.97, "density": 2.811, "ecdf": 0.141, "esf": 0.859}, {"trace": 0.971, "density": 2.846, "ecdf": 0.145, "esf": 0.855}, {"trace": 1.275, "density": 0.348, "ecdf": 0.985, "esf": 0.015}, {"trace": 1.093, "density": 3.998, "ecdf": 0.648, "esf": 0.352}, {"trace": 1.012, "density": 4.264, "ecdf": 0.296, "esf": 0.704}, {"trace": 0.938, "density": 1.815, "ecdf": 0.069, "esf": 0.931}, {"trace": 0.866, "density": 0.301, "ecdf": 0.006, "esf": 0.994}, {"trace": 0.95, "density": 2.18, "ecdf": 0.09, "esf": 0.91}, {"trace": 0.978, "density": 3.094, "ecdf": 0.167, "esf": 0.833}, {"trace": 0.966, "density": 2.677, "ecdf": 0.13, "esf": 0.87}, {"trace": 0.98, "density": 3.186, "ecdf": 0.172, "esf": 0.828}, {"trace": 1.045, "density": 4.447, "ecdf": 0.443, "esf": 0.557}, {"trace": 1.03, "density": 4.407, "ecdf": 0.371, "esf": 0.629}, {"trace": 1.068, "density": 4.332, "ecdf": 0.544, "esf": 0.456}, {"trace": 1.055, "density": 4.424, "ecdf": 0.484, "esf": 0.516}, {"trace": 1.117, "density": 3.497, "ecdf": 0.739, "esf": 0.261}, {"trace": 0.976, "density": 3.025, "ecdf": 0.16, "esf": 0.84}, {"trace": 1.027, "density": 4.394, "ecdf": 0.362, "esf": 0.638}, {"trace": 1.131, "density": 3.101, "ecdf": 0.787, "esf": 0.213}, {"trace": 0.883, "density": 0.474, "ecdf": 0.013, "esf": 0.987}, {"trace": 0.988, "density": 3.488, "ecdf": 0.195, "esf": 0.805}, {"trace": 1.097, "density": 3.931, "ecdf": 0.665, "esf": 0.335}, {"trace": 1.015, "density": 4.293, "ecdf": 0.308, "esf": 0.692}, {"trace": 0.893, "density": 0.603, "ecdf": 0.018, "esf": 0.982}, {"trace": 0.93, "density": 1.569, "ecdf": 0.052, "esf": 0.948}, {"trace": 0.924, "density": 1.381, "ecdf": 0.044, "esf": 0.956}, {"trace": 1.169, "density": 1.991, "ecdf": 0.884, "esf": 0.116}, {"trace": 1.046, "density": 4.447, "ecdf": 0.446, "esf": 0.554}, {"trace": 1.146, "density": 2.662, "ecdf": 0.828, "esf": 0.172}, {"trace": 1.07, "density": 4.312, "ecdf": 0.552, "esf": 0.448}, {"trace": 1.233, "density": 0.721, "ecdf": 0.962, "esf": 0.038}, {"trace": 1.226, "density": 0.811, "ecdf": 0.959, "esf": 0.041}, {"trace": 1.043, "density": 4.447, "ecdf": 0.432, "esf": 0.568}, {"trace": 1.061, "density": 4.389, "ecdf": 0.511, "esf": 0.489}, {"trace": 1.025, "density": 4.382, "ecdf": 0.353, "esf": 0.647}, {"trace": 1.163, "density": 2.19, "ecdf": 0.87, "esf": 0.129}, {"trace": 0.949, "density": 2.149, "ecdf": 0.088, "esf": 0.912}, {"trace": 1.228, "density": 0.785, "ecdf": 0.96, "esf": 0.04}, {"trace": 1.099, "density": 3.905, "ecdf": 0.67, "esf": 0.33}, {"trace": 1.044, "density": 4.448, "ecdf": 0.436, "esf": 0.564}, {"trace": 1.04, "density": 4.443, "ecdf": 0.418, "esf": 0.582}, {"trace": 1.01, "density": 4.232, "ecdf": 0.288, "esf": 0.712}, {"trace": 1.024, "density": 4.377, "ecdf": 0.35, "esf": 0.65}, {"trace": 1.204, "density": 1.213, "ecdf": 0.938, "esf": 0.062}, {"trace": 0.982, "density": 3.24, "ecdf": 0.176, "esf": 0.824}, {"trace": 1.162, "density": 2.221, "ecdf": 0.868, "esf": 0.132}, {"trace": 1.085, "density": 4.123, "ecdf": 0.617, "esf": 0.383}, {"trace": 1.089, "density": 4.058, "ecdf": 0.632, "esf": 0.368}, {"trace": 1.082, "density": 4.161, "ecdf": 0.605, "esf": 0.395}, {"trace": 0.992, "density": 3.666, "ecdf": 0.211, "esf": 0.789}, {"trace": 0.978, "density": 3.085, "ecdf": 0.166, "esf": 0.834}, {"trace": 0.96, "density": 2.513, "ecdf": 0.115, "esf": 0.885}, {"trace": 1.026, "density": 4.39, "ecdf": 0.359, "esf": 0.641}, {"trace": 0.995, "density": 3.778, "ecdf": 0.218, "esf": 0.782}, {"trace": 1.181, "density": 1.665, "ecdf": 0.906, "esf": 0.094}, {"trace": 1.019, "density": 4.341, "ecdf": 0.327, "esf": 0.673}, {"trace": 1.079, "density": 4.199, "ecdf": 0.594, "esf": 0.406}, {"trace": 1.07, "density": 4.306, "ecdf": 0.554, "esf": 0.446}, {"trace": 1.012, "density": 4.262, "ecdf": 0.295, "esf": 0.705}, {"trace": 0.965, "density": 2.673, "ecdf": 0.129, "esf": 0.87}, {"trace": 1.199, "density": 1.301, "ecdf": 0.931, "esf": 0.069}, {"trace": 1.024, "density": 4.375, "ecdf": 0.349, "esf": 0.651}, {"trace": 1.043, "density": 4.447, "ecdf": 0.434, "esf": 0.566}, {"trace": 1.005, "density": 4.121, "ecdf": 0.265, "esf": 0.735}, {"trace": 1.071, "density": 4.295, "ecdf": 0.558, "esf": 0.442}, {"trace": 1.17, "density": 1.971, "ecdf": 0.886, "esf": 0.114}, {"trace": 0.997, "density": 3.844, "ecdf": 0.228, "esf": 0.772}, {"trace": 1.217, "density": 0.966, "ecdf": 0.951, "esf": 0.049}, {"trace": 0.88, "density": 0.44, "ecdf": 0.011, "esf": 0.989}, {"trace": 1.202, "density": 1.256, "ecdf": 0.934, "esf": 0.066}, {"trace": 0.936, "density": 1.763, "ecdf": 0.065, "esf": 0.935}, {"trace": 1.021, "density": 4.355, "ecdf": 0.336, "esf": 0.664}, {"trace": 0.928, "density": 1.51, "ecdf": 0.049, "esf": 0.951}, {"trace": 1.043, "density": 4.447, "ecdf": 0.433, "esf": 0.567}, {"trace": 1.08, "density": 4.185, "ecdf": 0.598, "esf": 0.402}, {"trace": 1.108, "density": 3.718, "ecdf": 0.707, "esf": 0.293}, {"trace": 1.014, "density": 4.284, "ecdf": 0.305, "esf": 0.695}, {"trace": 0.985, "density": 3.378, "ecdf": 0.187, "esf": 0.813}, {"trace": 0.982, "density": 3.25, "ecdf": 0.177, "esf": 0.823}, {"trace": 1.125, "density": 3.276, "ecdf": 0.767, "esf": 0.233}, {"trace": 1.079, "density": 4.205, "ecdf": 0.591, "esf": 0.409}, {"trace": 1.147, "density": 2.619, "ecdf": 0.832, "esf": 0.168}, {"trace": 1.098, "density": 3.913, "ecdf": 0.668, "esf": 0.332}, {"trace": 1.085, "density": 4.116, "ecdf": 0.618, "esf": 0.382}, {"trace": 1.105, "density": 3.793, "ecdf": 0.695, "esf": 0.305}, {"trace": 1.085, "density": 4.125, "ecdf": 0.617, "esf": 0.383}, {"trace": 1.012, "density": 4.251, "ecdf": 0.294, "esf": 0.706}, {"trace": 1.136, "density": 2.936, "ecdf": 0.801, "esf": 0.199}, {"trace": 1.107, "density": 3.733, "ecdf": 0.704, "esf": 0.296}, {"trace": 1.056, "density": 4.42, "ecdf": 0.488, "esf": 0.512}, {"trace": 1.032, "density": 4.417, "ecdf": 0.38, "esf": 0.62}, {"trace": 1.123, "density": 3.313, "ecdf": 0.763, "esf": 0.237}, {"trace": 1.148, "density": 2.589, "ecdf": 0.835, "esf": 0.165}, {"trace": 1.122, "density": 3.345, "ecdf": 0.76, "esf": 0.24}, {"trace": 1.16, "density": 2.272, "ecdf": 0.864, "esf": 0.136}, {"trace": 0.961, "density": 2.548, "ecdf": 0.118, "esf": 0.882}, {"trace": 1.205, "density": 1.201, "ecdf": 0.938, "esf": 0.062}, {"trace": 0.903, "density": 0.778, "ecdf": 0.025, "esf": 0.975}, {"trace": 1.106, "density": 3.759, "ecdf": 0.701, "esf": 0.299}, {"trace": 0.985, "density": 3.389, "ecdf": 0.188, "esf": 0.812}, {"trace": 1.015, "density": 4.302, "ecdf": 0.311, "esf": 0.689}, {"trace": 0.985, "density": 3.355, "ecdf": 0.185, "esf": 0.815}, {"trace": 0.904, "density": 0.803, "ecdf": 0.025, "esf": 0.975}, {"trace": 0.945, "density": 2.044, "ecdf": 0.082, "esf": 0.918}, {"trace": 1.041, "density": 4.445, "ecdf": 0.423, "esf": 0.577}, {"trace": 1.146, "density": 2.643, "ecdf": 0.83, "esf": 0.17}, {"trace": 0.964, "density": 2.633, "ecdf": 0.126, "esf": 0.874}, {"trace": 1.151, "density": 2.517, "ecdf": 0.841, "esf": 0.159}, {"trace": 1.082, "density": 4.163, "ecdf": 0.604, "esf": 0.396}, {"trace": 1.046, "density": 4.447, "ecdf": 0.443, "esf": 0.557}, {"trace": 1.039, "density": 4.441, "ecdf": 0.415, "esf": 0.585}, {"trace": 0.963, "density": 2.6, "ecdf": 0.123, "esf": 0.877}, {"trace": 1.131, "density": 3.1, "ecdf": 0.787, "esf": 0.213}, {"trace": 1.003, "density": 4.053, "ecdf": 0.254, "esf": 0.746}, {"trace": 1.035, "density": 4.431, "ecdf": 0.397, "esf": 0.603}, {"trace": 1.127, "density": 3.203, "ecdf": 0.776, "esf": 0.224}, {"trace": 1.064, "density": 4.362, "ecdf": 0.529, "esf": 0.471}, {"trace": 1.126, "density": 3.242, "ecdf": 0.771, "esf": 0.229}, {"trace": 1.023, "density": 4.371, "ecdf": 0.346, "esf": 0.654}, {"trace": 1.043, "density": 4.447, "ecdf": 0.434, "esf": 0.566}, {"trace": 1.033, "density": 4.421, "ecdf": 0.384, "esf": 0.616}, {"trace": 1.026, "density": 4.386, "ecdf": 0.356, "esf": 0.644}, {"trace": 1.112, "density": 3.628, "ecdf": 0.722, "esf": 0.278}, {"trace": 1.102, "density": 3.841, "ecdf": 0.684, "esf": 0.316}, {"trace": 1.341, "density": 0.085, "ecdf": 0.996, "esf": 0.003}, {"trace": 1.106, "density": 3.764, "ecdf": 0.7, "esf": 0.3}, {"trace": 1.093, "density": 3.997, "ecdf": 0.648, "esf": 0.352}, {"trace": 0.921, "density": 1.276, "ecdf": 0.04, "esf": 0.96}, {"trace": 0.992, "density": 3.669, "ecdf": 0.211, "esf": 0.789}, {"trace": 0.972, "density": 2.891, "ecdf": 0.148, "esf": 0.852}, {"trace": 0.904, "density": 0.791, "ecdf": 0.025, "esf": 0.975}, {"trace": 0.937, "density": 1.795, "ecdf": 0.068, "esf": 0.932}, {"trace": 0.883, "density": 0.474, "ecdf": 0.013, "esf": 0.987}, {"trace": 0.951, "density": 2.226, "ecdf": 0.094, "esf": 0.906}, {"trace": 0.912, "density": 1.005, "ecdf": 0.031, "esf": 0.969}, {"trace": 0.879, "density": 0.433, "ecdf": 0.011, "esf": 0.989}, {"trace": 1.15, "density": 2.542, "ecdf": 0.84, "esf": 0.16}, {"trace": 1.178, "density": 1.747, "ecdf": 0.9, "esf": 0.1}, {"trace": 1.157, "density": 2.341, "ecdf": 0.859, "esf": 0.141}, {"trace": 1.045, "density": 4.448, "ecdf": 0.439, "esf": 0.561}, {"trace": 1.156, "density": 2.385, "ecdf": 0.855, "esf": 0.145}, {"trace": 1.09, "density": 4.037, "ecdf": 0.637, "esf": 0.363}, {"trace": 0.942, "density": 1.957, "ecdf": 0.078, "esf": 0.922}, {"trace": 1.264, "density": 0.434, "ecdf": 0.98, "esf": 0.02}, {"trace": 1.161, "density": 2.247, "ecdf": 0.867, "esf": 0.133}, {"trace": 1.236, "density": 0.679, "ecdf": 0.965, "esf": 0.035}, {"trace": 1.259, "density": 0.47, "ecdf": 0.978, "esf": 0.022}, {"trace": 0.971, "density": 2.848, "ecdf": 0.145, "esf": 0.855}, {"trace": 1.082, "density": 4.165, "ecdf": 0.604, "esf": 0.396}, {"trace": 1.051, "density": 4.439, "ecdf": 0.466, "esf": 0.534}, {"trace": 1.258, "density": 0.477, "ecdf": 0.978, "esf": 0.022}, {"trace": 1.162, "density": 2.211, "ecdf": 0.869, "esf": 0.131}, {"trace": 1.193, "density": 1.412, "ecdf": 0.922, "esf": 0.078}, {"trace": 1.103, "density": 3.833, "ecdf": 0.687, "esf": 0.313}, {"trace": 1.144, "density": 2.716, "ecdf": 0.823, "esf": 0.177}, {"trace": 0.997, "density": 3.875, "ecdf": 0.231, "esf": 0.769}, {"trace": 0.94, "density": 1.892, "ecdf": 0.075, "esf": 0.925}, {"trace": 0.947, "density": 2.102, "ecdf": 0.085, "esf": 0.915}, {"trace": 0.919, "density": 1.213, "ecdf": 0.038, "esf": 0.962}, {"trace": 1.047, "density": 4.446, "ecdf": 0.451, "esf": 0.549}, {"trace": 1.145, "density": 2.692, "ecdf": 0.826, "esf": 0.174}, {"trace": 1.199, "density": 1.313, "ecdf": 0.93, "esf": 0.07}, {"trace": 0.922, "density": 1.321, "ecdf": 0.042, "esf": 0.958}, {"trace": 1.22, "density": 0.914, "ecdf": 0.953, "esf": 0.047}, {"trace": 0.967, "density": 2.735, "ecdf": 0.136, "esf": 0.864}, {"trace": 1.143, "density": 2.726, "ecdf": 0.822, "esf": 0.178}, {"trace": 0.978, "density": 3.096, "ecdf": 0.167, "esf": 0.833}, {"trace": 1.001, "density": 3.997, "ecdf": 0.247, "esf": 0.753}, {"trace": 1.038, "density": 4.439, "ecdf": 0.41, "esf": 0.59}, {"trace": 1.071, "density": 4.295, "ecdf": 0.557, "esf": 0.443}, {"trace": 1.005, "density": 4.118, "ecdf": 0.265, "esf": 0.735}, {"trace": 1.171, "density": 1.944, "ecdf": 0.888, "esf": 0.112}, {"trace": 1.139, "density": 2.842, "ecdf": 0.811, "esf": 0.189}, {"trace": 0.967, "density": 2.722, "ecdf": 0.134, "esf": 0.866}, {"trace": 1.089, "density": 4.059, "ecdf": 0.631, "esf": 0.369}, {"trace": 1.01, "density": 4.217, "ecdf": 0.284, "esf": 0.716}, {"trace": 1.084, "density": 4.136, "ecdf": 0.613, "esf": 0.387}, {"trace": 1.278, "density": 0.329, "ecdf": 0.986, "esf": 0.014}, {"trace": 0.958, "density": 2.434, "ecdf": 0.109, "esf": 0.891}, {"trace": 1.06, "density": 4.396, "ecdf": 0.507, "esf": 0.493}, {"trace": 1.118, "density": 3.463, "ecdf": 0.744, "esf": 0.256}, {"trace": 1.057, "density": 4.412, "ecdf": 0.496, "esf": 0.504}, {"trace": 1.135, "density": 2.977, "ecdf": 0.798, "esf": 0.202}, {"trace": 1.074, "density": 4.265, "ecdf": 0.568, "esf": 0.432}, {"trace": 0.98, "density": 3.175, "ecdf": 0.172, "esf": 0.828}, {"trace": 1.027, "density": 4.391, "ecdf": 0.36, "esf": 0.64}, {"trace": 1.099, "density": 3.894, "ecdf": 0.672, "esf": 0.328}, {"trace": 1.001, "density": 3.999, "ecdf": 0.248, "esf": 0.752}, {"trace": 0.971, "density": 2.839, "ecdf": 0.144, "esf": 0.856}, {"trace": 0.938, "density": 1.818, "ecdf": 0.069, "esf": 0.931}, {"trace": 1.068, "density": 4.334, "ecdf": 0.543, "esf": 0.457}, {"trace": 1.082, "density": 4.167, "ecdf": 0.603, "esf": 0.397}, {"trace": 1.009, "density": 4.209, "ecdf": 0.283, "esf": 0.717}, {"trace": 1.111, "density": 3.663, "ecdf": 0.717, "esf": 0.283}, {"trace": 1.002, "density": 4.019, "ecdf": 0.25, "esf": 0.75}, {"trace": 0.915, "density": 1.088, "ecdf": 0.034, "esf": 0.966}, {"trace": 0.99, "density": 3.589, "ecdf": 0.203, "esf": 0.797}, {"trace": 0.957, "density": 2.396, "ecdf": 0.106, "esf": 0.894}, {"trace": 1.136, "density": 2.93, "ecdf": 0.802, "esf": 0.198}, {"trace": 1.099, "density": 3.899, "ecdf": 0.671, "esf": 0.329}, {"trace": 1.04, "density": 4.443, "ecdf": 0.419, "esf": 0.581}, {"trace": 1.036, "density": 4.435, "ecdf": 0.402, "esf": 0.598}, {"trace": 1.004, "density": 4.092, "ecdf": 0.26, "esf": 0.74}, {"trace": 0.99, "density": 3.585, "ecdf": 0.202, "esf": 0.798}, {"trace": 1.109, "density": 3.689, "ecdf": 0.712, "esf": 0.288}, {"trace": 0.996, "density": 3.812, "ecdf": 0.224, "esf": 0.776}, {"trace": 0.951, "density": 2.207, "ecdf": 0.093, "esf": 0.907}, {"trace": 1.02, "density": 4.344, "ecdf": 0.329, "esf": 0.671}, {"trace": 1.447, "density": 0.011, "ecdf": 1.0, "esf": 0.0}, {"trace": 1.004, "density": 4.099, "ecdf": 0.261, "esf": 0.739}, {"trace": 1.202, "density": 1.249, "ecdf": 0.935, "esf": 0.065}, {"trace": 0.933, "density": 1.664, "ecdf": 0.058, "esf": 0.942}, {"trace": 1.331, "density": 0.103, "ecdf": 0.995, "esf": 0.005}, {"trace": 1.317, "density": 0.141, "ecdf": 0.994, "esf": 0.006}, {"trace": 0.954, "density": 2.325, "ecdf": 0.101, "esf": 0.899}, {"trace": 1.033, "density": 4.422, "ecdf": 0.385, "esf": 0.615}, {"trace": 1.19, "density": 1.472, "ecdf": 0.917, "esf": 0.083}, {"trace": 1.206, "density": 1.173, "ecdf": 0.94, "esf": 0.06}, {"trace": 1.144, "density": 2.706, "ecdf": 0.824, "esf": 0.176}, {"trace": 1.101, "density": 3.868, "ecdf": 0.678, "esf": 0.322}, {"trace": 1.127, "density": 3.194, "ecdf": 0.776, "esf": 0.224}, {"trace": 0.975, "density": 2.998, "ecdf": 0.158, "esf": 0.842}, {"trace": 1.09, "density": 4.039, "ecdf": 0.636, "esf": 0.364}, {"trace": 1.119, "density": 3.449, "ecdf": 0.746, "esf": 0.254}, {"trace": 1.017, "density": 4.315, "ecdf": 0.317, "esf": 0.683}, {"trace": 1.052, "density": 4.435, "ecdf": 0.473, "esf": 0.527}, {"trace": 1.086, "density": 4.099, "ecdf": 0.622, "esf": 0.378}, {"trace": 0.995, "density": 3.766, "ecdf": 0.218, "esf": 0.782}, {"trace": 0.913, "density": 1.018, "ecdf": 0.032, "esf": 0.968}, {"trace": 1.244, "density": 0.6, "ecdf": 0.97, "esf": 0.03}, {"trace": 1.058, "density": 4.409, "ecdf": 0.497, "esf": 0.503}, {"trace": 1.075, "density": 4.259, "ecdf": 0.571, "esf": 0.429}, {"trace": 1.116, "density": 3.536, "ecdf": 0.735, "esf": 0.265}, {"trace": 1.061, "density": 4.391, "ecdf": 0.51, "esf": 0.49}, {"trace": 1.062, "density": 4.381, "ecdf": 0.517, "esf": 0.483}, {"trace": 1.088, "density": 4.082, "ecdf": 0.626, "esf": 0.374}, {"trace": 1.011, "density": 4.248, "ecdf": 0.293, "esf": 0.707}, {"trace": 1.013, "density": 4.275, "ecdf": 0.302, "esf": 0.698}, {"trace": 1.037, "density": 4.437, "ecdf": 0.406, "esf": 0.594}, {"trace": 1.093, "density": 4.005, "ecdf": 0.646, "esf": 0.354}, {"trace": 1.004, "density": 4.081, "ecdf": 0.258, "esf": 0.742}, {"trace": 0.932, "density": 1.651, "ecdf": 0.058, "esf": 0.942}, {"trace": 1.289, "density": 0.254, "ecdf": 0.989, "esf": 0.011}, {"trace": 1.037, "density": 4.435, "ecdf": 0.403, "esf": 0.597}, {"trace": 1.116, "density": 3.527, "ecdf": 0.736, "esf": 0.264}, {"trace": 1.09, "density": 4.038, "ecdf": 0.636, "esf": 0.364}, {"trace": 0.984, "density": 3.344, "ecdf": 0.184, "esf": 0.816}, {"trace": 0.933, "density": 1.687, "ecdf": 0.06, "esf": 0.94}, {"trace": 1.169, "density": 2.014, "ecdf": 0.882, "esf": 0.118}, {"trace": 0.982, "density": 3.24, "ecdf": 0.176, "esf": 0.824}, {"trace": 1.132, "density": 3.071, "ecdf": 0.789, "esf": 0.211}, {"trace": 1.106, "density": 3.755, "ecdf": 0.702, "esf": 0.298}, {"trace": 0.951, "density": 2.211, "ecdf": 0.093, "esf": 0.907}, {"trace": 1.234, "density": 0.703, "ecdf": 0.964, "esf": 0.036}, {"trace": 0.93, "density": 1.57, "ecdf": 0.052, "esf": 0.948}, {"trace": 0.963, "density": 2.612, "ecdf": 0.124, "esf": 0.876}, {"trace": 0.871, "density": 0.347, "ecdf": 0.009, "esf": 0.991}, {"trace": 1.18, "density": 1.699, "ecdf": 0.904, "esf": 0.096}, {"trace": 1.17, "density": 1.968, "ecdf": 0.886, "esf": 0.114}, {"trace": 1.229, "density": 0.763, "ecdf": 0.96, "esf": 0.039}, {"trace": 1.046, "density": 4.447, "ecdf": 0.445, "esf": 0.555}, {"trace": 1.052, "density": 4.434, "ecdf": 0.476, "esf": 0.524}, {"trace": 1.061, "density": 4.389, "ecdf": 0.512, "esf": 0.488}, {"trace": 1.116, "density": 3.531, "ecdf": 0.735, "esf": 0.265}, {"trace": 0.952, "density": 2.239, "ecdf": 0.095, "esf": 0.905}, {"trace": 1.112, "density": 3.617, "ecdf": 0.724, "esf": 0.276}, {"trace": 1.213, "density": 1.041, "ecdf": 0.947, "esf": 0.053}, {"trace": 1.004, "density": 4.078, "ecdf": 0.257, "esf": 0.743}, {"trace": 1.026, "density": 4.389, "ecdf": 0.359, "esf": 0.641}, {"trace": 1.077, "density": 4.227, "ecdf": 0.581, "esf": 0.419}, {"trace": 1.035, "density": 4.431, "ecdf": 0.397, "esf": 0.603}, {"trace": 1.07, "density": 4.307, "ecdf": 0.553, "esf": 0.447}, {"trace": 1.082, "density": 4.168, "ecdf": 0.602, "esf": 0.397}, {"trace": 1.144, "density": 2.707, "ecdf": 0.824, "esf": 0.176}, {"trace": 1.051, "density": 4.438, "ecdf": 0.469, "esf": 0.531}, {"trace": 1.052, "density": 4.435, "ecdf": 0.474, "esf": 0.526}, {"trace": 1.181, "density": 1.676, "ecdf": 0.905, "esf": 0.095}, {"trace": 1.092, "density": 4.019, "ecdf": 0.641, "esf": 0.359}, {"trace": 1.175, "density": 1.824, "ecdf": 0.895, "esf": 0.105}, {"trace": 1.052, "density": 4.433, "ecdf": 0.477, "esf": 0.523}, {"trace": 1.144, "density": 2.7, "ecdf": 0.825, "esf": 0.175}, {"trace": 1.103, "density": 3.819, "ecdf": 0.69, "esf": 0.31}, {"trace": 1.05, "density": 4.441, "ecdf": 0.463, "esf": 0.537}, {"trace": 1.063, "density": 4.375, "ecdf": 0.521, "esf": 0.479}, {"trace": 1.034, "density": 4.426, "ecdf": 0.39, "esf": 0.61}, {"trace": 1.115, "density": 3.547, "ecdf": 0.733, "esf": 0.267}, {"trace": 1.056, "density": 4.42, "ecdf": 0.487, "esf": 0.513}, {"trace": 1.082, "density": 4.166, "ecdf": 0.603, "esf": 0.397}, {"trace": 1.06, "density": 4.394, "ecdf": 0.508, "esf": 0.492}, {"trace": 1.031, "density": 4.414, "ecdf": 0.377, "esf": 0.623}, {"trace": 0.992, "density": 3.652, "ecdf": 0.209, "esf": 0.791}, {"trace": 0.992, "density": 3.657, "ecdf": 0.21, "esf": 0.79}, {"trace": 1.028, "density": 4.399, "ecdf": 0.366, "esf": 0.635}, {"trace": 1.196, "density": 1.368, "ecdf": 0.925, "esf": 0.075}, {"trace": 1.17, "density": 1.968, "ecdf": 0.886, "esf": 0.114}, {"trace": 1.093, "density": 4.006, "ecdf": 0.645, "esf": 0.355}, {"trace": 1.037, "density": 4.437, "ecdf": 0.408, "esf": 0.592}, {"trace": 1.083, "density": 4.153, "ecdf": 0.608, "esf": 0.391}, {"trace": 1.031, "density": 4.412, "ecdf": 0.376, "esf": 0.624}, {"trace": 1.039, "density": 4.44, "ecdf": 0.414, "esf": 0.586}, {"trace": 0.999, "density": 3.921, "ecdf": 0.238, "esf": 0.762}, {"trace": 1.021, "density": 4.353, "ecdf": 0.334, "esf": 0.666}, {"trace": 1.131, "density": 3.1, "ecdf": 0.788, "esf": 0.212}, {"trace": 0.938, "density": 1.832, "ecdf": 0.07, "esf": 0.93}, {"trace": 0.961, "density": 2.519, "ecdf": 0.115, "esf": 0.885}, {"trace": 1.05, "density": 4.439, "ecdf": 0.466, "esf": 0.534}, {"trace": 1.076, "density": 4.241, "ecdf": 0.576, "esf": 0.424}, {"trace": 0.999, "density": 3.937, "ecdf": 0.24, "esf": 0.76}, {"trace": 1.03, "density": 4.408, "ecdf": 0.372, "esf": 0.628}, {"trace": 1.043, "density": 4.447, "ecdf": 0.433, "esf": 0.567}, {"trace": 1.135, "density": 2.962, "ecdf": 0.799, "esf": 0.201}, {"trace": 1.05, "density": 4.441, "ecdf": 0.462, "esf": 0.538}, {"trace": 1.028, "density": 4.4, "ecdf": 0.366, "esf": 0.634}, {"trace": 1.02, "density": 4.342, "ecdf": 0.328, "esf": 0.672}, {"trace": 0.997, "density": 3.854, "ecdf": 0.229, "esf": 0.771}, {"trace": 0.99, "density": 3.573, "ecdf": 0.202, "esf": 0.798}, {"trace": 1.06, "density": 4.397, "ecdf": 0.506, "esf": 0.494}, {"trace": 1.019, "density": 4.334, "ecdf": 0.324, "esf": 0.676}, {"trace": 1.132, "density": 3.045, "ecdf": 0.791, "esf": 0.209}, {"trace": 1.353, "density": 0.066, "ecdf": 0.997, "esf": 0.003}, {"trace": 1.084, "density": 4.129, "ecdf": 0.616, "esf": 0.384}, {"trace": 1.179, "density": 1.727, "ecdf": 0.902, "esf": 0.098}, {"trace": 1.271, "density": 0.38, "ecdf": 0.984, "esf": 0.016}, {"trace": 1.05, "density": 4.441, "ecdf": 0.464, "esf": 0.536}, {"trace": 1.207, "density": 1.148, "ecdf": 0.942, "esf": 0.058}, {"trace": 1.438, "density": 0.014, "ecdf": 1.0, "esf": 0.0}, {"trace": 1.131, "density": 3.101, "ecdf": 0.787, "esf": 0.213}, {"trace": 0.932, "density": 1.634, "ecdf": 0.057, "esf": 0.943}, {"trace": 0.949, "density": 2.168, "ecdf": 0.089, "esf": 0.911}, {"trace": 0.988, "density": 3.489, "ecdf": 0.195, "esf": 0.804}, {"trace": 1.093, "density": 4.006, "ecdf": 0.645, "esf": 0.355}, {"trace": 1.012, "density": 4.257, "ecdf": 0.294, "esf": 0.706}, {"trace": 1.1, "density": 3.887, "ecdf": 0.674, "esf": 0.326}, {"trace": 1.018, "density": 4.332, "ecdf": 0.324, "esf": 0.676}, {"trace": 0.971, "density": 2.848, "ecdf": 0.145, "esf": 0.855}, {"trace": 1.043, "density": 4.447, "ecdf": 0.432, "esf": 0.568}, {"trace": 1.081, "density": 4.176, "ecdf": 0.6, "esf": 0.4}, {"trace": 0.937, "density": 1.792, "ecdf": 0.067, "esf": 0.933}, {"trace": 1.148, "density": 2.591, "ecdf": 0.835, "esf": 0.165}, {"trace": 0.974, "density": 2.954, "ecdf": 0.155, "esf": 0.845}, {"trace": 1.015, "density": 4.3, "ecdf": 0.31, "esf": 0.69}, {"trace": 1.228, "density": 0.783, "ecdf": 0.96, "esf": 0.04}, {"trace": 1.15, "density": 2.553, "ecdf": 0.838, "esf": 0.161}, {"trace": 1.01, "density": 4.23, "ecdf": 0.288, "esf": 0.712}, {"trace": 1.125, "density": 3.28, "ecdf": 0.767, "esf": 0.233}, {"trace": 0.984, "density": 3.343, "ecdf": 0.184, "esf": 0.816}, {"trace": 1.055, "density": 4.424, "ecdf": 0.483, "esf": 0.517}, {"trace": 1.203, "density": 1.238, "ecdf": 0.936, "esf": 0.064}, {"trace": 1.284, "density": 0.287, "ecdf": 0.988, "esf": 0.012}, {"trace": 1.117, "density": 3.504, "ecdf": 0.738, "esf": 0.262}, {"trace": 1.024, "density": 4.373, "ecdf": 0.348, "esf": 0.653}, {"trace": 1.025, "density": 4.383, "ecdf": 0.354, "esf": 0.646}, {"trace": 0.995, "density": 3.783, "ecdf": 0.219, "esf": 0.781}, {"trace": 1.174, "density": 1.86, "ecdf": 0.893, "esf": 0.107}, {"trace": 1.167, "density": 2.066, "ecdf": 0.879, "esf": 0.121}, {"trace": 1.104, "density": 3.801, "ecdf": 0.694, "esf": 0.306}, {"trace": 1.043, "density": 4.447, "ecdf": 0.435, "esf": 0.565}, {"trace": 1.31, "density": 0.165, "ecdf": 0.993, "esf": 0.007}, {"trace": 0.965, "density": 2.654, "ecdf": 0.127, "esf": 0.873}, {"trace": 1.053, "density": 4.43, "ecdf": 0.479, "esf": 0.521}, {"trace": 1.176, "density": 1.79, "ecdf": 0.898, "esf": 0.102}, {"trace": 0.966, "density": 2.695, "ecdf": 0.132, "esf": 0.868}, {"trace": 1.152, "density": 2.487, "ecdf": 0.844, "esf": 0.156}, {"trace": 1.023, "density": 4.37, "ecdf": 0.345, "esf": 0.655}, {"trace": 0.996, "density": 3.805, "ecdf": 0.222, "esf": 0.778}, {"trace": 1.13, "density": 3.111, "ecdf": 0.786, "esf": 0.214}, {"trace": 1.071, "density": 4.302, "ecdf": 0.555, "esf": 0.445}, {"trace": 1.171, "density": 1.953, "ecdf": 0.887, "esf": 0.113}, {"trace": 1.118, "density": 3.468, "ecdf": 0.743, "esf": 0.257}, {"trace": 0.965, "density": 2.669, "ecdf": 0.129, "esf": 0.871}, {"trace": 1.138, "density": 2.878, "ecdf": 0.807, "esf": 0.193}, {"trace": 1.059, "density": 4.401, "ecdf": 0.503, "esf": 0.497}, {"trace": 1.065, "density": 4.357, "ecdf": 0.532, "esf": 0.468}, {"trace": 0.971, "density": 2.845, "ecdf": 0.144, "esf": 0.856}, {"trace": 1.142, "density": 2.774, "ecdf": 0.816, "esf": 0.184}, {"trace": 1.05, "density": 4.442, "ecdf": 0.461, "esf": 0.539}, {"trace": 1.043, "density": 4.447, "ecdf": 0.43, "esf": 0.57}, {"trace": 1.039, "density": 4.441, "ecdf": 0.415, "esf": 0.585}, {"trace": 1.094, "density": 3.98, "ecdf": 0.652, "esf": 0.348}, {"trace": 1.015, "density": 4.296, "ecdf": 0.309, "esf": 0.691}, {"trace": 1.0, "density": 3.972, "ecdf": 0.244, "esf": 0.756}, {"trace": 0.849, "density": 0.16, "ecdf": 0.004, "esf": 0.996}, {"trace": 1.154, "density": 2.435, "ecdf": 0.85, "esf": 0.15}, {"trace": 0.961, "density": 2.534, "ecdf": 0.117, "esf": 0.883}, {"trace": 1.26, "density": 0.462, "ecdf": 0.979, "esf": 0.021}, {"trace": 1.158, "density": 2.338, "ecdf": 0.859, "esf": 0.141}, {"trace": 1.32, "density": 0.131, "ecdf": 0.994, "esf": 0.005}, {"trace": 1.286, "density": 0.27, "ecdf": 0.988, "esf": 0.012}, {"trace": 1.114, "density": 3.583, "ecdf": 0.728, "esf": 0.272}, {"trace": 1.06, "density": 4.398, "ecdf": 0.506, "esf": 0.494}, {"trace": 0.944, "density": 1.997, "ecdf": 0.08, "esf": 0.92}, {"trace": 1.007, "density": 4.151, "ecdf": 0.272, "esf": 0.728}, {"trace": 1.049, "density": 4.443, "ecdf": 0.458, "esf": 0.542}, {"trace": 1.038, "density": 4.438, "ecdf": 0.408, "esf": 0.592}, {"trace": 1.031, "density": 4.411, "ecdf": 0.374, "esf": 0.626}, {"trace": 1.136, "density": 2.931, "ecdf": 0.802, "esf": 0.198}, {"trace": 0.938, "density": 1.837, "ecdf": 0.071, "esf": 0.929}, {"trace": 0.976, "density": 3.01, "ecdf": 0.159, "esf": 0.841}, {"trace": 1.351, "density": 0.069, "ecdf": 0.997, "esf": 0.003}, {"trace": 0.991, "density": 3.616, "ecdf": 0.205, "esf": 0.795}, {"trace": 1.166, "density": 2.102, "ecdf": 0.877, "esf": 0.123}, {"trace": 1.197, "density": 1.342, "ecdf": 0.927, "esf": 0.073}, {"trace": 1.067, "density": 4.337, "ecdf": 0.542, "esf": 0.458}, {"trace": 1.028, "density": 4.397, "ecdf": 0.364, "esf": 0.636}, {"trace": 1.064, "density": 4.365, "ecdf": 0.528, "esf": 0.472}, {"trace": 1.065, "density": 4.362, "ecdf": 0.53, "esf": 0.47}, {"trace": 1.086, "density": 4.108, "ecdf": 0.619, "esf": 0.381}, {"trace": 0.954, "density": 2.323, "ecdf": 0.1, "esf": 0.9}, {"trace": 1.133, "density": 3.032, "ecdf": 0.792, "esf": 0.208}, {"trace": 0.985, "density": 3.356, "ecdf": 0.185, "esf": 0.815}, {"trace": 1.07, "density": 4.31, "ecdf": 0.552, "esf": 0.448}, {"trace": 1.137, "density": 2.905, "ecdf": 0.805, "esf": 0.195}, {"trace": 1.007, "density": 4.159, "ecdf": 0.273, "esf": 0.727}, {"trace": 1.006, "density": 4.131, "ecdf": 0.267, "esf": 0.733}, {"trace": 1.277, "density": 0.329, "ecdf": 0.986, "esf": 0.014}, {"trace": 1.266, "density": 0.417, "ecdf": 0.981, "esf": 0.019}, {"trace": 0.877, "density": 0.406, "ecdf": 0.01, "esf": 0.99}, {"trace": 0.932, "density": 1.639, "ecdf": 0.057, "esf": 0.943}, {"trace": 1.065, "density": 4.355, "ecdf": 0.534, "esf": 0.466}, {"trace": 0.881, "density": 0.447, "ecdf": 0.012, "esf": 0.988}, {"trace": 1.032, "density": 4.418, "ecdf": 0.381, "esf": 0.619}, {"trace": 1.035, "density": 4.429, "ecdf": 0.393, "esf": 0.607}, {"trace": 1.025, "density": 4.378, "ecdf": 0.35, "esf": 0.65}, {"trace": 0.986, "density": 3.4, "ecdf": 0.189, "esf": 0.811}, {"trace": 1.141, "density": 2.789, "ecdf": 0.815, "esf": 0.185}, {"trace": 1.09, "density": 4.051, "ecdf": 0.633, "esf": 0.367}, {"trace": 1.108, "density": 3.711, "ecdf": 0.708, "esf": 0.292}, {"trace": 1.038, "density": 4.44, "ecdf": 0.414, "esf": 0.586}, {"trace": 1.08, "density": 4.186, "ecdf": 0.597, "esf": 0.403}, {"trace": 1.007, "density": 4.173, "ecdf": 0.277, "esf": 0.723}, {"trace": 1.011, "density": 4.237, "ecdf": 0.29, "esf": 0.71}, {"trace": 1.158, "density": 2.325, "ecdf": 0.86, "esf": 0.14}, {"trace": 0.93, "density": 1.57, "ecdf": 0.052, "esf": 0.948}, {"trace": 1.196, "density": 1.356, "ecdf": 0.925, "esf": 0.075}, {"trace": 1.125, "density": 3.279, "ecdf": 0.767, "esf": 0.233}, {"trace": 1.131, "density": 3.089, "ecdf": 0.788, "esf": 0.212}, {"trace": 1.036, "density": 4.434, "ecdf": 0.402, "esf": 0.598}, {"trace": 1.006, "density": 4.15, "ecdf": 0.271, "esf": 0.729}, {"trace": 0.927, "density": 1.493, "ecdf": 0.048, "esf": 0.952}, {"trace": 1.005, "density": 4.127, "ecdf": 0.267, "esf": 0.733}, {"trace": 0.931, "density": 1.625, "ecdf": 0.056, "esf": 0.944}, {"trace": 1.086, "density": 4.104, "ecdf": 0.621, "esf": 0.379}, {"trace": 0.966, "density": 2.687, "ecdf": 0.131, "esf": 0.869}, {"trace": 1.039, "density": 4.441, "ecdf": 0.415, "esf": 0.585}, {"trace": 1.217, "density": 0.954, "ecdf": 0.952, "esf": 0.048}, {"trace": 1.12, "density": 3.425, "ecdf": 0.749, "esf": 0.251}, {"trace": 1.104, "density": 3.797, "ecdf": 0.695, "esf": 0.305}, {"trace": 1.079, "density": 4.209, "ecdf": 0.588, "esf": 0.412}, {"trace": 0.941, "density": 1.925, "ecdf": 0.076, "esf": 0.924}, {"trace": 1.057, "density": 4.412, "ecdf": 0.496, "esf": 0.504}, {"trace": 1.098, "density": 3.91, "ecdf": 0.668, "esf": 0.332}, {"trace": 1.075, "density": 4.259, "ecdf": 0.571, "esf": 0.429}, {"trace": 1.012, "density": 4.264, "ecdf": 0.296, "esf": 0.704}, {"trace": 0.93, "density": 1.579, "ecdf": 0.052, "esf": 0.948}, {"trace": 1.196, "density": 1.351, "ecdf": 0.926, "esf": 0.074}, {"trace": 1.088, "density": 4.077, "ecdf": 0.627, "esf": 0.373}, {"trace": 1.187, "density": 1.533, "ecdf": 0.913, "esf": 0.087}, {"trace": 0.939, "density": 1.866, "ecdf": 0.073, "esf": 0.927}, {"trace": 0.959, "density": 2.456, "ecdf": 0.111, "esf": 0.889}, {"trace": 1.155, "density": 2.402, "ecdf": 0.853, "esf": 0.147}, {"trace": 0.952, "density": 2.247, "ecdf": 0.096, "esf": 0.904}, {"trace": 1.13, "density": 3.115, "ecdf": 0.785, "esf": 0.215}, {"trace": 0.922, "density": 1.297, "ecdf": 0.041, "esf": 0.959}, {"trace": 1.202, "density": 1.252, "ecdf": 0.935, "esf": 0.065}, {"trace": 0.973, "density": 2.937, "ecdf": 0.153, "esf": 0.847}, {"trace": 1.17, "density": 1.979, "ecdf": 0.885, "esf": 0.115}, {"trace": 0.93, "density": 1.592, "ecdf": 0.053, "esf": 0.947}, {"trace": 1.029, "density": 4.402, "ecdf": 0.367, "esf": 0.633}, {"trace": 1.003, "density": 4.066, "ecdf": 0.255, "esf": 0.745}, {"trace": 0.852, "density": 0.182, "ecdf": 0.004, "esf": 0.996}, {"trace": 0.904, "density": 0.805, "ecdf": 0.026, "esf": 0.974}, {"trace": 0.968, "density": 2.754, "ecdf": 0.137, "esf": 0.863}, {"trace": 0.967, "density": 2.725, "ecdf": 0.135, "esf": 0.865}, {"trace": 1.043, "density": 4.447, "ecdf": 0.43, "esf": 0.57}, {"trace": 1.102, "density": 3.842, "ecdf": 0.684, "esf": 0.316}, {"trace": 0.899, "density": 0.69, "ecdf": 0.021, "esf": 0.979}, {"trace": 1.193, "density": 1.412, "ecdf": 0.922, "esf": 0.078}, {"trace": 0.89, "density": 0.566, "ecdf": 0.017, "esf": 0.983}, {"trace": 0.936, "density": 1.774, "ecdf": 0.066, "esf": 0.934}, {"trace": 1.175, "density": 1.841, "ecdf": 0.893, "esf": 0.107}, {"trace": 1.159, "density": 2.289, "ecdf": 0.863, "esf": 0.137}, {"trace": 1.104, "density": 3.805, "ecdf": 0.693, "esf": 0.307}, {"trace": 1.062, "density": 4.381, "ecdf": 0.517, "esf": 0.483}, {"trace": 1.237, "density": 0.669, "ecdf": 0.966, "esf": 0.034}, {"trace": 1.169, "density": 2.007, "ecdf": 0.883, "esf": 0.117}, {"trace": 1.083, "density": 4.144, "ecdf": 0.611, "esf": 0.389}, {"trace": 1.007, "density": 4.162, "ecdf": 0.274, "esf": 0.726}, {"trace": 1.067, "density": 4.345, "ecdf": 0.539, "esf": 0.461}, {"trace": 0.88, "density": 0.436, "ecdf": 0.011, "esf": 0.989}, {"trace": 1.121, "density": 3.394, "ecdf": 0.753, "esf": 0.247}, {"trace": 1.011, "density": 4.238, "ecdf": 0.29, "esf": 0.71}, {"trace": 1.025, "density": 4.38, "ecdf": 0.351, "esf": 0.649}, {"trace": 1.106, "density": 3.772, "ecdf": 0.698, "esf": 0.302}, {"trace": 1.016, "density": 4.313, "ecdf": 0.315, "esf": 0.685}, {"trace": 1.018, "density": 4.332, "ecdf": 0.324, "esf": 0.676}, {"trace": 1.079, "density": 4.204, "ecdf": 0.591, "esf": 0.409}, {"trace": 1.095, "density": 3.964, "ecdf": 0.656, "esf": 0.344}, {"trace": 1.211, "density": 1.082, "ecdf": 0.946, "esf": 0.054}, {"trace": 0.971, "density": 2.855, "ecdf": 0.146, "esf": 0.854}, {"trace": 1.111, "density": 3.639, "ecdf": 0.72, "esf": 0.28}, {"trace": 0.997, "density": 3.846, "ecdf": 0.228, "esf": 0.772}, {"trace": 1.168, "density": 2.028, "ecdf": 0.881, "esf": 0.119}, {"trace": 1.151, "density": 2.514, "ecdf": 0.842, "esf": 0.158}, {"trace": 0.96, "density": 2.485, "ecdf": 0.113, "esf": 0.887}, {"trace": 0.949, "density": 2.167, "ecdf": 0.089, "esf": 0.911}, {"trace": 0.993, "density": 3.691, "ecdf": 0.212, "esf": 0.788}, {"trace": 1.061, "density": 4.388, "ecdf": 0.513, "esf": 0.487}, {"trace": 1.114, "density": 3.583, "ecdf": 0.728, "esf": 0.272}, {"trace": 1.092, "density": 4.014, "ecdf": 0.642, "esf": 0.358}, {"trace": 1.168, "density": 2.026, "ecdf": 0.881, "esf": 0.119}, {"trace": 0.958, "density": 2.427, "ecdf": 0.108, "esf": 0.892}, {"trace": 1.139, "density": 2.859, "ecdf": 0.809, "esf": 0.191}, {"trace": 0.922, "density": 1.313, "ecdf": 0.041, "esf": 0.959}, {"trace": 0.965, "density": 2.661, "ecdf": 0.128, "esf": 0.872}, {"trace": 0.991, "density": 3.601, "ecdf": 0.204, "esf": 0.796}, {"trace": 0.954, "density": 2.318, "ecdf": 0.1, "esf": 0.9}, {"trace": 1.102, "density": 3.849, "ecdf": 0.682, "esf": 0.318}, {"trace": 1.004, "density": 4.079, "ecdf": 0.257, "esf": 0.743}, {"trace": 0.99, "density": 3.582, "ecdf": 0.202, "esf": 0.798}, {"trace": 1.123, "density": 3.314, "ecdf": 0.763, "esf": 0.237}, {"trace": 1.048, "density": 4.445, "ecdf": 0.455, "esf": 0.545}, {"trace": 0.982, "density": 3.265, "ecdf": 0.178, "esf": 0.822}, {"trace": 1.005, "density": 4.111, "ecdf": 0.263, "esf": 0.737}, {"trace": 0.906, "density": 0.842, "ecdf": 0.028, "esf": 0.972}, {"trace": 1.167, "density": 2.047, "ecdf": 0.88, "esf": 0.12}, {"trace": 1.259, "density": 0.465, "ecdf": 0.978, "esf": 0.022}, {"trace": 1.086, "density": 4.104, "ecdf": 0.621, "esf": 0.379}, {"trace": 1.009, "density": 4.21, "ecdf": 0.284, "esf": 0.716}, {"trace": 1.136, "density": 2.949, "ecdf": 0.8, "esf": 0.2}, {"trace": 0.928, "density": 1.509, "ecdf": 0.049, "esf": 0.951}, {"trace": 1.192, "density": 1.432, "ecdf": 0.92, "esf": 0.08}, {"trace": 1.013, "density": 4.268, "ecdf": 0.298, "esf": 0.702}, {"trace": 1.056, "density": 4.42, "ecdf": 0.488, "esf": 0.512}, {"trace": 1.002, "density": 4.018, "ecdf": 0.25, "esf": 0.75}, {"trace": 1.048, "density": 4.444, "ecdf": 0.456, "esf": 0.544}, {"trace": 1.094, "density": 3.987, "ecdf": 0.65, "esf": 0.35}, {"trace": 1.081, "density": 4.175, "ecdf": 0.601, "esf": 0.399}, {"trace": 1.071, "density": 4.303, "ecdf": 0.554, "esf": 0.446}, {"trace": 0.964, "density": 2.616, "ecdf": 0.124, "esf": 0.876}, {"trace": 1.09, "density": 4.041, "ecdf": 0.635, "esf": 0.365}, {"trace": 1.093, "density": 3.992, "ecdf": 0.649, "esf": 0.351}, {"trace": 1.204, "density": 1.218, "ecdf": 0.937, "esf": 0.063}, {"trace": 1.078, "density": 4.219, "ecdf": 0.585, "esf": 0.415}, {"trace": 1.022, "density": 4.364, "ecdf": 0.342, "esf": 0.658}, {"trace": 1.281, "density": 0.308, "ecdf": 0.987, "esf": 0.013}, {"trace": 1.059, "density": 4.399, "ecdf": 0.504, "esf": 0.496}, {"trace": 1.18, "density": 1.687, "ecdf": 0.904, "esf": 0.096}, {"trace": 1.033, "density": 4.422, "ecdf": 0.384, "esf": 0.616}, {"trace": 1.209, "density": 1.104, "ecdf": 0.944, "esf": 0.055}, {"trace": 0.903, "density": 0.766, "ecdf": 0.024, "esf": 0.976}, {"trace": 1.257, "density": 0.483, "ecdf": 0.977, "esf": 0.023}, {"trace": 1.081, "density": 4.17, "ecdf": 0.602, "esf": 0.398}, {"trace": 1.163, "density": 2.187, "ecdf": 0.871, "esf": 0.129}, {"trace": 1.193, "density": 1.419, "ecdf": 0.921, "esf": 0.079}, {"trace": 1.181, "density": 1.662, "ecdf": 0.907, "esf": 0.093}, {"trace": 1.223, "density": 0.863, "ecdf": 0.956, "esf": 0.044}, {"trace": 1.114, "density": 3.568, "ecdf": 0.73, "esf": 0.27}, {"trace": 1.128, "density": 3.18, "ecdf": 0.778, "esf": 0.222}, {"trace": 1.032, "density": 4.416, "ecdf": 0.38, "esf": 0.62}, {"trace": 1.126, "density": 3.242, "ecdf": 0.771, "esf": 0.229}, {"trace": 1.118, "density": 3.464, "ecdf": 0.744, "esf": 0.256}, {"trace": 1.029, "density": 4.405, "ecdf": 0.37, "esf": 0.631}, {"trace": 1.116, "density": 3.534, "ecdf": 0.735, "esf": 0.265}, {"trace": 1.161, "density": 2.252, "ecdf": 0.866, "esf": 0.134}, {"trace": 1.003, "density": 4.069, "ecdf": 0.256, "esf": 0.744}, {"trace": 1.0, "density": 3.963, "ecdf": 0.242, "esf": 0.758}, {"trace": 1.317, "density": 0.139, "ecdf": 0.994, "esf": 0.006}, {"trace": 1.297, "density": 0.217, "ecdf": 0.99, "esf": 0.01}, {"trace": 1.236, "density": 0.684, "ecdf": 0.965, "esf": 0.035}, {"trace": 0.983, "density": 3.282, "ecdf": 0.179, "esf": 0.821}, {"trace": 1.075, "density": 4.257, "ecdf": 0.572, "esf": 0.428}, {"trace": 1.022, "density": 4.361, "ecdf": 0.34, "esf": 0.66}, {"trace": 1.005, "density": 4.126, "ecdf": 0.266, "esf": 0.734}, {"trace": 0.957, "density": 2.392, "ecdf": 0.106, "esf": 0.894}, {"trace": 1.106, "density": 3.772, "ecdf": 0.698, "esf": 0.302}, {"trace": 0.957, "density": 2.412, "ecdf": 0.107, "esf": 0.893}, {"trace": 1.182, "density": 1.649, "ecdf": 0.907, "esf": 0.093}, {"trace": 0.995, "density": 3.78, "ecdf": 0.219, "esf": 0.781}, {"trace": 0.943, "density": 1.976, "ecdf": 0.078, "esf": 0.922}, {"trace": 0.96, "density": 2.491, "ecdf": 0.113, "esf": 0.887}, {"trace": 1.191, "density": 1.462, "ecdf": 0.918, "esf": 0.082}, {"trace": 1.046, "density": 4.447, "ecdf": 0.446, "esf": 0.554}, {"trace": 1.091, "density": 4.036, "ecdf": 0.637, "esf": 0.363}, {"trace": 1.066, "density": 4.346, "ecdf": 0.538, "esf": 0.462}, {"trace": 1.124, "density": 3.303, "ecdf": 0.764, "esf": 0.236}, {"trace": 1.045, "density": 4.448, "ecdf": 0.441, "esf": 0.559}, {"trace": 1.034, "density": 4.425, "ecdf": 0.387, "esf": 0.613}, {"trace": 0.901, "density": 0.731, "ecdf": 0.023, "esf": 0.977}, {"trace": 1.045, "density": 4.448, "ecdf": 0.439, "esf": 0.561}, {"trace": 0.95, "density": 2.183, "ecdf": 0.091, "esf": 0.909}, {"trace": 1.175, "density": 1.822, "ecdf": 0.896, "esf": 0.104}, {"trace": 1.107, "density": 3.743, "ecdf": 0.703, "esf": 0.297}, {"trace": 1.094, "density": 3.989, "ecdf": 0.65, "esf": 0.35}, {"trace": 1.114, "density": 3.567, "ecdf": 0.731, "esf": 0.269}, {"trace": 0.941, "density": 1.915, "ecdf": 0.076, "esf": 0.924}, {"trace": 0.933, "density": 1.662, "ecdf": 0.058, "esf": 0.942}, {"trace": 1.228, "density": 0.783, "ecdf": 0.96, "esf": 0.04}, {"trace": 1.022, "density": 4.361, "ecdf": 0.339, "esf": 0.661}, {"trace": 1.197, "density": 1.349, "ecdf": 0.926, "esf": 0.074}, {"trace": 0.936, "density": 1.767, "ecdf": 0.066, "esf": 0.934}, {"trace": 0.972, "density": 2.899, "ecdf": 0.149, "esf": 0.851}, {"trace": 0.993, "density": 3.706, "ecdf": 0.214, "esf": 0.786}, {"trace": 1.008, "density": 4.182, "ecdf": 0.278, "esf": 0.722}, {"trace": 0.974, "density": 2.951, "ecdf": 0.154, "esf": 0.846}, {"trace": 0.941, "density": 1.929, "ecdf": 0.077, "esf": 0.923}, {"trace": 1.135, "density": 2.972, "ecdf": 0.798, "esf": 0.202}, {"trace": 1.079, "density": 4.208, "ecdf": 0.589, "esf": 0.411}, {"trace": 1.044, "density": 4.448, "ecdf": 0.436, "esf": 0.564}, {"trace": 1.023, "density": 4.367, "ecdf": 0.343, "esf": 0.657}, {"trace": 1.131, "density": 3.078, "ecdf": 0.789, "esf": 0.211}, {"trace": 0.979, "density": 3.151, "ecdf": 0.17, "esf": 0.83}, {"trace": 1.123, "density": 3.323, "ecdf": 0.761, "esf": 0.239}, {"trace": 1.007, "density": 4.156, "ecdf": 0.272, "esf": 0.728}, {"trace": 1.107, "density": 3.737, "ecdf": 0.704, "esf": 0.296}, {"trace": 1.069, "density": 4.317, "ecdf": 0.55, "esf": 0.45}, {"trace": 1.023, "density": 4.369, "ecdf": 0.344, "esf": 0.656}, {"trace": 0.883, "density": 0.473, "ecdf": 0.013, "esf": 0.987}, {"trace": 0.976, "density": 3.036, "ecdf": 0.161, "esf": 0.839}, {"trace": 1.07, "density": 4.315, "ecdf": 0.551, "esf": 0.449}, {"trace": 1.067, "density": 4.338, "ecdf": 0.54, "esf": 0.46}, {"trace": 1.154, "density": 2.43, "ecdf": 0.85, "esf": 0.15}, {"trace": 1.083, "density": 4.141, "ecdf": 0.611, "esf": 0.389}, {"trace": 1.038, "density": 4.439, "ecdf": 0.41, "esf": 0.59}, {"trace": 1.001, "density": 4.003, "ecdf": 0.248, "esf": 0.752}, {"trace": 1.045, "density": 4.448, "ecdf": 0.44, "esf": 0.56}, {"trace": 1.101, "density": 3.858, "ecdf": 0.68, "esf": 0.32}, {"trace": 1.12, "density": 3.404, "ecdf": 0.752, "esf": 0.248}, {"trace": 1.1, "density": 3.876, "ecdf": 0.676, "esf": 0.324}, {"trace": 1.103, "density": 3.822, "ecdf": 0.69, "esf": 0.31}, {"trace": 1.164, "density": 2.152, "ecdf": 0.873, "esf": 0.127}, {"trace": 1.025, "density": 4.378, "ecdf": 0.35, "esf": 0.65}, {"trace": 1.121, "density": 3.387, "ecdf": 0.753, "esf": 0.247}, {"trace": 1.106, "density": 3.754, "ecdf": 0.702, "esf": 0.298}, {"trace": 1.079, "density": 4.205, "ecdf": 0.59, "esf": 0.41}, {"trace": 1.119, "density": 3.452, "ecdf": 0.746, "esf": 0.254}, {"trace": 1.193, "density": 1.407, "ecdf": 0.922, "esf": 0.078}, {"trace": 0.964, "density": 2.639, "ecdf": 0.126, "esf": 0.874}, {"trace": 1.065, "density": 4.361, "ecdf": 0.531, "esf": 0.469}, {"trace": 1.112, "density": 3.618, "ecdf": 0.723, "esf": 0.277}, {"trace": 1.087, "density": 4.093, "ecdf": 0.624, "esf": 0.376}, {"trace": 0.883, "density": 0.478, "ecdf": 0.014, "esf": 0.986}, {"trace": 0.925, "density": 1.398, "ecdf": 0.044, "esf": 0.956}, {"trace": 1.012, "density": 4.262, "ecdf": 0.296, "esf": 0.704}, {"trace": 1.082, "density": 4.16, "ecdf": 0.606, "esf": 0.394}, {"trace": 0.962, "density": 2.564, "ecdf": 0.12, "esf": 0.88}, {"trace": 0.979, "density": 3.137, "ecdf": 0.169, "esf": 0.83}, {"trace": 1.113, "density": 3.609, "ecdf": 0.725, "esf": 0.275}, {"trace": 1.199, "density": 1.298, "ecdf": 0.931, "esf": 0.069}, {"trace": 1.046, "density": 4.447, "ecdf": 0.443, "esf": 0.557}, {"trace": 1.04, "density": 4.443, "ecdf": 0.42, "esf": 0.58}, {"trace": 1.052, "density": 4.436, "ecdf": 0.472, "esf": 0.528}, {"trace": 1.029, "density": 4.404, "ecdf": 0.369, "esf": 0.631}, {"trace": 1.1, "density": 3.888, "ecdf": 0.674, "esf": 0.326}, {"trace": 1.016, "density": 4.313, "ecdf": 0.316, "esf": 0.684}, {"trace": 1.113, "density": 3.591, "ecdf": 0.726, "esf": 0.273}, {"trace": 0.987, "density": 3.434, "ecdf": 0.192, "esf": 0.808}, {"trace": 1.07, "density": 4.313, "ecdf": 0.551, "esf": 0.449}, {"trace": 0.979, "density": 3.148, "ecdf": 0.17, "esf": 0.83}, {"trace": 1.179, "density": 1.732, "ecdf": 0.901, "esf": 0.099}, {"trace": 1.121, "density": 3.38, "ecdf": 0.754, "esf": 0.246}, {"trace": 1.222, "density": 0.871, "ecdf": 0.955, "esf": 0.045}, {"trace": 1.184, "density": 1.602, "ecdf": 0.91, "esf": 0.09}, {"trace": 0.942, "density": 1.959, "ecdf": 0.078, "esf": 0.922}, {"trace": 1.023, "density": 4.371, "ecdf": 0.346, "esf": 0.654}, {"trace": 0.915, "density": 1.1, "ecdf": 0.034, "esf": 0.966}, {"trace": 0.922, "density": 1.307, "ecdf": 0.041, "esf": 0.959}, {"trace": 0.923, "density": 1.335, "ecdf": 0.042, "esf": 0.958}, {"trace": 1.044, "density": 4.448, "ecdf": 0.437, "esf": 0.563}, {"trace": 1.017, "density": 4.319, "ecdf": 0.319, "esf": 0.681}, {"trace": 0.953, "density": 2.281, "ecdf": 0.098, "esf": 0.902}, {"trace": 1.005, "density": 4.113, "ecdf": 0.264, "esf": 0.736}, {"trace": 1.084, "density": 4.131, "ecdf": 0.615, "esf": 0.385}, {"trace": 1.071, "density": 4.299, "ecdf": 0.556, "esf": 0.444}, {"trace": 1.184, "density": 1.605, "ecdf": 0.91, "esf": 0.09}, {"trace": 1.143, "density": 2.73, "ecdf": 0.822, "esf": 0.178}, {"trace": 0.946, "density": 2.073, "ecdf": 0.084, "esf": 0.916}, {"trace": 1.141, "density": 2.781, "ecdf": 0.816, "esf": 0.184}, {"trace": 0.999, "density": 3.927, "ecdf": 0.239, "esf": 0.761}, {"trace": 1.025, "density": 4.383, "ecdf": 0.354, "esf": 0.646}, {"trace": 1.187, "density": 1.543, "ecdf": 0.913, "esf": 0.087}, {"trace": 1.342, "density": 0.083, "ecdf": 0.997, "esf": 0.003}, {"trace": 0.923, "density": 1.357, "ecdf": 0.043, "esf": 0.957}, {"trace": 1.049, "density": 4.442, "ecdf": 0.461, "esf": 0.539}, {"trace": 0.959, "density": 2.463, "ecdf": 0.111, "esf": 0.889}, {"trace": 0.992, "density": 3.662, "ecdf": 0.21, "esf": 0.79}, {"trace": 1.062, "density": 4.381, "ecdf": 0.517, "esf": 0.483}, {"trace": 0.956, "density": 2.361, "ecdf": 0.104, "esf": 0.896}, {"trace": 0.969, "density": 2.804, "ecdf": 0.141, "esf": 0.859}, {"trace": 1.159, "density": 2.288, "ecdf": 0.863, "esf": 0.137}, {"trace": 1.146, "density": 2.661, "ecdf": 0.828, "esf": 0.172}, {"trace": 1.049, "density": 4.443, "ecdf": 0.458, "esf": 0.542}, {"trace": 1.003, "density": 4.058, "ecdf": 0.254, "esf": 0.746}, {"trace": 1.209, "density": 1.12, "ecdf": 0.943, "esf": 0.057}, {"trace": 0.954, "density": 2.318, "ecdf": 0.1, "esf": 0.9}, {"trace": 1.266, "density": 0.415, "ecdf": 0.981, "esf": 0.019}, {"trace": 1.062, "density": 4.38, "ecdf": 0.518, "esf": 0.482}, {"trace": 1.085, "density": 4.125, "ecdf": 0.617, "esf": 0.383}, {"trace": 1.176, "density": 1.804, "ecdf": 0.897, "esf": 0.103}, {"trace": 1.173, "density": 1.889, "ecdf": 0.891, "esf": 0.109}, {"trace": 0.97, "density": 2.812, "ecdf": 0.142, "esf": 0.858}, {"trace": 1.03, "density": 4.406, "ecdf": 0.37, "esf": 0.63}, {"trace": 1.152, "density": 2.499, "ecdf": 0.843, "esf": 0.157}, {"trace": 1.049, "density": 4.443, "ecdf": 0.459, "esf": 0.541}, {"trace": 1.027, "density": 4.394, "ecdf": 0.362, "esf": 0.638}, {"trace": 1.011, "density": 4.247, "ecdf": 0.293, "esf": 0.707}, {"trace": 1.203, "density": 1.236, "ecdf": 0.936, "esf": 0.064}, {"trace": 0.944, "density": 2.016, "ecdf": 0.081, "esf": 0.919}, {"trace": 1.162, "density": 2.197, "ecdf": 0.87, "esf": 0.13}, {"trace": 1.055, "density": 4.422, "ecdf": 0.486, "esf": 0.514}, {"trace": 1.091, "density": 4.025, "ecdf": 0.639, "esf": 0.361}, {"trace": 1.017, "density": 4.314, "ecdf": 0.316, "esf": 0.684}, {"trace": 1.214, "density": 1.013, "ecdf": 0.949, "esf": 0.051}, {"trace": 1.278, "density": 0.323, "ecdf": 0.986, "esf": 0.014}, {"trace": 1.193, "density": 1.41, "ecdf": 0.922, "esf": 0.078}, {"trace": 1.105, "density": 3.777, "ecdf": 0.698, "esf": 0.302}, {"trace": 1.004, "density": 4.101, "ecdf": 0.261, "esf": 0.739}, {"trace": 1.109, "density": 3.696, "ecdf": 0.711, "esf": 0.289}, {"trace": 1.125, "density": 3.279, "ecdf": 0.767, "esf": 0.233}, {"trace": 0.893, "density": 0.601, "ecdf": 0.018, "esf": 0.982}, {"trace": 1.076, "density": 4.242, "ecdf": 0.576, "esf": 0.424}, {"trace": 0.992, "density": 3.649, "ecdf": 0.208, "esf": 0.792}, {"trace": 1.13, "density": 3.105, "ecdf": 0.786, "esf": 0.214}, {"trace": 1.144, "density": 2.716, "ecdf": 0.823, "esf": 0.177}, {"trace": 1.019, "density": 4.342, "ecdf": 0.327, "esf": 0.673}, {"trace": 1.147, "density": 2.622, "ecdf": 0.832, "esf": 0.168}, {"trace": 1.096, "density": 3.956, "ecdf": 0.658, "esf": 0.342}, {"trace": 1.157, "density": 2.366, "ecdf": 0.857, "esf": 0.143}, {"trace": 1.062, "density": 4.385, "ecdf": 0.515, "esf": 0.485}, {"trace": 1.19, "density": 1.467, "ecdf": 0.918, "esf": 0.082}, {"trace": 0.912, "density": 0.992, "ecdf": 0.03, "esf": 0.97}, {"trace": 1.15, "density": 2.555, "ecdf": 0.838, "esf": 0.162}, {"trace": 1.195, "density": 1.385, "ecdf": 0.924, "esf": 0.076}, {"trace": 1.212, "density": 1.062, "ecdf": 0.946, "esf": 0.054}, {"trace": 0.994, "density": 3.748, "ecdf": 0.216, "esf": 0.784}, {"trace": 1.004, "density": 4.074, "ecdf": 0.257, "esf": 0.743}, {"trace": 1.123, "density": 3.34, "ecdf": 0.76, "esf": 0.24}, {"trace": 0.931, "density": 1.601, "ecdf": 0.054, "esf": 0.946}, {"trace": 0.95, "density": 2.181, "ecdf": 0.09, "esf": 0.91}, {"trace": 1.137, "density": 2.922, "ecdf": 0.803, "esf": 0.197}, {"trace": 1.088, "density": 4.075, "ecdf": 0.628, "esf": 0.372}, {"trace": 1.272, "density": 0.369, "ecdf": 0.984, "esf": 0.016}, {"trace": 1.035, "density": 4.429, "ecdf": 0.394, "esf": 0.605}, {"trace": 0.977, "density": 3.05, "ecdf": 0.163, "esf": 0.837}, {"trace": 1.102, "density": 3.846, "ecdf": 0.683, "esf": 0.317}, {"trace": 1.179, "density": 1.728, "ecdf": 0.902, "esf": 0.098}, {"trace": 1.183, "density": 1.613, "ecdf": 0.909, "esf": 0.091}, {"trace": 0.909, "density": 0.911, "ecdf": 0.03, "esf": 0.97}, {"trace": 0.958, "density": 2.447, "ecdf": 0.11, "esf": 0.89}, {"trace": 1.061, "density": 4.389, "ecdf": 0.512, "esf": 0.488}, {"trace": 1.046, "density": 4.447, "ecdf": 0.447, "esf": 0.553}, {"trace": 0.996, "density": 3.809, "ecdf": 0.223, "esf": 0.777}, {"trace": 1.143, "density": 2.751, "ecdf": 0.82, "esf": 0.18}, {"trace": 1.25, "density": 0.54, "ecdf": 0.975, "esf": 0.025}, {"trace": 1.13, "density": 3.113, "ecdf": 0.786, "esf": 0.214}, {"trace": 1.088, "density": 4.074, "ecdf": 0.629, "esf": 0.371}, {"trace": 1.027, "density": 4.395, "ecdf": 0.363, "esf": 0.637}, {"trace": 1.179, "density": 1.734, "ecdf": 0.901, "esf": 0.099}, {"trace": 0.988, "density": 3.49, "ecdf": 0.196, "esf": 0.804}, {"trace": 1.043, "density": 4.447, "ecdf": 0.434, "esf": 0.566}, {"trace": 1.163, "density": 2.195, "ecdf": 0.87, "esf": 0.13}, {"trace": 1.202, "density": 1.239, "ecdf": 0.936, "esf": 0.064}, {"trace": 0.973, "density": 2.931, "ecdf": 0.152, "esf": 0.848}, {"trace": 1.126, "density": 3.232, "ecdf": 0.772, "esf": 0.228}, {"trace": 0.975, "density": 2.978, "ecdf": 0.156, "esf": 0.844}, {"trace": 1.124, "density": 3.287, "ecdf": 0.766, "esf": 0.234}, {"trace": 1.058, "density": 4.406, "ecdf": 0.499, "esf": 0.501}, {"trace": 1.078, "density": 4.21, "ecdf": 0.588, "esf": 0.412}, {"trace": 0.945, "density": 2.023, "ecdf": 0.081, "esf": 0.919}, {"trace": 1.025, "density": 4.381, "ecdf": 0.352, "esf": 0.648}, {"trace": 0.984, "density": 3.322, "ecdf": 0.182, "esf": 0.818}, {"trace": 1.06, "density": 4.398, "ecdf": 0.505, "esf": 0.495}, {"trace": 0.991, "density": 3.639, "ecdf": 0.208, "esf": 0.792}, {"trace": 1.057, "density": 4.416, "ecdf": 0.491, "esf": 0.509}, {"trace": 1.205, "density": 1.195, "ecdf": 0.939, "esf": 0.061}, {"trace": 0.878, "density": 0.422, "ecdf": 0.011, "esf": 0.989}, {"trace": 0.848, "density": 0.157, "ecdf": 0.003, "esf": 0.997}, {"trace": 1.055, "density": 4.425, "ecdf": 0.483, "esf": 0.517}, {"trace": 1.035, "density": 4.43, "ecdf": 0.396, "esf": 0.604}, {"trace": 1.027, "density": 4.393, "ecdf": 0.361, "esf": 0.639}, {"trace": 1.173, "density": 1.876, "ecdf": 0.892, "esf": 0.108}, {"trace": 1.14, "density": 2.819, "ecdf": 0.813, "esf": 0.187}, {"trace": 0.912, "density": 1.003, "ecdf": 0.031, "esf": 0.969}, {"trace": 1.138, "density": 2.882, "ecdf": 0.807, "esf": 0.193}, {"trace": 1.004, "density": 4.085, "ecdf": 0.259, "esf": 0.741}, {"trace": 1.091, "density": 4.023, "ecdf": 0.639, "esf": 0.361}, {"trace": 1.139, "density": 2.864, "ecdf": 0.809, "esf": 0.191}, {"trace": 0.982, "density": 3.256, "ecdf": 0.177, "esf": 0.823}, {"trace": 1.143, "density": 2.75, "ecdf": 0.82, "esf": 0.18}, {"trace": 0.979, "density": 3.135, "ecdf": 0.169, "esf": 0.831}, {"trace": 1.143, "density": 2.727, "ecdf": 0.822, "esf": 0.178}, {"trace": 1.017, "density": 4.314, "ecdf": 0.316, "esf": 0.684}, {"trace": 0.945, "density": 2.028, "ecdf": 0.082, "esf": 0.918}, {"trace": 1.154, "density": 2.435, "ecdf": 0.849, "esf": 0.151}, {"trace": 0.842, "density": 0.119, "ecdf": 0.002, "esf": 0.998}, {"trace": 0.997, "density": 3.871, "ecdf": 0.231, "esf": 0.769}, {"trace": 0.953, "density": 2.273, "ecdf": 0.098, "esf": 0.902}, {"trace": 0.962, "density": 2.562, "ecdf": 0.119, "esf": 0.881}, {"trace": 1.089, "density": 4.059, "ecdf": 0.631, "esf": 0.369}, {"trace": 1.014, "density": 4.284, "ecdf": 0.304, "esf": 0.696}, {"trace": 0.96, "density": 2.491, "ecdf": 0.113, "esf": 0.887}, {"trace": 0.995, "density": 3.8, "ecdf": 0.221, "esf": 0.779}, {"trace": 0.99, "density": 3.598, "ecdf": 0.203, "esf": 0.797}, {"trace": 1.102, "density": 3.839, "ecdf": 0.686, "esf": 0.314}, {"trace": 1.02, "density": 4.348, "ecdf": 0.332, "esf": 0.668}, {"trace": 1.08, "density": 4.188, "ecdf": 0.597, "esf": 0.403}, {"trace": 1.122, "density": 3.348, "ecdf": 0.759, "esf": 0.241}, {"trace": 1.06, "density": 4.394, "ecdf": 0.508, "esf": 0.492}, {"trace": 1.077, "density": 4.224, "ecdf": 0.583, "esf": 0.417}, {"trace": 1.107, "density": 3.738, "ecdf": 0.704, "esf": 0.296}, {"trace": 1.012, "density": 4.264, "ecdf": 0.296, "esf": 0.704}, {"trace": 1.115, "density": 3.556, "ecdf": 0.732, "esf": 0.268}, {"trace": 1.037, "density": 4.435, "ecdf": 0.403, "esf": 0.597}, {"trace": 1.126, "density": 3.251, "ecdf": 0.77, "esf": 0.23}, {"trace": 1.069, "density": 4.325, "ecdf": 0.547, "esf": 0.453}, {"trace": 1.216, "density": 0.986, "ecdf": 0.95, "esf": 0.05}, {"trace": 1.041, "density": 4.445, "ecdf": 0.422, "esf": 0.578}, {"trace": 1.245, "density": 0.585, "ecdf": 0.972, "esf": 0.028}, {"trace": 1.378, "density": 0.035, "ecdf": 0.998, "esf": 0.002}, {"trace": 1.14, "density": 2.824, "ecdf": 0.813, "esf": 0.187}, {"trace": 1.163, "density": 2.179, "ecdf": 0.871, "esf": 0.129}, {"trace": 1.04, "density": 4.444, "ecdf": 0.42, "esf": 0.58}, {"trace": 1.062, "density": 4.378, "ecdf": 0.519, "esf": 0.481}, {"trace": 0.952, "density": 2.243, "ecdf": 0.096, "esf": 0.904}, {"trace": 0.969, "density": 2.795, "ecdf": 0.14, "esf": 0.86}, {"trace": 0.953, "density": 2.275, "ecdf": 0.098, "esf": 0.902}, {"trace": 1.194, "density": 1.399, "ecdf": 0.923, "esf": 0.077}, {"trace": 0.962, "density": 2.55, "ecdf": 0.118, "esf": 0.882}, {"trace": 1.059, "density": 4.405, "ecdf": 0.5, "esf": 0.5}, {"trace": 1.067, "density": 4.345, "ecdf": 0.539, "esf": 0.461}, {"trace": 1.108, "density": 3.728, "ecdf": 0.705, "esf": 0.295}, {"trace": 1.117, "density": 3.508, "ecdf": 0.738, "esf": 0.262}, {"trace": 1.025, "density": 4.378, "ecdf": 0.35, "esf": 0.65}, {"trace": 1.01, "density": 4.219, "ecdf": 0.286, "esf": 0.714}, {"trace": 1.086, "density": 4.109, "ecdf": 0.619, "esf": 0.381}, {"trace": 1.098, "density": 3.916, "ecdf": 0.668, "esf": 0.332}, {"trace": 1.046, "density": 4.447, "ecdf": 0.444, "esf": 0.556}, {"trace": 1.06, "density": 4.393, "ecdf": 0.509, "esf": 0.491}, {"trace": 1.034, "density": 4.426, "ecdf": 0.389, "esf": 0.611}, {"trace": 1.127, "density": 3.22, "ecdf": 0.773, "esf": 0.227}, {"trace": 1.165, "density": 2.114, "ecdf": 0.876, "esf": 0.124}, {"trace": 1.042, "density": 4.447, "ecdf": 0.429, "esf": 0.571}, {"trace": 0.989, "density": 3.55, "ecdf": 0.2, "esf": 0.8}, {"trace": 1.078, "density": 4.22, "ecdf": 0.584, "esf": 0.416}, {"trace": 1.106, "density": 3.758, "ecdf": 0.702, "esf": 0.298}, {"trace": 1.01, "density": 4.232, "ecdf": 0.288, "esf": 0.712}, {"trace": 1.206, "density": 1.172, "ecdf": 0.94, "esf": 0.06}, {"trace": 1.252, "density": 0.523, "ecdf": 0.975, "esf": 0.025}, {"trace": 0.883, "density": 0.477, "ecdf": 0.014, "esf": 0.986}, {"trace": 0.92, "density": 1.246, "ecdf": 0.039, "esf": 0.961}, {"trace": 1.243, "density": 0.609, "ecdf": 0.97, "esf": 0.03}, {"trace": 0.925, "density": 1.41, "ecdf": 0.045, "esf": 0.955}, {"trace": 1.045, "density": 4.448, "ecdf": 0.441, "esf": 0.559}, {"trace": 1.063, "density": 4.373, "ecdf": 0.522, "esf": 0.478}, {"trace": 1.024, "density": 4.372, "ecdf": 0.347, "esf": 0.653}, {"trace": 0.958, "density": 2.45, "ecdf": 0.11, "esf": 0.89}, {"trace": 1.151, "density": 2.528, "ecdf": 0.84, "esf": 0.16}, {"trace": 1.126, "density": 3.229, "ecdf": 0.772, "esf": 0.228}, {"trace": 1.117, "density": 3.49, "ecdf": 0.74, "esf": 0.26}, {"trace": 1.005, "density": 4.126, "ecdf": 0.266, "esf": 0.734}, {"trace": 1.066, "density": 4.349, "ecdf": 0.537, "esf": 0.463}, {"trace": 0.978, "density": 3.089, "ecdf": 0.166, "esf": 0.834}, {"trace": 1.166, "density": 2.098, "ecdf": 0.878, "esf": 0.122}, {"trace": 0.9, "density": 0.724, "ecdf": 0.022, "esf": 0.978}, {"trace": 0.888, "density": 0.538, "ecdf": 0.016, "esf": 0.984}, {"trace": 1.407, "density": 0.026, "ecdf": 0.999, "esf": 0.001}, {"trace": 1.247, "density": 0.569, "ecdf": 0.973, "esf": 0.027}, {"trace": 1.068, "density": 4.328, "ecdf": 0.546, "esf": 0.454}, {"trace": 1.031, "density": 4.411, "ecdf": 0.375, "esf": 0.625}, {"trace": 1.097, "density": 3.937, "ecdf": 0.664, "esf": 0.336}, {"trace": 1.022, "density": 4.364, "ecdf": 0.342, "esf": 0.658}, {"trace": 1.176, "density": 1.813, "ecdf": 0.896, "esf": 0.104}, {"trace": 1.037, "density": 4.435, "ecdf": 0.403, "esf": 0.597}, {"trace": 1.237, "density": 0.665, "ecdf": 0.966, "esf": 0.033}, {"trace": 1.134, "density": 2.99, "ecdf": 0.796, "esf": 0.204}, {"trace": 1.021, "density": 4.353, "ecdf": 0.334, "esf": 0.666}, {"trace": 0.993, "density": 3.69, "ecdf": 0.212, "esf": 0.788}, {"trace": 1.086, "density": 4.102, "ecdf": 0.621, "esf": 0.379}, {"trace": 1.192, "density": 1.429, "ecdf": 0.92, "esf": 0.08}, {"trace": 0.885, "density": 0.502, "ecdf": 0.015, "esf": 0.985}, {"trace": 1.2, "density": 1.278, "ecdf": 0.932, "esf": 0.068}, {"trace": 1.04, "density": 4.443, "ecdf": 0.418, "esf": 0.582}, {"trace": 1.011, "density": 4.244, "ecdf": 0.292, "esf": 0.708}, {"trace": 0.996, "density": 3.808, "ecdf": 0.223, "esf": 0.777}, {"trace": 1.086, "density": 4.104, "ecdf": 0.62, "esf": 0.38}, {"trace": 1.155, "density": 2.399, "ecdf": 0.854, "esf": 0.146}, {"trace": 0.98, "density": 3.167, "ecdf": 0.171, "esf": 0.829}, {"trace": 0.986, "density": 3.392, "ecdf": 0.188, "esf": 0.812}, {"trace": 1.087, "density": 4.088, "ecdf": 0.625, "esf": 0.375}, {"trace": 1.089, "density": 4.056, "ecdf": 0.632, "esf": 0.368}, {"trace": 1.079, "density": 4.203, "ecdf": 0.591, "esf": 0.409}, {"trace": 1.067, "density": 4.338, "ecdf": 0.541, "esf": 0.459}, {"trace": 1.012, "density": 4.264, "ecdf": 0.296, "esf": 0.704}, {"trace": 1.011, "density": 4.234, "ecdf": 0.289, "esf": 0.711}, {"trace": 0.903, "density": 0.774, "ecdf": 0.024, "esf": 0.976}, {"trace": 1.014, "density": 4.29, "ecdf": 0.307, "esf": 0.693}, {"trace": 1.056, "density": 4.421, "ecdf": 0.487, "esf": 0.513}, {"trace": 1.036, "density": 4.434, "ecdf": 0.401, "esf": 0.599}, {"trace": 1.022, "density": 4.364, "ecdf": 0.342, "esf": 0.658}, {"trace": 1.241, "density": 0.631, "ecdf": 0.969, "esf": 0.031}, {"trace": 1.269, "density": 0.395, "ecdf": 0.982, "esf": 0.017}, {"trace": 0.939, "density": 1.87, "ecdf": 0.073, "esf": 0.927}, {"trace": 0.992, "density": 3.65, "ecdf": 0.209, "esf": 0.791}, {"trace": 1.102, "density": 3.841, "ecdf": 0.685, "esf": 0.315}, {"trace": 1.103, "density": 3.832, "ecdf": 0.687, "esf": 0.313}, {"trace": 0.991, "density": 3.599, "ecdf": 0.203, "esf": 0.797}, {"trace": 0.941, "density": 1.923, "ecdf": 0.076, "esf": 0.924}, {"trace": 1.072, "density": 4.291, "ecdf": 0.558, "esf": 0.442}, {"trace": 0.987, "density": 3.458, "ecdf": 0.193, "esf": 0.807}, {"trace": 1.192, "density": 1.43, "ecdf": 0.92, "esf": 0.08}, {"trace": 1.034, "density": 4.427, "ecdf": 0.391, "esf": 0.609}, {"trace": 0.949, "density": 2.159, "ecdf": 0.088, "esf": 0.912}, {"trace": 1.015, "density": 4.294, "ecdf": 0.308, "esf": 0.692}, {"trace": 1.071, "density": 4.304, "ecdf": 0.554, "esf": 0.446}, {"trace": 0.982, "density": 3.233, "ecdf": 0.176, "esf": 0.824}, {"trace": 1.018, "density": 4.326, "ecdf": 0.321, "esf": 0.679}, {"trace": 1.121, "density": 3.385, "ecdf": 0.754, "esf": 0.246}, {"trace": 1.093, "density": 3.993, "ecdf": 0.648, "esf": 0.352}, {"trace": 1.051, "density": 4.437, "ecdf": 0.47, "esf": 0.53}, {"trace": 1.035, "density": 4.429, "ecdf": 0.394, "esf": 0.606}, {"trace": 1.086, "density": 4.108, "ecdf": 0.62, "esf": 0.38}, {"trace": 1.098, "density": 3.907, "ecdf": 0.669, "esf": 0.331}, {"trace": 1.058, "density": 4.405, "ecdf": 0.499, "esf": 0.501}, {"trace": 1.09, "density": 4.051, "ecdf": 0.633, "esf": 0.367}, {"trace": 1.092, "density": 4.021, "ecdf": 0.64, "esf": 0.36}, {"trace": 0.966, "density": 2.695, "ecdf": 0.132, "esf": 0.868}, {"trace": 1.166, "density": 2.099, "ecdf": 0.877, "esf": 0.123}, {"trace": 1.217, "density": 0.964, "ecdf": 0.951, "esf": 0.049}, {"trace": 1.24, "density": 0.64, "ecdf": 0.968, "esf": 0.032}, {"trace": 1.15, "density": 2.548, "ecdf": 0.839, "esf": 0.161}, {"trace": 1.013, "density": 4.273, "ecdf": 0.301, "esf": 0.699}, {"trace": 0.976, "density": 3.036, "ecdf": 0.161, "esf": 0.839}, {"trace": 1.067, "density": 4.342, "ecdf": 0.539, "esf": 0.461}, {"trace": 1.235, "density": 0.698, "ecdf": 0.964, "esf": 0.036}, {"trace": 1.103, "density": 3.818, "ecdf": 0.69, "esf": 0.31}, {"trace": 1.144, "density": 2.713, "ecdf": 0.824, "esf": 0.176}, {"trace": 1.004, "density": 4.078, "ecdf": 0.257, "esf": 0.743}, {"trace": 1.22, "density": 0.901, "ecdf": 0.954, "esf": 0.046}, {"trace": 1.163, "density": 2.191, "ecdf": 0.87, "esf": 0.13}, {"trace": 1.03, "density": 4.408, "ecdf": 0.372, "esf": 0.628}, {"trace": 1.143, "density": 2.733, "ecdf": 0.821, "esf": 0.179}, {"trace": 1.013, "density": 4.269, "ecdf": 0.298, "esf": 0.702}, {"trace": 1.167, "density": 2.061, "ecdf": 0.879, "esf": 0.121}, {"trace": 1.107, "density": 3.739, "ecdf": 0.703, "esf": 0.297}, {"trace": 1.138, "density": 2.865, "ecdf": 0.808, "esf": 0.192}, {"trace": 1.114, "density": 3.565, "ecdf": 0.731, "esf": 0.269}, {"trace": 1.121, "density": 3.385, "ecdf": 0.754, "esf": 0.246}, {"trace": 1.006, "density": 4.14, "ecdf": 0.269, "esf": 0.731}, {"trace": 1.152, "density": 2.493, "ecdf": 0.843, "esf": 0.157}, {"trace": 1.151, "density": 2.532, "ecdf": 0.84, "esf": 0.16}, {"trace": 0.95, "density": 2.174, "ecdf": 0.09, "esf": 0.91}, {"trace": 0.967, "density": 2.729, "ecdf": 0.135, "esf": 0.865}, {"trace": 0.963, "density": 2.611, "ecdf": 0.124, "esf": 0.876}, {"trace": 1.193, "density": 1.412, "ecdf": 0.921, "esf": 0.079}, {"trace": 0.855, "density": 0.204, "ecdf": 0.004, "esf": 0.996}, {"trace": 1.083, "density": 4.154, "ecdf": 0.608, "esf": 0.392}, {"trace": 1.021, "density": 4.355, "ecdf": 0.335, "esf": 0.665}, {"trace": 1.016, "density": 4.304, "ecdf": 0.312, "esf": 0.688}, {"trace": 0.989, "density": 3.554, "ecdf": 0.201, "esf": 0.799}, {"trace": 0.982, "density": 3.262, "ecdf": 0.178, "esf": 0.822}, {"trace": 1.176, "density": 1.792, "ecdf": 0.898, "esf": 0.102}, {"trace": 1.003, "density": 4.053, "ecdf": 0.254, "esf": 0.746}, {"trace": 0.885, "density": 0.494, "ecdf": 0.014, "esf": 0.986}, {"trace": 1.175, "density": 1.838, "ecdf": 0.894, "esf": 0.106}, {"trace": 1.163, "density": 2.181, "ecdf": 0.871, "esf": 0.129}, {"trace": 1.072, "density": 4.29, "ecdf": 0.559, "esf": 0.441}, {"trace": 1.185, "density": 1.581, "ecdf": 0.911, "esf": 0.089}, {"trace": 1.046, "density": 4.447, "ecdf": 0.446, "esf": 0.554}, {"trace": 1.014, "density": 4.28, "ecdf": 0.303, "esf": 0.697}, {"trace": 1.022, "density": 4.36, "ecdf": 0.339, "esf": 0.661}, {"trace": 0.927, "density": 1.485, "ecdf": 0.048, "esf": 0.952}, {"trace": 1.018, "density": 4.333, "ecdf": 0.324, "esf": 0.676}, {"trace": 0.87, "density": 0.337, "ecdf": 0.008, "esf": 0.992}, {"trace": 0.912, "density": 1.001, "ecdf": 0.031, "esf": 0.969}, {"trace": 0.948, "density": 2.111, "ecdf": 0.085, "esf": 0.915}, {"trace": 1.111, "density": 3.661, "ecdf": 0.717, "esf": 0.283}, {"trace": 1.015, "density": 4.297, "ecdf": 0.309, "esf": 0.691}, {"trace": 1.153, "density": 2.48, "ecdf": 0.845, "esf": 0.155}, {"trace": 0.903, "density": 0.78, "ecdf": 0.025, "esf": 0.975}, {"trace": 0.986, "density": 3.406, "ecdf": 0.189, "esf": 0.811}, {"trace": 0.947, "density": 2.108, "ecdf": 0.085, "esf": 0.915}, {"trace": 1.163, "density": 2.173, "ecdf": 0.872, "esf": 0.128}, {"trace": 1.052, "density": 4.435, "ecdf": 0.474, "esf": 0.526}, {"trace": 0.981, "density": 3.201, "ecdf": 0.174, "esf": 0.826}, {"trace": 1.081, "density": 4.181, "ecdf": 0.599, "esf": 0.401}, {"trace": 1.039, "density": 4.442, "ecdf": 0.416, "esf": 0.584}, {"trace": 1.068, "density": 4.336, "ecdf": 0.542, "esf": 0.458}, {"trace": 1.12, "density": 3.421, "ecdf": 0.75, "esf": 0.25}, {"trace": 1.184, "density": 1.605, "ecdf": 0.91, "esf": 0.09}, {"trace": 1.19, "density": 1.48, "ecdf": 0.917, "esf": 0.083}, {"trace": 1.09, "density": 4.037, "ecdf": 0.636, "esf": 0.364}, {"trace": 1.016, "density": 4.305, "ecdf": 0.312, "esf": 0.688}, {"trace": 1.113, "density": 3.607, "ecdf": 0.725, "esf": 0.275}, {"trace": 1.011, "density": 4.237, "ecdf": 0.29, "esf": 0.71}, {"trace": 0.968, "density": 2.748, "ecdf": 0.136, "esf": 0.864}, {"trace": 0.969, "density": 2.782, "ecdf": 0.139, "esf": 0.861}, {"trace": 1.103, "density": 3.826, "ecdf": 0.689, "esf": 0.311}, {"trace": 0.964, "density": 2.643, "ecdf": 0.126, "esf": 0.874}, {"trace": 1.194, "density": 1.391, "ecdf": 0.924, "esf": 0.076}, {"trace": 0.98, "density": 3.165, "ecdf": 0.171, "esf": 0.829}, {"trace": 1.163, "density": 2.192, "ecdf": 0.87, "esf": 0.13}, {"trace": 0.973, "density": 2.925, "ecdf": 0.151, "esf": 0.849}, {"trace": 1.137, "density": 2.895, "ecdf": 0.806, "esf": 0.194}, {"trace": 1.094, "density": 3.988, "ecdf": 0.65, "esf": 0.35}, {"trace": 0.965, "density": 2.658, "ecdf": 0.128, "esf": 0.872}, {"trace": 1.154, "density": 2.434, "ecdf": 0.85, "esf": 0.15}, {"trace": 1.169, "density": 1.991, "ecdf": 0.884, "esf": 0.116}, {"trace": 1.237, "density": 0.669, "ecdf": 0.966, "esf": 0.034}, {"trace": 1.091, "density": 4.024, "ecdf": 0.639, "esf": 0.361}, {"trace": 0.968, "density": 2.749, "ecdf": 0.136, "esf": 0.864}, {"trace": 0.891, "density": 0.575, "ecdf": 0.017, "esf": 0.983}, {"trace": 1.194, "density": 1.402, "ecdf": 0.923, "esf": 0.077}, {"trace": 1.121, "density": 3.378, "ecdf": 0.755, "esf": 0.245}, {"trace": 0.99, "density": 3.587, "ecdf": 0.202, "esf": 0.798}, {"trace": 1.094, "density": 3.988, "ecdf": 0.65, "esf": 0.35}, {"trace": 1.046, "density": 4.447, "ecdf": 0.444, "esf": 0.556}, {"trace": 1.042, "density": 4.447, "ecdf": 0.429, "esf": 0.571}, {"trace": 0.989, "density": 3.516, "ecdf": 0.197, "esf": 0.803}, {"trace": 1.031, "density": 4.415, "ecdf": 0.378, "esf": 0.622}, {"trace": 1.035, "density": 4.431, "ecdf": 0.397, "esf": 0.603}, {"trace": 0.976, "density": 3.042, "ecdf": 0.162, "esf": 0.838}, {"trace": 1.048, "density": 4.445, "ecdf": 0.454, "esf": 0.546}, {"trace": 1.044, "density": 4.448, "ecdf": 0.438, "esf": 0.562}, {"trace": 1.178, "density": 1.747, "ecdf": 0.9, "esf": 0.1}, {"trace": 1.069, "density": 4.324, "ecdf": 0.548, "esf": 0.452}, {"trace": 1.019, "density": 4.334, "ecdf": 0.324, "esf": 0.676}, {"trace": 1.001, "density": 3.996, "ecdf": 0.247, "esf": 0.753}, {"trace": 1.095, "density": 3.966, "ecdf": 0.655, "esf": 0.345}, {"trace": 1.119, "density": 3.454, "ecdf": 0.745, "esf": 0.255}, {"trace": 1.006, "density": 4.13, "ecdf": 0.267, "esf": 0.733}, {"trace": 1.192, "density": 1.444, "ecdf": 0.919, "esf": 0.081}, {"trace": 1.192, "density": 1.443, "ecdf": 0.919, "esf": 0.081}, {"trace": 0.966, "density": 2.682, "ecdf": 0.13, "esf": 0.87}, {"trace": 0.908, "density": 0.89, "ecdf": 0.029, "esf": 0.971}, {"trace": 1.028, "density": 4.397, "ecdf": 0.364, "esf": 0.636}, {"trace": 1.11, "density": 3.685, "ecdf": 0.713, "esf": 0.287}, {"trace": 1.164, "density": 2.153, "ecdf": 0.873, "esf": 0.127}, {"trace": 1.019, "density": 4.338, "ecdf": 0.326, "esf": 0.674}, {"trace": 1.142, "density": 2.764, "ecdf": 0.817, "esf": 0.183}, {"trace": 1.093, "density": 4.005, "ecdf": 0.646, "esf": 0.354}, {"trace": 1.124, "density": 3.297, "ecdf": 0.764, "esf": 0.236}, {"trace": 1.15, "density": 2.549, "ecdf": 0.839, "esf": 0.161}, {"trace": 1.147, "density": 2.633, "ecdf": 0.831, "esf": 0.169}, {"trace": 1.028, "density": 4.399, "ecdf": 0.365, "esf": 0.635}, {"trace": 1.068, "density": 4.333, "ecdf": 0.544, "esf": 0.456}, {"trace": 0.995, "density": 3.796, "ecdf": 0.22, "esf": 0.78}, {"trace": 1.082, "density": 4.156, "ecdf": 0.608, "esf": 0.392}, {"trace": 1.137, "density": 2.899, "ecdf": 0.806, "esf": 0.194}, {"trace": 1.173, "density": 1.884, "ecdf": 0.891, "esf": 0.109}, {"trace": 1.167, "density": 2.066, "ecdf": 0.879, "esf": 0.121}, {"trace": 1.094, "density": 3.984, "ecdf": 0.651, "esf": 0.349}, {"trace": 1.223, "density": 0.862, "ecdf": 0.956, "esf": 0.044}, {"trace": 1.015, "density": 4.298, "ecdf": 0.31, "esf": 0.69}, {"trace": 1.155, "density": 2.424, "ecdf": 0.851, "esf": 0.149}, {"trace": 1.11, "density": 3.676, "ecdf": 0.715, "esf": 0.285}, {"trace": 1.035, "density": 4.43, "ecdf": 0.396, "esf": 0.604}, {"trace": 1.095, "density": 3.97, "ecdf": 0.654, "esf": 0.346}, {"trace": 0.996, "density": 3.825, "ecdf": 0.225, "esf": 0.775}, {"trace": 1.147, "density": 2.616, "ecdf": 0.833, "esf": 0.167}, {"trace": 1.008, "density": 4.183, "ecdf": 0.278, "esf": 0.722}, {"trace": 1.13, "density": 3.118, "ecdf": 0.785, "esf": 0.215}, {"trace": 1.013, "density": 4.269, "ecdf": 0.298, "esf": 0.702}, {"trace": 1.106, "density": 3.756, "ecdf": 0.702, "esf": 0.298}, {"trace": 1.104, "density": 3.811, "ecdf": 0.692, "esf": 0.308}, {"trace": 1.009, "density": 4.202, "ecdf": 0.281, "esf": 0.719}, {"trace": 1.079, "density": 4.204, "ecdf": 0.591, "esf": 0.409}, {"trace": 1.009, "density": 4.211, "ecdf": 0.284, "esf": 0.716}, {"trace": 1.093, "density": 3.995, "ecdf": 0.648, "esf": 0.352}, {"trace": 1.172, "density": 1.912, "ecdf": 0.89, "esf": 0.11}, {"trace": 1.103, "density": 3.827, "ecdf": 0.688, "esf": 0.312}, {"trace": 1.038, "density": 4.44, "ecdf": 0.412, "esf": 0.588}, {"trace": 1.052, "density": 4.436, "ecdf": 0.472, "esf": 0.528}, {"trace": 1.043, "density": 4.447, "ecdf": 0.434, "esf": 0.566}, {"trace": 1.169, "density": 2.003, "ecdf": 0.883, "esf": 0.117}, {"trace": 1.14, "density": 2.827, "ecdf": 0.812, "esf": 0.188}, {"trace": 1.168, "density": 2.043, "ecdf": 0.88, "esf": 0.12}, {"trace": 1.13, "density": 3.103, "ecdf": 0.787, "esf": 0.213}, {"trace": 1.059, "density": 4.4, "ecdf": 0.504, "esf": 0.496}, {"trace": 0.969, "density": 2.797, "ecdf": 0.14, "esf": 0.86}, {"trace": 1.011, "density": 4.247, "ecdf": 0.293, "esf": 0.707}, {"trace": 1.148, "density": 2.611, "ecdf": 0.833, "esf": 0.167}, {"trace": 1.209, "density": 1.112, "ecdf": 0.944, "esf": 0.056}, {"trace": 0.973, "density": 2.922, "ecdf": 0.151, "esf": 0.849}, {"trace": 0.943, "density": 1.987, "ecdf": 0.079, "esf": 0.921}, {"trace": 0.95, "density": 2.172, "ecdf": 0.09, "esf": 0.91}, {"trace": 0.973, "density": 2.916, "ecdf": 0.15, "esf": 0.85}, {"trace": 1.154, "density": 2.429, "ecdf": 0.851, "esf": 0.149}, {"trace": 1.079, "density": 4.198, "ecdf": 0.594, "esf": 0.406}, {"trace": 1.12, "density": 3.419, "ecdf": 0.75, "esf": 0.25}, {"trace": 1.099, "density": 3.893, "ecdf": 0.673, "esf": 0.327}, {"trace": 1.234, "density": 0.703, "ecdf": 0.964, "esf": 0.036}, {"trace": 0.922, "density": 1.312, "ecdf": 0.041, "esf": 0.959}, {"trace": 1.176, "density": 1.807, "ecdf": 0.897, "esf": 0.103}, {"trace": 1.3, "density": 0.203, "ecdf": 0.991, "esf": 0.009}, {"trace": 0.967, "density": 2.712, "ecdf": 0.133, "esf": 0.867}, {"trace": 1.006, "density": 4.149, "ecdf": 0.271, "esf": 0.729}, {"trace": 1.169, "density": 1.993, "ecdf": 0.884, "esf": 0.116}, {"trace": 0.916, "density": 1.11, "ecdf": 0.034, "esf": 0.966}, {"trace": 1.226, "density": 0.816, "ecdf": 0.958, "esf": 0.042}, {"trace": 0.989, "density": 3.528, "ecdf": 0.198, "esf": 0.802}, {"trace": 1.095, "density": 3.957, "ecdf": 0.657, "esf": 0.343}, {"trace": 1.225, "density": 0.82, "ecdf": 0.958, "esf": 0.042}, {"trace": 0.922, "density": 1.325, "ecdf": 0.042, "esf": 0.958}, {"trace": 1.338, "density": 0.091, "ecdf": 0.996, "esf": 0.004}, {"trace": 1.005, "density": 4.123, "ecdf": 0.266, "esf": 0.734}, {"trace": 1.108, "density": 3.719, "ecdf": 0.707, "esf": 0.293}, {"trace": 1.068, "density": 4.329, "ecdf": 0.546, "esf": 0.454}, {"trace": 0.983, "density": 3.276, "ecdf": 0.179, "esf": 0.821}, {"trace": 0.986, "density": 3.422, "ecdf": 0.19, "esf": 0.81}, {"trace": 0.847, "density": 0.147, "ecdf": 0.003, "esf": 0.997}, {"trace": 1.095, "density": 3.968, "ecdf": 0.654, "esf": 0.346}, {"trace": 1.006, "density": 4.142, "ecdf": 0.269, "esf": 0.731}, {"trace": 1.12, "density": 3.423, "ecdf": 0.749, "esf": 0.251}, {"trace": 1.049, "density": 4.443, "ecdf": 0.46, "esf": 0.54}, {"trace": 1.157, "density": 2.364, "ecdf": 0.857, "esf": 0.143}, {"trace": 1.195, "density": 1.381, "ecdf": 0.924, "esf": 0.076}, {"trace": 1.16, "density": 2.281, "ecdf": 0.863, "esf": 0.137}, {"trace": 1.082, "density": 4.16, "ecdf": 0.606, "esf": 0.394}, {"trace": 1.041, "density": 4.445, "ecdf": 0.424, "esf": 0.576}, {"trace": 1.072, "density": 4.285, "ecdf": 0.561, "esf": 0.439}, {"trace": 0.998, "density": 3.909, "ecdf": 0.236, "esf": 0.764}, {"trace": 1.111, "density": 3.66, "ecdf": 0.717, "esf": 0.283}, {"trace": 1.112, "density": 3.639, "ecdf": 0.72, "esf": 0.28}, {"trace": 1.024, "density": 4.375, "ecdf": 0.349, "esf": 0.651}, {"trace": 1.093, "density": 4.0, "ecdf": 0.647, "esf": 0.353}, {"trace": 1.077, "density": 4.233, "ecdf": 0.579, "esf": 0.421}, {"trace": 1.058, "density": 4.407, "ecdf": 0.498, "esf": 0.502}, {"trace": 1.208, "density": 1.128, "ecdf": 0.943, "esf": 0.057}, {"trace": 1.035, "density": 4.428, "ecdf": 0.392, "esf": 0.607}, {"trace": 1.065, "density": 4.355, "ecdf": 0.534, "esf": 0.466}, {"trace": 1.142, "density": 2.766, "ecdf": 0.817, "esf": 0.183}, {"trace": 1.094, "density": 3.984, "ecdf": 0.651, "esf": 0.349}, {"trace": 0.956, "density": 2.362, "ecdf": 0.104, "esf": 0.896}, {"trace": 1.111, "density": 3.65, "ecdf": 0.718, "esf": 0.282}, {"trace": 1.206, "density": 1.173, "ecdf": 0.94, "esf": 0.06}, {"trace": 1.065, "density": 4.361, "ecdf": 0.53, "esf": 0.47}, {"trace": 1.043, "density": 4.447, "ecdf": 0.435, "esf": 0.565}, {"trace": 1.072, "density": 4.29, "ecdf": 0.559, "esf": 0.441}, {"trace": 1.13, "density": 3.115, "ecdf": 0.785, "esf": 0.215}, {"trace": 1.116, "density": 3.517, "ecdf": 0.737, "esf": 0.263}, {"trace": 1.082, "density": 4.159, "ecdf": 0.606, "esf": 0.393}, {"trace": 1.073, "density": 4.282, "ecdf": 0.562, "esf": 0.438}, {"trace": 1.125, "density": 3.262, "ecdf": 0.769, "esf": 0.231}, {"trace": 1.152, "density": 2.482, "ecdf": 0.844, "esf": 0.155}, {"trace": 1.007, "density": 4.168, "ecdf": 0.276, "esf": 0.724}, {"trace": 1.122, "density": 3.345, "ecdf": 0.76, "esf": 0.24}, {"trace": 1.022, "density": 4.361, "ecdf": 0.339, "esf": 0.661}, {"trace": 1.021, "density": 4.353, "ecdf": 0.334, "esf": 0.666}, {"trace": 1.087, "density": 4.092, "ecdf": 0.624, "esf": 0.376}, {"trace": 1.098, "density": 3.923, "ecdf": 0.666, "esf": 0.334}, {"trace": 1.131, "density": 3.098, "ecdf": 0.788, "esf": 0.212}, {"trace": 1.108, "density": 3.725, "ecdf": 0.706, "esf": 0.294}, {"trace": 1.08, "density": 4.194, "ecdf": 0.596, "esf": 0.404}, {"trace": 1.012, "density": 4.252, "ecdf": 0.294, "esf": 0.706}, {"trace": 1.063, "density": 4.373, "ecdf": 0.523, "esf": 0.477}, {"trace": 1.007, "density": 4.165, "ecdf": 0.275, "esf": 0.725}, {"trace": 1.048, "density": 4.445, "ecdf": 0.454, "esf": 0.546}, {"trace": 1.064, "density": 4.366, "ecdf": 0.527, "esf": 0.473}, {"trace": 0.967, "density": 2.739, "ecdf": 0.136, "esf": 0.864}, {"trace": 0.929, "density": 1.542, "ecdf": 0.05, "esf": 0.95}, {"trace": 0.917, "density": 1.158, "ecdf": 0.036, "esf": 0.964}, {"trace": 0.942, "density": 1.944, "ecdf": 0.077, "esf": 0.923}, {"trace": 1.084, "density": 4.136, "ecdf": 0.613, "esf": 0.387}, {"trace": 0.934, "density": 1.714, "ecdf": 0.062, "esf": 0.938}, {"trace": 1.034, "density": 4.426, "ecdf": 0.388, "esf": 0.612}, {"trace": 0.982, "density": 3.256, "ecdf": 0.177, "esf": 0.823}, {"trace": 0.855, "density": 0.205, "ecdf": 0.004, "esf": 0.996}, {"trace": 1.001, "density": 4.008, "ecdf": 0.249, "esf": 0.751}, {"trace": 1.034, "density": 4.426, "ecdf": 0.388, "esf": 0.612}, {"trace": 1.004, "density": 4.086, "ecdf": 0.259, "esf": 0.741}, {"trace": 1.015, "density": 4.299, "ecdf": 0.31, "esf": 0.69}, {"trace": 1.108, "density": 3.709, "ecdf": 0.709, "esf": 0.291}, {"trace": 1.158, "density": 2.323, "ecdf": 0.86, "esf": 0.14}, {"trace": 0.975, "density": 3.002, "ecdf": 0.158, "esf": 0.842}, {"trace": 1.243, "density": 0.61, "ecdf": 0.97, "esf": 0.03}, {"trace": 1.285, "density": 0.276, "ecdf": 0.988, "esf": 0.012}, {"trace": 1.033, "density": 4.42, "ecdf": 0.383, "esf": 0.617}, {"trace": 0.995, "density": 3.783, "ecdf": 0.219, "esf": 0.781}, {"trace": 0.965, "density": 2.657, "ecdf": 0.128, "esf": 0.872}, {"trace": 1.034, "density": 4.426, "ecdf": 0.389, "esf": 0.611}, {"trace": 1.204, "density": 1.22, "ecdf": 0.937, "esf": 0.063}, {"trace": 0.97, "density": 2.823, "ecdf": 0.142, "esf": 0.858}, {"trace": 1.157, "density": 2.36, "ecdf": 0.858, "esf": 0.142}, {"trace": 1.094, "density": 3.987, "ecdf": 0.65, "esf": 0.35}, {"trace": 0.968, "density": 2.761, "ecdf": 0.137, "esf": 0.863}, {"trace": 1.163, "density": 2.181, "ecdf": 0.871, "esf": 0.129}, {"trace": 0.977, "density": 3.046, "ecdf": 0.162, "esf": 0.838}, {"trace": 1.056, "density": 4.417, "ecdf": 0.49, "esf": 0.51}, {"trace": 1.212, "density": 1.053, "ecdf": 0.946, "esf": 0.053}, {"trace": 1.221, "density": 0.882, "ecdf": 0.955, "esf": 0.045}, {"trace": 0.966, "density": 2.687, "ecdf": 0.131, "esf": 0.869}, {"trace": 1.067, "density": 4.338, "ecdf": 0.541, "esf": 0.459}, {"trace": 0.941, "density": 1.902, "ecdf": 0.075, "esf": 0.925}, {"trace": 1.063, "density": 4.373, "ecdf": 0.523, "esf": 0.477}, {"trace": 1.006, "density": 4.138, "ecdf": 0.268, "esf": 0.732}, {"trace": 1.048, "density": 4.445, "ecdf": 0.454, "esf": 0.546}, {"trace": 1.061, "density": 4.39, "ecdf": 0.511, "esf": 0.489}, {"trace": 1.05, "density": 4.441, "ecdf": 0.465, "esf": 0.535}, {"trace": 0.969, "density": 2.781, "ecdf": 0.138, "esf": 0.862}, {"trace": 1.07, "density": 4.31, "ecdf": 0.552, "esf": 0.448}, {"trace": 1.06, "density": 4.397, "ecdf": 0.506, "esf": 0.494}, {"trace": 1.124, "density": 3.288, "ecdf": 0.766, "esf": 0.234}, {"trace": 1.074, "density": 4.269, "ecdf": 0.567, "esf": 0.433}, {"trace": 1.028, "density": 4.4, "ecdf": 0.366, "esf": 0.634}, {"trace": 1.073, "density": 4.275, "ecdf": 0.565, "esf": 0.435}, {"trace": 1.018, "density": 4.332, "ecdf": 0.323, "esf": 0.677}, {"trace": 1.031, "density": 4.411, "ecdf": 0.374, "esf": 0.626}, {"trace": 1.019, "density": 4.337, "ecdf": 0.325, "esf": 0.675}, {"trace": 1.122, "density": 3.346, "ecdf": 0.759, "esf": 0.241}, {"trace": 1.148, "density": 2.607, "ecdf": 0.834, "esf": 0.166}, {"trace": 1.164, "density": 2.166, "ecdf": 0.872, "esf": 0.127}, {"trace": 1.068, "density": 4.333, "ecdf": 0.543, "esf": 0.457}, {"trace": 1.086, "density": 4.108, "ecdf": 0.62, "esf": 0.38}, {"trace": 0.987, "density": 3.434, "ecdf": 0.192, "esf": 0.808}, {"trace": 0.97, "density": 2.814, "ecdf": 0.142, "esf": 0.858}, {"trace": 1.139, "density": 2.858, "ecdf": 0.809, "esf": 0.191}, {"trace": 1.105, "density": 3.794, "ecdf": 0.695, "esf": 0.305}, {"trace": 1.002, "density": 4.015, "ecdf": 0.25, "esf": 0.75}, {"trace": 1.033, "density": 4.42, "ecdf": 0.382, "esf": 0.618}, {"trace": 1.095, "density": 3.963, "ecdf": 0.656, "esf": 0.344}, {"trace": 1.07, "density": 4.315, "ecdf": 0.551, "esf": 0.449}, {"trace": 1.163, "density": 2.173, "ecdf": 0.872, "esf": 0.128}, {"trace": 1.079, "density": 4.199, "ecdf": 0.594, "esf": 0.406}, {"trace": 1.051, "density": 4.439, "ecdf": 0.467, "esf": 0.533}, {"trace": 1.127, "density": 3.21, "ecdf": 0.775, "esf": 0.225}, {"trace": 1.02, "density": 4.344, "ecdf": 0.328, "esf": 0.672}, {"trace": 1.131, "density": 3.086, "ecdf": 0.788, "esf": 0.212}, {"trace": 0.976, "density": 3.034, "ecdf": 0.161, "esf": 0.839}, {"trace": 1.021, "density": 4.355, "ecdf": 0.335, "esf": 0.665}, {"trace": 1.098, "density": 3.923, "ecdf": 0.666, "esf": 0.334}, {"trace": 1.1, "density": 3.881, "ecdf": 0.675, "esf": 0.325}, {"trace": 1.078, "density": 4.221, "ecdf": 0.584, "esf": 0.416}, {"trace": 1.031, "density": 4.411, "ecdf": 0.375, "esf": 0.625}, {"trace": 1.05, "density": 4.441, "ecdf": 0.462, "esf": 0.538}, {"trace": 0.979, "density": 3.127, "ecdf": 0.168, "esf": 0.832}, {"trace": 0.983, "density": 3.308, "ecdf": 0.18, "esf": 0.82}, {"trace": 1.132, "density": 3.067, "ecdf": 0.79, "esf": 0.21}, {"trace": 1.098, "density": 3.92, "ecdf": 0.667, "esf": 0.333}, {"trace": 1.122, "density": 3.356, "ecdf": 0.758, "esf": 0.242}, {"trace": 1.16, "density": 2.27, "ecdf": 0.864, "esf": 0.136}, {"trace": 1.092, "density": 4.014, "ecdf": 0.643, "esf": 0.357}, {"trace": 1.078, "density": 4.214, "ecdf": 0.586, "esf": 0.414}, {"trace": 1.068, "density": 4.328, "ecdf": 0.546, "esf": 0.454}, {"trace": 1.146, "density": 2.67, "ecdf": 0.827, "esf": 0.173}, {"trace": 1.121, "density": 3.378, "ecdf": 0.755, "esf": 0.245}, {"trace": 1.066, "density": 4.35, "ecdf": 0.536, "esf": 0.464}, {"trace": 1.059, "density": 4.401, "ecdf": 0.502, "esf": 0.498}, {"trace": 1.165, "density": 2.108, "ecdf": 0.876, "esf": 0.123}, {"trace": 1.164, "density": 2.139, "ecdf": 0.874, "esf": 0.126}, {"trace": 1.24, "density": 0.636, "ecdf": 0.969, "esf": 0.031}, {"trace": 0.929, "density": 1.535, "ecdf": 0.05, "esf": 0.95}, {"trace": 1.233, "density": 0.714, "ecdf": 0.963, "esf": 0.037}, {"trace": 1.028, "density": 4.398, "ecdf": 0.364, "esf": 0.636}, {"trace": 1.045, "density": 4.448, "ecdf": 0.442, "esf": 0.558}, {"trace": 0.991, "density": 3.628, "ecdf": 0.207, "esf": 0.793}, {"trace": 1.026, "density": 4.384, "ecdf": 0.355, "esf": 0.645}, {"trace": 0.973, "density": 2.93, "ecdf": 0.152, "esf": 0.848}, {"trace": 1.121, "density": 3.395, "ecdf": 0.753, "esf": 0.247}, {"trace": 0.881, "density": 0.454, "ecdf": 0.012, "esf": 0.988}, {"trace": 1.094, "density": 3.976, "ecdf": 0.652, "esf": 0.348}, {"trace": 1.064, "density": 4.363, "ecdf": 0.529, "esf": 0.471}, {"trace": 0.905, "density": 0.811, "ecdf": 0.026, "esf": 0.974}, {"trace": 1.037, "density": 4.436, "ecdf": 0.405, "esf": 0.595}, {"trace": 1.171, "density": 1.932, "ecdf": 0.889, "esf": 0.111}, {"trace": 1.188, "density": 1.512, "ecdf": 0.915, "esf": 0.085}, {"trace": 1.0, "density": 3.976, "ecdf": 0.245, "esf": 0.755}, {"trace": 0.994, "density": 3.756, "ecdf": 0.217, "esf": 0.783}, {"trace": 1.064, "density": 4.367, "ecdf": 0.526, "esf": 0.474}, {"trace": 0.974, "density": 2.949, "ecdf": 0.154, "esf": 0.846}, {"trace": 1.061, "density": 4.385, "ecdf": 0.514, "esf": 0.486}, {"trace": 1.062, "density": 4.384, "ecdf": 0.515, "esf": 0.485}, {"trace": 1.108, "density": 3.723, "ecdf": 0.706, "esf": 0.294}, {"trace": 0.938, "density": 1.834, "ecdf": 0.07, "esf": 0.93}, {"trace": 0.988, "density": 3.514, "ecdf": 0.197, "esf": 0.803}, {"trace": 1.059, "density": 4.4, "ecdf": 0.504, "esf": 0.496}, {"trace": 1.056, "density": 4.42, "ecdf": 0.487, "esf": 0.513}, {"trace": 0.983, "density": 3.272, "ecdf": 0.178, "esf": 0.822}, {"trace": 0.998, "density": 3.883, "ecdf": 0.233, "esf": 0.767}, {"trace": 1.199, "density": 1.308, "ecdf": 0.93, "esf": 0.07}, {"trace": 0.869, "density": 0.325, "ecdf": 0.007, "esf": 0.993}, {"trace": 1.29, "density": 0.252, "ecdf": 0.989, "esf": 0.011}, {"trace": 1.03, "density": 4.408, "ecdf": 0.372, "esf": 0.628}, {"trace": 1.051, "density": 4.438, "ecdf": 0.469, "esf": 0.531}, {"trace": 1.031, "density": 4.415, "ecdf": 0.378, "esf": 0.621}, {"trace": 1.02, "density": 4.346, "ecdf": 0.33, "esf": 0.67}, {"trace": 1.202, "density": 1.239, "ecdf": 0.936, "esf": 0.064}, {"trace": 1.184, "density": 1.602, "ecdf": 0.91, "esf": 0.09}, {"trace": 1.086, "density": 4.097, "ecdf": 0.623, "esf": 0.377}, {"trace": 1.006, "density": 4.146, "ecdf": 0.27, "esf": 0.73}, {"trace": 0.948, "density": 2.112, "ecdf": 0.086, "esf": 0.914}, {"trace": 0.956, "density": 2.365, "ecdf": 0.104, "esf": 0.896}, {"trace": 0.984, "density": 3.335, "ecdf": 0.183, "esf": 0.817}, {"trace": 0.973, "density": 2.924, "ecdf": 0.151, "esf": 0.849}, {"trace": 1.142, "density": 2.772, "ecdf": 0.816, "esf": 0.184}, {"trace": 1.15, "density": 2.539, "ecdf": 0.84, "esf": 0.16}, {"trace": 1.131, "density": 3.097, "ecdf": 0.788, "esf": 0.212}, {"trace": 1.116, "density": 3.52, "ecdf": 0.736, "esf": 0.264}, {"trace": 0.999, "density": 3.92, "ecdf": 0.238, "esf": 0.762}, {"trace": 0.952, "density": 2.256, "ecdf": 0.097, "esf": 0.903}, {"trace": 0.868, "density": 0.318, "ecdf": 0.007, "esf": 0.993}, {"trace": 0.975, "density": 2.975, "ecdf": 0.156, "esf": 0.844}, {"trace": 0.966, "density": 2.677, "ecdf": 0.13, "esf": 0.87}, {"trace": 1.016, "density": 4.305, "ecdf": 0.312, "esf": 0.688}, {"trace": 1.16, "density": 2.278, "ecdf": 0.863, "esf": 0.137}, {"trace": 0.998, "density": 3.887, "ecdf": 0.233, "esf": 0.767}, {"trace": 1.116, "density": 3.521, "ecdf": 0.736, "esf": 0.264}, {"trace": 1.252, "density": 0.528, "ecdf": 0.975, "esf": 0.025}, {"trace": 1.225, "density": 0.827, "ecdf": 0.957, "esf": 0.043}, {"trace": 1.443, "density": 0.012, "ecdf": 1.0, "esf": 0.0}, {"trace": 0.921, "density": 1.28, "ecdf": 0.04, "esf": 0.96}, {"trace": 0.984, "density": 3.313, "ecdf": 0.181, "esf": 0.819}, {"trace": 1.171, "density": 1.935, "ecdf": 0.888, "esf": 0.112}, {"trace": 1.169, "density": 2.005, "ecdf": 0.883, "esf": 0.117}, {"trace": 1.053, "density": 4.432, "ecdf": 0.478, "esf": 0.522}, {"trace": 1.176, "density": 1.795, "ecdf": 0.897, "esf": 0.103}, {"trace": 0.998, "density": 3.88, "ecdf": 0.232, "esf": 0.768}, {"trace": 1.208, "density": 1.14, "ecdf": 0.942, "esf": 0.058}, {"trace": 1.257, "density": 0.489, "ecdf": 0.977, "esf": 0.023}, {"trace": 1.324, "density": 0.119, "ecdf": 0.995, "esf": 0.005}, {"trace": 1.056, "density": 4.418, "ecdf": 0.489, "esf": 0.511}, {"trace": 1.17, "density": 1.975, "ecdf": 0.885, "esf": 0.115}, {"trace": 1.018, "density": 4.327, "ecdf": 0.322, "esf": 0.678}, {"trace": 1.06, "density": 4.394, "ecdf": 0.507, "esf": 0.493}, {"trace": 1.1, "density": 3.883, "ecdf": 0.675, "esf": 0.325}, {"trace": 0.928, "density": 1.52, "ecdf": 0.05, "esf": 0.95}, {"trace": 1.11, "density": 3.685, "ecdf": 0.713, "esf": 0.287}, {"trace": 0.976, "density": 3.04, "ecdf": 0.162, "esf": 0.838}, {"trace": 1.055, "density": 4.425, "ecdf": 0.483, "esf": 0.517}, {"trace": 1.033, "density": 4.421, "ecdf": 0.383, "esf": 0.617}, {"trace": 1.075, "density": 4.255, "ecdf": 0.573, "esf": 0.427}, {"trace": 1.082, "density": 4.166, "ecdf": 0.603, "esf": 0.397}, {"trace": 0.981, "density": 3.205, "ecdf": 0.174, "esf": 0.826}, {"trace": 1.033, "density": 4.422, "ecdf": 0.384, "esf": 0.616}, {"trace": 1.025, "density": 4.383, "ecdf": 0.354, "esf": 0.647}, {"trace": 1.037, "density": 4.436, "ecdf": 0.404, "esf": 0.596}, {"trace": 1.048, "density": 4.445, "ecdf": 0.454, "esf": 0.546}, {"trace": 1.087, "density": 4.092, "ecdf": 0.624, "esf": 0.375}, {"trace": 1.062, "density": 4.381, "ecdf": 0.517, "esf": 0.483}, {"trace": 1.188, "density": 1.512, "ecdf": 0.915, "esf": 0.085}, {"trace": 0.891, "density": 0.57, "ecdf": 0.017, "esf": 0.983}, {"trace": 0.978, "density": 3.09, "ecdf": 0.166, "esf": 0.834}, {"trace": 1.099, "density": 3.895, "ecdf": 0.672, "esf": 0.328}, {"trace": 1.09, "density": 4.044, "ecdf": 0.635, "esf": 0.365}, {"trace": 1.093, "density": 3.99, "ecdf": 0.649, "esf": 0.351}, {"trace": 1.123, "density": 3.325, "ecdf": 0.761, "esf": 0.239}, {"trace": 1.123, "density": 3.322, "ecdf": 0.762, "esf": 0.238}, {"trace": 1.167, "density": 2.057, "ecdf": 0.879, "esf": 0.121}, {"trace": 0.989, "density": 3.551, "ecdf": 0.2, "esf": 0.8}, {"trace": 1.037, "density": 4.437, "ecdf": 0.406, "esf": 0.594}, {"trace": 1.201, "density": 1.265, "ecdf": 0.933, "esf": 0.067}, {"trace": 1.106, "density": 3.772, "ecdf": 0.698, "esf": 0.302}, {"trace": 1.06, "density": 4.398, "ecdf": 0.505, "esf": 0.495}, {"trace": 1.035, "density": 4.429, "ecdf": 0.394, "esf": 0.606}, {"trace": 1.127, "density": 3.207, "ecdf": 0.776, "esf": 0.224}, {"trace": 1.132, "density": 3.042, "ecdf": 0.791, "esf": 0.209}, {"trace": 0.964, "density": 2.631, "ecdf": 0.126, "esf": 0.874}, {"trace": 1.046, "density": 4.447, "ecdf": 0.447, "esf": 0.553}, {"trace": 1.104, "density": 3.802, "ecdf": 0.694, "esf": 0.306}, {"trace": 0.996, "density": 3.806, "ecdf": 0.223, "esf": 0.777}, {"trace": 1.042, "density": 4.447, "ecdf": 0.429, "esf": 0.571}, {"trace": 1.017, "density": 4.319, "ecdf": 0.319, "esf": 0.681}, {"trace": 1.036, "density": 4.433, "ecdf": 0.4, "esf": 0.6}, {"trace": 1.032, "density": 4.415, "ecdf": 0.379, "esf": 0.621}, {"trace": 1.015, "density": 4.297, "ecdf": 0.309, "esf": 0.691}, {"trace": 1.071, "density": 4.304, "ecdf": 0.554, "esf": 0.446}, {"trace": 0.991, "density": 3.612, "ecdf": 0.205, "esf": 0.795}, {"trace": 1.001, "density": 4.002, "ecdf": 0.248, "esf": 0.752}, {"trace": 1.084, "density": 4.131, "ecdf": 0.615, "esf": 0.385}, {"trace": 1.041, "density": 4.445, "ecdf": 0.423, "esf": 0.577}, {"trace": 0.958, "density": 2.428, "ecdf": 0.108, "esf": 0.892}, {"trace": 1.083, "density": 4.153, "ecdf": 0.609, "esf": 0.391}, {"trace": 1.068, "density": 4.333, "ecdf": 0.543, "esf": 0.457}, {"trace": 1.034, "density": 4.424, "ecdf": 0.387, "esf": 0.613}, {"trace": 1.038, "density": 4.439, "ecdf": 0.411, "esf": 0.589}, {"trace": 1.096, "density": 3.954, "ecdf": 0.659, "esf": 0.341}, {"trace": 1.064, "density": 4.363, "ecdf": 0.529, "esf": 0.471}, {"trace": 1.088, "density": 4.079, "ecdf": 0.627, "esf": 0.373}, {"trace": 1.037, "density": 4.436, "ecdf": 0.404, "esf": 0.596}, {"trace": 0.966, "density": 2.705, "ecdf": 0.133, "esf": 0.867}, {"trace": 1.057, "density": 4.412, "ecdf": 0.496, "esf": 0.504}, {"trace": 1.053, "density": 4.432, "ecdf": 0.477, "esf": 0.523}, {"trace": 1.008, "density": 4.195, "ecdf": 0.28, "esf": 0.72}, {"trace": 1.06, "density": 4.395, "ecdf": 0.507, "esf": 0.493}, {"trace": 0.96, "density": 2.491, "ecdf": 0.113, "esf": 0.887}, {"trace": 1.151, "density": 2.521, "ecdf": 0.841, "esf": 0.159}, {"trace": 1.083, "density": 4.154, "ecdf": 0.608, "esf": 0.392}, {"trace": 1.083, "density": 4.141, "ecdf": 0.611, "esf": 0.389}, {"trace": 1.016, "density": 4.309, "ecdf": 0.314, "esf": 0.686}, {"trace": 1.084, "density": 4.132, "ecdf": 0.614, "esf": 0.386}, {"trace": 1.085, "density": 4.126, "ecdf": 0.616, "esf": 0.384}, {"trace": 1.065, "density": 4.36, "ecdf": 0.531, "esf": 0.469}, {"trace": 1.183, "density": 1.624, "ecdf": 0.909, "esf": 0.091}, {"trace": 1.175, "density": 1.825, "ecdf": 0.895, "esf": 0.105}, {"trace": 1.146, "density": 2.644, "ecdf": 0.83, "esf": 0.17}, {"trace": 1.17, "density": 1.981, "ecdf": 0.884, "esf": 0.116}, {"trace": 0.95, "density": 2.201, "ecdf": 0.092, "esf": 0.908}, {"trace": 1.19, "density": 1.466, "ecdf": 0.918, "esf": 0.082}, {"trace": 1.0, "density": 3.979, "ecdf": 0.245, "esf": 0.755}, {"trace": 1.054, "density": 4.428, "ecdf": 0.48, "esf": 0.52}, {"trace": 1.173, "density": 1.876, "ecdf": 0.892, "esf": 0.108}, {"trace": 1.153, "density": 2.469, "ecdf": 0.846, "esf": 0.154}, {"trace": 1.007, "density": 4.169, "ecdf": 0.276, "esf": 0.724}, {"trace": 1.027, "density": 4.39, "ecdf": 0.36, "esf": 0.64}, {"trace": 1.078, "density": 4.217, "ecdf": 0.586, "esf": 0.414}, {"trace": 1.061, "density": 4.391, "ecdf": 0.51, "esf": 0.49}, {"trace": 1.019, "density": 4.341, "ecdf": 0.327, "esf": 0.673}, {"trace": 1.081, "density": 4.177, "ecdf": 0.599, "esf": 0.401}, {"trace": 1.093, "density": 3.995, "ecdf": 0.648, "esf": 0.352}, {"trace": 0.977, "density": 3.063, "ecdf": 0.164, "esf": 0.836}, {"trace": 1.031, "density": 4.411, "ecdf": 0.374, "esf": 0.626}, {"trace": 1.068, "density": 4.333, "ecdf": 0.543, "esf": 0.457}, {"trace": 1.04, "density": 4.444, "ecdf": 0.421, "esf": 0.579}, {"trace": 1.19, "density": 1.479, "ecdf": 0.917, "esf": 0.083}, {"trace": 1.214, "density": 1.02, "ecdf": 0.948, "esf": 0.052}, {"trace": 1.001, "density": 3.998, "ecdf": 0.248, "esf": 0.752}, {"trace": 1.124, "density": 3.283, "ecdf": 0.767, "esf": 0.233}, {"trace": 0.975, "density": 2.975, "ecdf": 0.156, "esf": 0.844}, {"trace": 1.047, "density": 4.446, "ecdf": 0.452, "esf": 0.548}, {"trace": 0.998, "density": 3.9, "ecdf": 0.235, "esf": 0.765}, {"trace": 1.105, "density": 3.781, "ecdf": 0.698, "esf": 0.302}, {"trace": 1.081, "density": 4.173, "ecdf": 0.601, "esf": 0.399}, {"trace": 1.21, "density": 1.103, "ecdf": 0.945, "esf": 0.055}, {"trace": 1.147, "density": 2.638, "ecdf": 0.83, "esf": 0.169}, {"trace": 0.961, "density": 2.539, "ecdf": 0.117, "esf": 0.883}, {"trace": 0.88, "density": 0.437, "ecdf": 0.011, "esf": 0.989}, {"trace": 1.105, "density": 3.778, "ecdf": 0.698, "esf": 0.302}, {"trace": 1.091, "density": 4.027, "ecdf": 0.638, "esf": 0.362}, {"trace": 0.999, "density": 3.945, "ecdf": 0.24, "esf": 0.76}, {"trace": 1.084, "density": 4.132, "ecdf": 0.614, "esf": 0.386}, {"trace": 0.993, "density": 3.712, "ecdf": 0.214, "esf": 0.786}, {"trace": 1.138, "density": 2.882, "ecdf": 0.807, "esf": 0.193}, {"trace": 1.08, "density": 4.183, "ecdf": 0.598, "esf": 0.402}, {"trace": 1.099, "density": 3.902, "ecdf": 0.67, "esf": 0.33}, {"trace": 1.035, "density": 4.428, "ecdf": 0.392, "esf": 0.608}, {"trace": 1.109, "density": 3.686, "ecdf": 0.713, "esf": 0.287}, {"trace": 1.096, "density": 3.95, "ecdf": 0.659, "esf": 0.341}, {"trace": 1.121, "density": 3.371, "ecdf": 0.756, "esf": 0.244}, {"trace": 1.036, "density": 4.434, "ecdf": 0.402, "esf": 0.598}, {"trace": 1.062, "density": 4.384, "ecdf": 0.515, "esf": 0.485}, {"trace": 1.007, "density": 4.172, "ecdf": 0.277, "esf": 0.723}, {"trace": 1.092, "density": 4.007, "ecdf": 0.645, "esf": 0.355}, {"trace": 0.974, "density": 2.939, "ecdf": 0.153, "esf": 0.847}, {"trace": 1.061, "density": 4.39, "ecdf": 0.51, "esf": 0.49}, {"trace": 0.95, "density": 2.191, "ecdf": 0.091, "esf": 0.909}, {"trace": 1.031, "density": 4.413, "ecdf": 0.376, "esf": 0.624}, {"trace": 1.021, "density": 4.35, "ecdf": 0.332, "esf": 0.668}, {"trace": 1.249, "density": 0.552, "ecdf": 0.974, "esf": 0.026}, {"trace": 1.153, "density": 2.463, "ecdf": 0.846, "esf": 0.153}, {"trace": 1.136, "density": 2.937, "ecdf": 0.801, "esf": 0.199}, {"trace": 1.038, "density": 4.438, "ecdf": 0.41, "esf": 0.59}, {"trace": 1.123, "density": 3.318, "ecdf": 0.762, "esf": 0.238}, {"trace": 1.062, "density": 4.382, "ecdf": 0.516, "esf": 0.484}, {"trace": 1.064, "density": 4.366, "ecdf": 0.526, "esf": 0.474}, {"trace": 1.267, "density": 0.408, "ecdf": 0.982, "esf": 0.018}, {"trace": 0.883, "density": 0.471, "ecdf": 0.013, "esf": 0.987}, {"trace": 1.119, "density": 3.429, "ecdf": 0.748, "esf": 0.252}, {"trace": 1.114, "density": 3.565, "ecdf": 0.731, "esf": 0.269}, {"trace": 1.114, "density": 3.575, "ecdf": 0.729, "esf": 0.271}], "data-cc89e1a883d94a4bb40c15b1a1c9f640": [{"x": 1.4, "y": 1.84}], "data-1395cfaebbe2c8ea89a79e8befc657d6": [{"x": 1.4, "y": 1.6}]}}, {"mode": "vega-lite"});
</script>
<p><strong>Hover over the above plot to examine plausible rates of change in purchases with increasing numbers of complaints, and an associated probability</strong>. For example, by hovering over <em>one</em>, which indicates no change in purchases as a result of increasing complaints, we see that the probability the effect is bigger than this - that is, increasing complaints means increasing purchases - is <em>75%</em>. Similarly, the probability is negative is 25%. The plot highlights clearly that the most likely rate of increase is <strong>1.06</strong>, or <strong>6%</strong>, but the rate is plausibly within the region of 0.89 to 1.25. From this we are able to infer the effect of increased complaints on purchases across a variety of contexts.</p>
</section>
<section id="customer-segmentation---revealing-three-profiles" class="level1">
<h1>Customer segmentation - revealing three profiles</h1>
<p>With the same dataset used above, machine learning techniques (see <strong>Technical Annexe</strong> for details) can uncover the latent structure in the data that can then be grouped together, revealing an optimal grouping of doctors. The below chart, also interactive, allows for the exploration of each segment and their distinct customer profile. Doctors were segmented using a two-feature representation of a wider feature space, specifically: - Number of complaints - Incidence and R rates - Satisfaction with company - Experience with company - Category; Specialist or GP - Rank; from Silver through to Titanium Plus - Unique Condition Index; a count, per doctor, of the number of unique conditions they treat.</p>
<div id="8c3d0a3c" class="cell" data-execution_count="6">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb8" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb8-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># First scale the Qty measure</span></span>
<span id="cb8-2">df <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> df.assign(Purchases<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>st.zscore(df[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Purchases'</span>]))</span>
<span id="cb8-3"></span>
<span id="cb8-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Use Spectral embedding to preserve local distances in a 2D representation</span></span>
<span id="cb8-5">spectra <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> SpectralEmbedding(n_components<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, random_state<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">42</span>).fit_transform(df)</span>
<span id="cb8-6"></span>
<span id="cb8-7"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Use silhouette scoring to select K with K-means</span></span>
<span id="cb8-8">sc <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> {}</span>
<span id="cb8-9"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> k <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>):</span>
<span id="cb8-10">    </span>
<span id="cb8-11">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Fit KMeans</span></span>
<span id="cb8-12">    km <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> KMeans(n_clusters<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>k, random_state<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">42</span>).fit(spectra)</span>
<span id="cb8-13">    </span>
<span id="cb8-14">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Extra and score silhouette</span></span>
<span id="cb8-15">    sc[k] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> silhouette_score(spectra, km.labels_)</span>
<span id="cb8-16"></span>
<span id="cb8-17"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Refit KMeans with the max silhouette score</span></span>
<span id="cb8-18">best_K, best_sc <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">max</span>(sc.items(), key<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">lambda</span> y: y[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>])</span>
<span id="cb8-19">final_k <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> KMeans(n_clusters<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>best_K, random_state<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">42</span>).fit(spectra)</span>
<span id="cb8-20"></span>
<span id="cb8-21"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Reveal dimension reduction and clusters in an interactive plot, with additional data on mouseover!</span></span>
<span id="cb8-22">spectra_df <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (pd.DataFrame(spectra, columns<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'spec_1'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'spec_2'</span>], index<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>df.index)</span>
<span id="cb8-23">              .assign(Segment<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>final_k.labels_<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb8-24">              .join(doctors[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'DoctorID'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Category'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Rank'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Region'</span>]].set_index(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'DoctorID'</span>))</span>
<span id="cb8-25">              .join(df)</span>
<span id="cb8-26">              .reset_index()</span>
<span id="cb8-27">             )</span>
<span id="cb8-28"></span>
<span id="cb8-29"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Per group, take mean of continuous features, count of Category/Rank</span></span>
<span id="cb8-30">average <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Complaints'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Incidence rate'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'R rate'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Satisfaction'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Experience'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Purchases'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Unique Condition Index'</span>]</span>
<span id="cb8-31"></span>
<span id="cb8-32"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Groupby object</span></span>
<span id="cb8-33">base <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> spectra_df.groupby(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Segment'</span>)</span>
<span id="cb8-34">chart <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (base.agg({x: <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'mean'</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> x <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> average})</span>
<span id="cb8-35">         .join(base[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Category'</span>].value_counts().unstack(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Category'</span>))</span>
<span id="cb8-36">         .join(base[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Rank'</span>].value_counts().unstack(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Rank'</span>))</span>
<span id="cb8-37">         .fillna(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)</span>
<span id="cb8-38">         .reset_index()</span>
<span id="cb8-39">         .melt(id_vars<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Segment'</span>, var_name<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Attribute'</span>, value_name<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Aggregate'</span>)</span>
<span id="cb8-40">         .assign(prep<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">lambda</span> x: np.where(x[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Attribute'</span>].isin(average), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'con'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'cat'</span>))</span>
<span id="cb8-41">        )</span>
<span id="cb8-42"></span>
<span id="cb8-43"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Build continuous/cat plots</span></span>
<span id="cb8-44">left <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (alt.Chart(chart.query(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'prep == "con"'</span>), width<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">450</span>, height<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">400</span>)</span>
<span id="cb8-45">        .mark_bar()</span>
<span id="cb8-46">        .encode(x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Aggregate'</span>, </span>
<span id="cb8-47">                y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>alt.Y(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Attribute'</span>, title<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Metric variable'</span>),</span>
<span id="cb8-48">                color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Segment:N'</span>)</span>
<span id="cb8-49">       )</span>
<span id="cb8-50"></span>
<span id="cb8-51">right <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (alt.Chart(chart.query(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'prep == "cat"'</span>), width<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">450</span>, height<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">400</span>)</span>
<span id="cb8-52">         .mark_bar()</span>
<span id="cb8-53">         .encode(x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>alt.X(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Aggregate'</span>, title<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Number of doctors'</span>),</span>
<span id="cb8-54">                 y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>alt.Y(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Attribute'</span>, title<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Rank and Category'</span>),</span>
<span id="cb8-55">                 color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Segment:N'</span>)</span>
<span id="cb8-56">       )</span>
<span id="cb8-57"></span>
<span id="cb8-58"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Dropdown selectors </span></span>
<span id="cb8-59">input_dropdown <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> alt.binding_select(options<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">list</span>(chart[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Segment'</span>].unique()), name<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'SELECT SEGMENT:   '</span>)</span>
<span id="cb8-60">selection <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> alt.selection_single(fields<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Segment'</span>], bind<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>input_dropdown)</span>
<span id="cb8-61"></span>
<span id="cb8-62"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Add to plots</span></span>
<span id="cb8-63">left <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> left.add_selection(selection).transform_filter(selection)</span>
<span id="cb8-64">right <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> right.add_selection(selection).transform_filter(selection)</span>
<span id="cb8-65"></span>
<span id="cb8-66"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Stack, and configure appearance</span></span>
<span id="cb8-67">(left <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|</span> right).configure_axis(labelFontSize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span>, titleFontSize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span>).configure_legend(labelFontSize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span>, titleFontSize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span>)   </span></code></pre></div></div>
</div>
<div id="altair-viz-95329d44b6634c81b73b29bcc410de69">

</div>
<script type="text/javascript">
  var VEGA_DEBUG = (typeof VEGA_DEBUG == "undefined") ? {} : VEGA_DEBUG;
  (function(spec, embedOpt){
    let outputDiv = document.currentScript.previousElementSibling;
    if (outputDiv.id !== "altair-viz-95329d44b6634c81b73b29bcc410de69") {
      outputDiv = document.getElementById("altair-viz-95329d44b6634c81b73b29bcc410de69");
    }
    const paths = {
      "vega": "https://cdn.jsdelivr.net/npm//vega@5?noext",
      "vega-lib": "https://cdn.jsdelivr.net/npm//vega-lib?noext",
      "vega-lite": "https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext",
      "vega-embed": "https://cdn.jsdelivr.net/npm//vega-embed@6?noext",
    };

    function maybeLoadScript(lib, version) {
      var key = `${lib.replace("-", "")}_version`;
      return (VEGA_DEBUG[key] == version) ?
        Promise.resolve(paths[lib]) :
        new Promise(function(resolve, reject) {
          var s = document.createElement('script');
          document.getElementsByTagName("head")[0].appendChild(s);
          s.async = true;
          s.onload = () => {
            VEGA_DEBUG[key] = version;
            return resolve(paths[lib]);
          };
          s.onerror = () => reject(`Error loading script: ${paths[lib]}`);
          s.src = paths[lib];
        });
    }

    function showError(err) {
      outputDiv.innerHTML = `<div class="error" style="color:red;">${err}</div>`;
      throw err;
    }

    function displayChart(vegaEmbed) {
      vegaEmbed(outputDiv, spec, embedOpt)
        .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));
    }

    if(typeof define === "function" && define.amd) {
      requirejs.config({paths});
      require(["vega-embed"], displayChart, err => showError(`Error loading script: ${err.message}`));
    } else {
      maybeLoadScript("vega", "5")
        .then(() => maybeLoadScript("vega-lite", "4.17.0"))
        .then(() => maybeLoadScript("vega-embed", "6"))
        .catch(showError)
        .then(() => displayChart(vegaEmbed));
    }
  })({"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}, "axis": {"labelFontSize": 16, "titleFontSize": 16}, "legend": {"labelFontSize": 16, "titleFontSize": 16}}, "hconcat": [{"data": {"name": "data-0a0110818e4e6bcc5385c71f2615c81c"}, "mark": "bar", "encoding": {"color": {"field": "Segment", "type": "nominal"}, "x": {"field": "Aggregate", "type": "quantitative"}, "y": {"field": "Attribute", "title": "Metric variable", "type": "nominal"}}, "height": 400, "selection": {"selector002": {"type": "single", "fields": ["Segment"], "bind": {"input": "select", "options": [1.0, 2.0, 3.0], "name": "SELECT SEGMENT:   "}}}, "transform": [{"filter": {"selection": "selector002"}}], "width": 450}, {"data": {"name": "data-8f207efeffc36f58e3d6b274be5f9b06"}, "mark": "bar", "encoding": {"color": {"field": "Segment", "type": "nominal"}, "x": {"field": "Aggregate", "title": "Number of doctors", "type": "quantitative"}, "y": {"field": "Attribute", "title": "Rank and Category", "type": "nominal"}}, "height": 400, "selection": {"selector002": {"type": "single", "fields": ["Segment"], "bind": {"input": "select", "options": [1.0, 2.0, 3.0], "name": "SELECT SEGMENT:   "}}}, "transform": [{"filter": {"selection": "selector002"}}], "width": 450}], "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json", "datasets": {"data-0a0110818e4e6bcc5385c71f2615c81c": [{"Segment": 1, "Attribute": "Complaints", "Aggregate": -0.37456265993237786, "prep": "con"}, {"Segment": 2, "Attribute": "Complaints", "Aggregate": 0.3017124188781476, "prep": "con"}, {"Segment": 3, "Attribute": "Complaints", "Aggregate": -0.3074172218631047, "prep": "con"}, {"Segment": 1, "Attribute": "Incidence rate", "Aggregate": -0.478918256015566, "prep": "con"}, {"Segment": 2, "Attribute": "Incidence rate", "Aggregate": -0.1148648742152156, "prep": "con"}, {"Segment": 3, "Attribute": "Incidence rate", "Aggregate": 0.5831751967313447, "prep": "con"}, {"Segment": 1, "Attribute": "R rate", "Aggregate": -0.6580654786158658, "prep": "con"}, {"Segment": 2, "Attribute": "R rate", "Aggregate": 0.44075213672279545, "prep": "con"}, {"Segment": 3, "Attribute": "R rate", "Aggregate": -0.3659175576475527, "prep": "con"}, {"Segment": 1, "Attribute": "Satisfaction", "Aggregate": 0.02567754608193937, "prep": "con"}, {"Segment": 2, "Attribute": "Satisfaction", "Aggregate": -0.08113019798530584, "prep": "con"}, {"Segment": 3, "Attribute": "Satisfaction", "Aggregate": 0.13894572650989173, "prep": "con"}, {"Segment": 1, "Attribute": "Experience", "Aggregate": -0.9124430705561599, "prep": "con"}, {"Segment": 2, "Attribute": "Experience", "Aggregate": 0.5309394565712193, "prep": "con"}, {"Segment": 3, "Attribute": "Experience", "Aggregate": -0.3509996373967579, "prep": "con"}, {"Segment": 1, "Attribute": "Purchases", "Aggregate": -0.2117736859384277, "prep": "con"}, {"Segment": 2, "Attribute": "Purchases", "Aggregate": -0.23869840489708813, "prep": "con"}, {"Segment": 3, "Attribute": "Purchases", "Aggregate": 0.6242921540031425, "prep": "con"}, {"Segment": 1, "Attribute": "Unique Condition Index", "Aggregate": -0.8039400604635546, "prep": "con"}, {"Segment": 2, "Attribute": "Unique Condition Index", "Aggregate": -0.17555614179123782, "prep": "con"}, {"Segment": 3, "Attribute": "Unique Condition Index", "Aggregate": 0.9452895218405792, "prep": "con"}], "data-8f207efeffc36f58e3d6b274be5f9b06": [{"Segment": 1, "Attribute": "General Practitioner", "Aggregate": 3.0, "prep": "cat"}, {"Segment": 2, "Attribute": "General Practitioner", "Aggregate": 4.0, "prep": "cat"}, {"Segment": 3, "Attribute": "General Practitioner", "Aggregate": 0.0, "prep": "cat"}, {"Segment": 1, "Attribute": "Specialist", "Aggregate": 12.0, "prep": "cat"}, {"Segment": 2, "Attribute": "Specialist", "Aggregate": 35.0, "prep": "cat"}, {"Segment": 3, "Attribute": "Specialist", "Aggregate": 20.0, "prep": "cat"}, {"Segment": 1, "Attribute": "Ambassador", "Aggregate": 4.0, "prep": "cat"}, {"Segment": 2, "Attribute": "Ambassador", "Aggregate": 10.0, "prep": "cat"}, {"Segment": 3, "Attribute": "Ambassador", "Aggregate": 13.0, "prep": "cat"}, {"Segment": 1, "Attribute": "Gold", "Aggregate": 2.0, "prep": "cat"}, {"Segment": 2, "Attribute": "Gold", "Aggregate": 1.0, "prep": "cat"}, {"Segment": 3, "Attribute": "Gold", "Aggregate": 0.0, "prep": "cat"}, {"Segment": 1, "Attribute": "Gold Plus", "Aggregate": 0.0, "prep": "cat"}, {"Segment": 2, "Attribute": "Gold Plus", "Aggregate": 3.0, "prep": "cat"}, {"Segment": 3, "Attribute": "Gold Plus", "Aggregate": 0.0, "prep": "cat"}, {"Segment": 1, "Attribute": "Platinum", "Aggregate": 1.0, "prep": "cat"}, {"Segment": 2, "Attribute": "Platinum", "Aggregate": 8.0, "prep": "cat"}, {"Segment": 3, "Attribute": "Platinum", "Aggregate": 1.0, "prep": "cat"}, {"Segment": 1, "Attribute": "Platinum Plus", "Aggregate": 1.0, "prep": "cat"}, {"Segment": 2, "Attribute": "Platinum Plus", "Aggregate": 9.0, "prep": "cat"}, {"Segment": 3, "Attribute": "Platinum Plus", "Aggregate": 0.0, "prep": "cat"}, {"Segment": 1, "Attribute": "Silver Plus", "Aggregate": 2.0, "prep": "cat"}, {"Segment": 2, "Attribute": "Silver Plus", "Aggregate": 0.0, "prep": "cat"}, {"Segment": 3, "Attribute": "Silver Plus", "Aggregate": 3.0, "prep": "cat"}, {"Segment": 1, "Attribute": "Titanium", "Aggregate": 5.0, "prep": "cat"}, {"Segment": 2, "Attribute": "Titanium", "Aggregate": 8.0, "prep": "cat"}, {"Segment": 3, "Attribute": "Titanium", "Aggregate": 3.0, "prep": "cat"}]}}, {"mode": "vega-lite"});
</script>
<div id="f1fd6471" class="cell" data-execution_count="7">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb9" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb9-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Segment profile</span></span>
<span id="cb9-2">(spectra_df[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Segment'</span>]</span>
<span id="cb9-3"> .value_counts(normalize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span>
<span id="cb9-4"> .sort_index()</span>
<span id="cb9-5"> .<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">round</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb9-6"> .to_frame(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Proportion of sample'</span>)</span>
<span id="cb9-7"> .rename_axis(index<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Segment Number'</span>))</span></code></pre></div></div>
</div>
<div>

<table class="dataframe table table-sm table-striped small">
<thead>
<tr>
<th>
</th>
<th>
Proportion of sample
</th>
</tr>
<tr>
<th>
Segment Number
</th>
<th>
</th>
</tr>
</thead>
<tbody>
<tr>
<th>
1
</th>
<td>
0.20
</td>
</tr>
<tr>
<th>
2
</th>
<td>
0.53
</td>
</tr>
<tr>
<th>
3
</th>
<td>
0.27
</td>
</tr>
</tbody>
</table>
</div>
<p><strong>Using the interactive dropdown above, it is easy to explore the new segments and their important features.</strong> These are described simply below: - <strong>Segment One</strong>. Doctors here have low <em>experience</em> with the company, lower rates of <em>purchases</em>, <em>R</em> and <em>incidence</em> rates, and give fewer <em>complaints</em> They also treat very few <em>unique conditions</em>, and have very average reported <em>satisfaction</em>. There are more <em>general practitioners</em> here, and some individuals at the higher ranks. This would be a great group to target for more positive engagement and on-boarding marketing materials. - <strong>Segment Two</strong>. Doctors here have high <em>R</em> rates, give more <em>complaints</em>, and have a high level of <em>experience</em> with the company. They make relatively fewer <em>purchases</em> and seem to treat fewer <em>unique conditions</em>. This segment, the largest in number, is diffuse in terms of its members and their rank and category. This set of doctors seem to be longstanding customers but are unhappy, and are making fewer purchases - a good target for focus groups to obtain detailed data on what is going wrong, and if this is perhaps related to the smaller number of conditions they treat. - <strong>Segment Three</strong>. Doctors here make a lot of <em>purchases</em> and have high <em>incidence rates</em>, are relatively <em>satisfied</em>, and treat the most number of <em>unique conditions</em>. They make fewer <em>complaints</em> but have less <em>experience</em> with the company. They are comprised of a lot of <em>Ambassadors</em>. This group appears to be a relatively content customer base, and its important they stay that way through understanding what the company is doing right.</p>
<p>A simple, memorable mapping could be: - Segment One: <strong>Inexperienced and indifferent doctors</strong>. - Segment Two: <strong>Experienced but unhappy doctors</strong>. - Segment Three: <strong>Returning, happy, but less experienced doctors</strong>.</p>
</section>
<section id="technical-annexe" class="level1">
<h1>Technical Annexe</h1>
<p>Significantly greater technical detail on the above sections are provided below, for interested readers.</p>
<section id="feature-engineering" class="level2">
<h2 class="anchored" data-anchor-id="feature-engineering">Feature engineering</h2>
<p>The features used across the analysis were generated from the <code>doctors</code>, <code>complaints</code>, and <code>orders</code> datasets. Despite a large number of observations in the <code>doctors</code> dataset (437), relatively few of these were in the <code>complaints</code> dataset (just 16%). Given that complaints and purchases were a primary query, the smaller dataset was analysed. Features were engineered from across the datasets before being merged into one:</p>
<ul>
<li>From <code>doctors</code>, <code>Incidence rate</code>, <code>R rate</code>, <code>Satisfaction</code>, <code>Experience</code>, and <code>Purchases</code> were standardised and scaled as continuous features. The <code>Rank</code> and <code>Category</code> variables were one-hot-encoded, using “General Practitioner” and “Ambassador” as the reference categories, respectively - the former having two levels, and the latter eight.</li>
<li>From <code>complaints</code>, the <code>Qty</code> variable was summed across complaint types per doctor, yielding a single count per doctor.</li>
<li>The <code>orders</code> data was processed such that across the orders each doctor placed, the sum of unique conditions was calculated - doctors who treat more varied conditions may have more needs, and this feature could help discriminate this.</li>
</ul>
<p>The final dataset contained 74 unique doctors, and 16 features. After merging, there were 55 missing data points for the <code>satisfaction</code> feature. This was imputed using K-nearest-neighbours imputation.</p>
</section>
<section id="assessing-purchase-complaint-association-probabilistically" class="level2">
<h2 class="anchored" data-anchor-id="assessing-purchase-complaint-association-probabilistically">Assessing purchase ~ complaint association probabilistically</h2>
<p>To assess the relationship between complaints and purchases, PyMC was used to fit a Bayesian negative-binomial regression, complaints alongside the 14 other features described above (purchases being the target variable). Negative-binomial regressions allow for the prediction of count data precisely, especially in situations where the variance of the count data is greater than the mean (here, the average purchase count is 10, while the variance is 130). Priors were set to be restrictive to help with the small dataset, avoiding overfitting, following a <img src="https://latex.codecogs.com/png.latex?%5Cmathcal%7BN%7D(0,%201)"> distribution.</p>
<p>The central feature is of course the <code>complaint</code> predictor, but the full model summary is printed below, highlighting those predictors which have a high (or indeed low) probability of being associated with increasing purchases, which may be valuable information. For example, the unique condition index is much more likely to have a negative association with purhcases; doctors who treat more conditions make fewer purchases. Those with higher incidence rates make more purchases. There is uncertainty in many of these estimates but they are provided for further insight.</p>
<div id="0c6c0523" class="cell" data-execution_count="8">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb10" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb10-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Tabulate results</span></span>
<span id="cb10-2">(az</span>
<span id="cb10-3"> .summary(trace, var_names<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'β'</span>, </span>
<span id="cb10-4">          filter_vars<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'like'</span>, </span>
<span id="cb10-5">          kind<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'stats'</span>, </span>
<span id="cb10-6">          hdi_prob<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.95</span>,</span>
<span id="cb10-7">          stat_funcs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>{<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Purchase Rate Change'</span>: <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">lambda</span> x: np.mean(np.exp(x)),</span>
<span id="cb10-8">                      <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'95</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">% lo</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">wer'</span>: <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">lambda</span> x: az.hdi(np.exp(x), <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.95</span>)[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>],</span>
<span id="cb10-9">                      <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'95</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">% u</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">pper'</span>: <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">lambda</span> x: az.hdi(np.exp(x), <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.95</span>)[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>],</span>
<span id="cb10-10">                      <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Probability Positive'</span>: <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">lambda</span> x: np.mean(np.exp(x) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)})</span>
<span id="cb10-11"> .drop(index<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'β0'</span>])</span>
<span id="cb10-12"> .assign(Feature<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">lambda</span> x: x.index.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">str</span>.replace(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'β|</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">[|</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">]'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">''</span>, regex<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>).<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">str</span>.replace(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'_'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">': '</span>))</span>
<span id="cb10-13"> .set_index(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Feature'</span>)</span>
<span id="cb10-14"> .<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">filter</span>(items<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Purchase Rate Change'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'95</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">% lo</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">wer'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'95</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">% u</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">pper'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Probability Positive'</span>])</span>
<span id="cb10-15"> .style</span>
<span id="cb10-16"> .applymap(<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">lambda</span> x: <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'color: blue'</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.20</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">or</span> x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.80</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">None</span>, subset<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Probability Positive'</span>])</span>
<span id="cb10-17"> .<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">format</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{:.2f}</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'</span>)</span>
<span id="cb10-18">)</span></code></pre></div></div>
</div>
<style type="text/css">
#T_20ddd_row1_col3, #T_20ddd_row4_col3, #T_20ddd_row5_col3, #T_20ddd_row6_col3, #T_20ddd_row7_col3, #T_20ddd_row8_col3, #T_20ddd_row9_col3, #T_20ddd_row11_col3, #T_20ddd_row12_col3, #T_20ddd_row14_col3 {
  color: blue;
}
</style>
<table id="T_20ddd">
<thead>
<tr>
<th class="blank level0">
&nbsp;
</th>
<th id="T_20ddd_level0_col0" class="col_heading level0 col0">
Purchase Rate Change
</th>
<th id="T_20ddd_level0_col1" class="col_heading level0 col1">
95% lower
</th>
<th id="T_20ddd_level0_col2" class="col_heading level0 col2">
95% upper
</th>
<th id="T_20ddd_level0_col3" class="col_heading level0 col3">
Probability Positive
</th>
</tr>
<tr>
<th class="index_name level0">
Feature
</th>
<th class="blank col0">
&nbsp;
</th>
<th class="blank col1">
&nbsp;
</th>
<th class="blank col2">
&nbsp;
</th>
<th class="blank col3">
&nbsp;
</th>
</tr>
</thead>
<tbody>
<tr>
<th id="T_20ddd_level0_row0" class="row_heading level0 row0">
Complaints
</th>
<td id="T_20ddd_row0_col0" class="data row0 col0">
1.06
</td>
<td id="T_20ddd_row0_col1" class="data row0 col1">
0.90
</td>
<td id="T_20ddd_row0_col2" class="data row0 col2">
1.24
</td>
<td id="T_20ddd_row0_col3" class="data row0 col3">
0.76
</td>
</tr>
<tr>
<th id="T_20ddd_level0_row1" class="row_heading level0 row1">
Incidence rate
</th>
<td id="T_20ddd_row1_col0" class="data row1 col0">
1.09
</td>
<td id="T_20ddd_row1_col1" class="data row1 col1">
0.92
</td>
<td id="T_20ddd_row1_col2" class="data row1 col2">
1.26
</td>
<td id="T_20ddd_row1_col3" class="data row1 col3">
0.84
</td>
</tr>
<tr>
<th id="T_20ddd_level0_row2" class="row_heading level0 row2">
R rate
</th>
<td id="T_20ddd_row2_col0" class="data row2 col0">
1.03
</td>
<td id="T_20ddd_row2_col1" class="data row2 col1">
0.83
</td>
<td id="T_20ddd_row2_col2" class="data row2 col2">
1.25
</td>
<td id="T_20ddd_row2_col3" class="data row2 col3">
0.61
</td>
</tr>
<tr>
<th id="T_20ddd_level0_row3" class="row_heading level0 row3">
Satisfaction
</th>
<td id="T_20ddd_row3_col0" class="data row3 col0">
1.08
</td>
<td id="T_20ddd_row3_col1" class="data row3 col1">
0.89
</td>
<td id="T_20ddd_row3_col2" class="data row3 col2">
1.27
</td>
<td id="T_20ddd_row3_col3" class="data row3 col3">
0.79
</td>
</tr>
<tr>
<th id="T_20ddd_level0_row4" class="row_heading level0 row4">
Experience
</th>
<td id="T_20ddd_row4_col0" class="data row4 col0">
1.15
</td>
<td id="T_20ddd_row4_col1" class="data row4 col1">
0.94
</td>
<td id="T_20ddd_row4_col2" class="data row4 col2">
1.36
</td>
<td id="T_20ddd_row4_col3" class="data row4 col3">
0.92
</td>
</tr>
<tr>
<th id="T_20ddd_level0_row5" class="row_heading level0 row5">
Category: Specialist
</th>
<td id="T_20ddd_row5_col0" class="data row5 col0">
2.26
</td>
<td id="T_20ddd_row5_col1" class="data row5 col1">
0.97
</td>
<td id="T_20ddd_row5_col2" class="data row5 col2">
3.85
</td>
<td id="T_20ddd_row5_col3" class="data row5 col3">
0.99
</td>
</tr>
<tr>
<th id="T_20ddd_level0_row6" class="row_heading level0 row6">
Rank: Gold
</th>
<td id="T_20ddd_row6_col0" class="data row6 col0">
0.38
</td>
<td id="T_20ddd_row6_col1" class="data row6 col1">
0.08
</td>
<td id="T_20ddd_row6_col2" class="data row6 col2">
0.80
</td>
<td id="T_20ddd_row6_col3" class="data row6 col3">
0.02
</td>
</tr>
<tr>
<th id="T_20ddd_level0_row7" class="row_heading level0 row7">
Rank: Gold Plus
</th>
<td id="T_20ddd_row7_col0" class="data row7 col0">
0.21
</td>
<td id="T_20ddd_row7_col1" class="data row7 col1">
0.05
</td>
<td id="T_20ddd_row7_col2" class="data row7 col2">
0.42
</td>
<td id="T_20ddd_row7_col3" class="data row7 col3">
0.00
</td>
</tr>
<tr>
<th id="T_20ddd_level0_row8" class="row_heading level0 row8">
Rank: Platinum
</th>
<td id="T_20ddd_row8_col0" class="data row8 col0">
0.29
</td>
<td id="T_20ddd_row8_col1" class="data row8 col1">
0.15
</td>
<td id="T_20ddd_row8_col2" class="data row8 col2">
0.46
</td>
<td id="T_20ddd_row8_col3" class="data row8 col3">
0.00
</td>
</tr>
<tr>
<th id="T_20ddd_level0_row9" class="row_heading level0 row9">
Rank: Platinum Plus
</th>
<td id="T_20ddd_row9_col0" class="data row9 col0">
0.32
</td>
<td id="T_20ddd_row9_col1" class="data row9 col1">
0.16
</td>
<td id="T_20ddd_row9_col2" class="data row9 col2">
0.51
</td>
<td id="T_20ddd_row9_col3" class="data row9 col3">
0.00
</td>
</tr>
<tr>
<th id="T_20ddd_level0_row10" class="row_heading level0 row10">
Rank: Silver
</th>
<td id="T_20ddd_row10_col0" class="data row10 col0">
1.61
</td>
<td id="T_20ddd_row10_col1" class="data row10 col1">
0.03
</td>
<td id="T_20ddd_row10_col2" class="data row10 col2">
4.89
</td>
<td id="T_20ddd_row10_col3" class="data row10 col3">
0.50
</td>
</tr>
<tr>
<th id="T_20ddd_level0_row11" class="row_heading level0 row11">
Rank: Silver Plus
</th>
<td id="T_20ddd_row11_col0" class="data row11 col0">
0.38
</td>
<td id="T_20ddd_row11_col1" class="data row11 col1">
0.16
</td>
<td id="T_20ddd_row11_col2" class="data row11 col2">
0.68
</td>
<td id="T_20ddd_row11_col3" class="data row11 col3">
0.00
</td>
</tr>
<tr>
<th id="T_20ddd_level0_row12" class="row_heading level0 row12">
Rank: Titanium
</th>
<td id="T_20ddd_row12_col0" class="data row12 col0">
0.49
</td>
<td id="T_20ddd_row12_col1" class="data row12 col1">
0.30
</td>
<td id="T_20ddd_row12_col2" class="data row12 col2">
0.71
</td>
<td id="T_20ddd_row12_col3" class="data row12 col3">
0.00
</td>
</tr>
<tr>
<th id="T_20ddd_level0_row13" class="row_heading level0 row13">
Rank: Titanium Plus
</th>
<td id="T_20ddd_row13_col0" class="data row13 col0">
1.63
</td>
<td id="T_20ddd_row13_col1" class="data row13 col1">
0.03
</td>
<td id="T_20ddd_row13_col2" class="data row13 col2">
5.03
</td>
<td id="T_20ddd_row13_col3" class="data row13 col3">
0.50
</td>
</tr>
<tr>
<th id="T_20ddd_level0_row14" class="row_heading level0 row14">
Unique Condition Index
</th>
<td id="T_20ddd_row14_col0" class="data row14 col0">
0.93
</td>
<td id="T_20ddd_row14_col1" class="data row14 col1">
0.79
</td>
<td id="T_20ddd_row14_col2" class="data row14 col2">
1.08
</td>
<td id="T_20ddd_row14_col3" class="data row14 col3">
0.17
</td>
</tr>
</tbody>
</table>
</section>
<section id="customer-segmentation---revealing-three-profiles-1" class="level2">
<h2 class="anchored" data-anchor-id="customer-segmentation---revealing-three-profiles-1">Customer segmentation - revealing three profiles</h2>
<p>The full 16-feature dataset was reduced to two dimensions using <strong>spectral embedding</strong>. This was chosen as, unlike other feature reduction methods, it focuses on maintaining local distances between observations in the reduced space. Following the embedding, <strong>K-Means</strong> was used to determine clusters. <em>K</em> was chosen by iterating over candidate cluster numbers and assessing the <em>silhouette coefficient</em>, which assesses the average distance between a point and its within-cluster neighbours compared to its between-cluster neighbours. Three clusters emerged as having the highest coefficient, 0.47.</p>
<p>An interactive scatter plot of the resulting two-dimensional embedding and clusters is shown below, highlighting how the embedding retained distances that K-Means identified easily. <strong>Hover over each datapoint to visualise its underying full-dimensional data</strong>.</p>
<div id="1656e897" class="cell" data-execution_count="9">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb11" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb11-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Show scatter plot</span></span>
<span id="cb11-2">query2_chart <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (alt.Chart(spectra_df, width<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">600</span>, height<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">400</span>)</span>
<span id="cb11-3">                .mark_point(filled<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>, size<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">200</span>, opacity<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.50</span>)</span>
<span id="cb11-4">                .encode(x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>alt.X(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'spec_1'</span>, title<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Embedding 1'</span>),</span>
<span id="cb11-5">                        y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>alt.Y(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'spec_2'</span>, title<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Embedding 2'</span>),</span>
<span id="cb11-6">                        color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>alt.Color(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Segment:N'</span>),</span>
<span id="cb11-7">                        tooltip<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[alt.Tooltip(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'DoctorID'</span>),</span>
<span id="cb11-8">                                 alt.Tooltip(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Purchases'</span>),</span>
<span id="cb11-9">                                 alt.Tooltip(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Complaints'</span>, title<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Complaint Count'</span>),</span>
<span id="cb11-10">                                 alt.Tooltip(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Category'</span>),</span>
<span id="cb11-11">                                 alt.Tooltip(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Rank'</span>),</span>
<span id="cb11-12">                                 alt.Tooltip(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Region'</span>),</span>
<span id="cb11-13">                                 alt.Tooltip(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Incidence rate'</span>),</span>
<span id="cb11-14">                                 alt.Tooltip(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'R rate'</span>),</span>
<span id="cb11-15">                                 alt.Tooltip(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Satisfaction'</span>),</span>
<span id="cb11-16">                                 alt.Tooltip(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Experience'</span>)])</span>
<span id="cb11-17">                .configure_axis(labelFontSize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span>,</span>
<span id="cb11-18">                                titleFontSize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span>)</span>
<span id="cb11-19">                .configure_legend(labelFontSize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span>,</span>
<span id="cb11-20">                                  titleFontSize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span>)</span>
<span id="cb11-21">               )</span>
<span id="cb11-22"></span>
<span id="cb11-23"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Render</span></span>
<span id="cb11-24">query2_chart</span></code></pre></div></div>
</div>
<div id="altair-viz-f993cdfb6b6f4028a5d5887d196d78b0">

</div>
<script type="text/javascript">
  var VEGA_DEBUG = (typeof VEGA_DEBUG == "undefined") ? {} : VEGA_DEBUG;
  (function(spec, embedOpt){
    let outputDiv = document.currentScript.previousElementSibling;
    if (outputDiv.id !== "altair-viz-f993cdfb6b6f4028a5d5887d196d78b0") {
      outputDiv = document.getElementById("altair-viz-f993cdfb6b6f4028a5d5887d196d78b0");
    }
    const paths = {
      "vega": "https://cdn.jsdelivr.net/npm//vega@5?noext",
      "vega-lib": "https://cdn.jsdelivr.net/npm//vega-lib?noext",
      "vega-lite": "https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext",
      "vega-embed": "https://cdn.jsdelivr.net/npm//vega-embed@6?noext",
    };

    function maybeLoadScript(lib, version) {
      var key = `${lib.replace("-", "")}_version`;
      return (VEGA_DEBUG[key] == version) ?
        Promise.resolve(paths[lib]) :
        new Promise(function(resolve, reject) {
          var s = document.createElement('script');
          document.getElementsByTagName("head")[0].appendChild(s);
          s.async = true;
          s.onload = () => {
            VEGA_DEBUG[key] = version;
            return resolve(paths[lib]);
          };
          s.onerror = () => reject(`Error loading script: ${paths[lib]}`);
          s.src = paths[lib];
        });
    }

    function showError(err) {
      outputDiv.innerHTML = `<div class="error" style="color:red;">${err}</div>`;
      throw err;
    }

    function displayChart(vegaEmbed) {
      vegaEmbed(outputDiv, spec, embedOpt)
        .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));
    }

    if(typeof define === "function" && define.amd) {
      requirejs.config({paths});
      require(["vega-embed"], displayChart, err => showError(`Error loading script: ${err.message}`));
    } else {
      maybeLoadScript("vega", "5")
        .then(() => maybeLoadScript("vega-lite", "4.17.0"))
        .then(() => maybeLoadScript("vega-embed", "6"))
        .catch(showError)
        .then(() => displayChart(vegaEmbed));
    }
  })({"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}, "axis": {"labelFontSize": 16, "titleFontSize": 16}, "legend": {"labelFontSize": 16, "titleFontSize": 16}}, "data": {"name": "data-5ab6020b45684d734896e257d2c30021"}, "mark": {"type": "point", "filled": true, "opacity": 0.5, "size": 200}, "encoding": {"color": {"field": "Segment", "type": "nominal"}, "tooltip": [{"field": "DoctorID", "type": "nominal"}, {"field": "Purchases", "type": "quantitative"}, {"field": "Complaints", "title": "Complaint Count", "type": "quantitative"}, {"field": "Category", "type": "nominal"}, {"field": "Rank", "type": "nominal"}, {"field": "Region", "type": "nominal"}, {"field": "Incidence rate", "type": "quantitative"}, {"field": "R rate", "type": "quantitative"}, {"field": "Satisfaction", "type": "quantitative"}, {"field": "Experience", "type": "quantitative"}], "x": {"field": "spec_1", "title": "Embedding 1", "type": "quantitative"}, "y": {"field": "spec_2", "title": "Embedding 2", "type": "quantitative"}}, "height": 400, "width": 600, "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json", "datasets": {"data-5ab6020b45684d734896e257d2c30021": [{"DoctorID": "AAAEAH", "spec_1": 0.05316769601460756, "spec_2": 0.03196668319218551, "Segment": 2, "Category": "Specialist", "Rank": "Ambassador", "Region": "1 19", "Complaints": -0.6968607626648889, "Incidence rate": 0.3522798434026479, "R rate": 0.31714223865897606, "Satisfaction": 1.6165893314336126, "Experience": 1.7234553117979359, "Purchases": 0.23181772343989768, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": 1.5046878146586526}, {"DoctorID": "AABDHC", "spec_1": -0.04269926417096378, "spec_2": 0.06092230276594164, "Segment": 2, "Category": "Specialist", "Rank": "Titanium", "Region": "1 13", "Complaints": -0.6968607626648889, "Incidence rate": -0.9088656678285003, "R rate": 1.5603248810773298, "Satisfaction": 0.19205748867323694, "Experience": 0.18925725111511948, "Purchases": -0.2880159594253274, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 1.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -0.6263533008387694}, {"DoctorID": "AABGAB", "spec_1": -0.034826891128929734, "spec_2": 0.05982593044788326, "Segment": 2, "Category": "Specialist", "Rank": "Platinum Plus", "Region": "1 8 T3", "Complaints": 0.10888449416638886, "Incidence rate": -0.2782929122129262, "R rate": 1.1459306669378788, "Satisfaction": -0.29779509351387085, "Experience": 0.5180139784042944, "Purchases": -0.5999161691444624, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 1.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": 0.4391672569099416}, {"DoctorID": "AADDIG", "spec_1": -0.08094718433050058, "spec_2": -0.07108382463400048, "Segment": 1, "Category": "Specialist", "Rank": "Titanium", "Region": "1 9 T3", "Complaints": -0.6968607626648889, "Incidence rate": -0.2782929122129262, "R rate": -0.7879089990462272, "Satisfaction": 0.35837126791014795, "Experience": -1.1257696580415801, "Purchases": -0.5479328008579399, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 1.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -1.159113579713125}, {"DoctorID": "AAEIEG", "spec_1": 0.02041301131616589, "spec_2": 0.04119902156906321, "Segment": 2, "Category": "Specialist", "Rank": "Titanium", "Region": "1 8 T3", "Complaints": 4.40619253059987, "Incidence rate": -0.08949867400467047, "R rate": 0.648657609970537, "Satisfaction": -1.5174642974026495, "Experience": -0.7312615852945702, "Purchases": -0.2360325911388049, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 1.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": 0.971927535784297}, {"DoctorID": "AAGHII", "spec_1": -0.005127821719574038, "spec_2": 0.03270092717230771, "Segment": 2, "Category": "General Practitioner", "Rank": "Titanium", "Region": "1 9", "Complaints": -0.6968607626648889, "Incidence rate": 0.09929556420358526, "R rate": -1.3818740393127742, "Satisfaction": -0.7339508901935841, "Experience": 4.353509130111335, "Purchases": -0.49594943257141744, "Category_Specialist": 0.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 1.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -0.6263533008387694}, {"DoctorID": "ABAIEG", "spec_1": -0.01857482957888012, "spec_2": 0.09341097759488595, "Segment": 2, "Category": "General Practitioner", "Rank": "Gold", "Region": "1 11", "Complaints": -0.6968607626648889, "Incidence rate": 0.09929556420358526, "R rate": 1.9747190952167815, "Satisfaction": 1.0942470599609022, "Experience": 0.6275995541673528, "Purchases": -0.5479328008579399, "Category_Specialist": 0.0, "Rank_Gold": 1.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -0.6263533008387694}, {"DoctorID": "ABEAFF", "spec_1": 0.06720232618214429, "spec_2": -0.06132696626764969, "Segment": 3, "Category": "Specialist", "Rank": "Ambassador", "Region": "1 8 T4", "Complaints": -0.6968607626648889, "Incidence rate": -0.6558813886294377, "R rate": -0.746469577632282, "Satisfaction": 0.009446630566377356, "Experience": -1.1257696580415801, "Purchases": -0.39198269599837243, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": 0.971927535784297}, {"DoctorID": "ABHGCJ", "spec_1": -0.08611172352263859, "spec_2": -0.0662684627987875, "Segment": 1, "Category": "Specialist", "Rank": "Gold", "Region": "2 7 8", "Complaints": 0.6460479987205741, "Incidence rate": -0.6558813886294377, "R rate": -0.23538338019362554, "Satisfaction": 1.6165893314336126, "Experience": -1.1257696580415801, "Purchases": -0.6518995374309849, "Category_Specialist": 1.0, "Rank_Gold": 1.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -1.159113579713125}, {"DoctorID": "ABJEAI", "spec_1": 0.00013332518990409102, "spec_2": 0.013042448345014312, "Segment": 2, "Category": "Specialist", "Rank": "Ambassador", "Region": "1 19", "Complaints": 0.6460479987205741, "Incidence rate": 1.609649469869631, "R rate": -0.3735147849067759, "Satisfaction": -2.5621488403480703, "Experience": 0.40842840264123603, "Purchases": -0.2880159594253274, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -0.09359302196441391}, {"DoctorID": "ACBBCA", "spec_1": 0.07953238645200114, "spec_2": -0.02731785817365322, "Segment": 3, "Category": "Specialist", "Rank": "Ambassador", "Region": "1 9", "Complaints": -0.6968607626648889, "Incidence rate": 0.09929556420358526, "R rate": -0.6221513133904467, "Satisfaction": 1.4818250253936534, "Experience": -0.5120904337684535, "Purchases": 0.12785098686685267, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": 0.971927535784297}, {"DoctorID": "ACBGIB", "spec_1": -0.04417270746298537, "spec_2": -0.04967276836443794, "Segment": 1, "Category": "Specialist", "Rank": "Titanium", "Region": "1 13 T3", "Complaints": -0.6968607626648889, "Incidence rate": 0.6656782788283525, "R rate": -1.1056112298864733, "Satisfaction": -0.5547352568512971, "Experience": -0.7531787004471817, "Purchases": 0.7516514063051227, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 1.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -1.159113579713125}, {"DoctorID": "ACDBJE", "spec_1": 0.09606565552648264, "spec_2": -0.06360911905168361, "Segment": 3, "Category": "Specialist", "Rank": "Ambassador", "Region": "1 8 T4", "Complaints": -0.6968607626648889, "Incidence rate": -0.6558813886294377, "R rate": -0.49783304914861126, "Satisfaction": 1.1987155142554444, "Experience": -1.1257696580415801, "Purchases": 0.023884250293807648, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": 1.5046878146586526}, {"DoctorID": "ADFECC", "spec_1": 0.006063562475604057, "spec_2": 0.09776246460334098, "Segment": 2, "Category": "Specialist", "Rank": "Gold Plus", "Region": "2 7 9", "Complaints": -0.42827901038779637, "Incidence rate": -0.6558813886294377, "R rate": 0.22045025535977097, "Satisfaction": 1.4076524228445286, "Experience": 1.065941857219586, "Purchases": -0.6518995374309849, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 1.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -1.159113579713125}, {"DoctorID": "ADGAIC", "spec_1": -0.08162597268956266, "spec_2": -0.06276454959773972, "Segment": 1, "Category": "Specialist", "Rank": "Titanium", "Region": "1 13 T3", "Complaints": -0.6968607626648889, "Incidence rate": -0.2782929122129262, "R rate": -0.23538338019362554, "Satisfaction": 0.35837126791014795, "Experience": -1.1257696580415801, "Purchases": -0.5999161691444624, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 1.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -1.159113579713125}, {"DoctorID": "ADJHAB", "spec_1": -0.06487175980614536, "spec_2": -0.05954478638078859, "Segment": 1, "Category": "Specialist", "Rank": "Titanium", "Region": "1 12 T3", "Complaints": -0.42827901038779637, "Incidence rate": -0.8446756268376934, "R rate": -0.8293484204601724, "Satisfaction": -0.8990632822061079, "Experience": -1.1257696580415801, "Purchases": -0.44396606428489493, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 1.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -0.6263533008387694}, {"DoctorID": "AEFEAG", "spec_1": 0.030165226668317207, "spec_2": 0.02572905438448483, "Segment": 2, "Category": "Specialist", "Rank": "Platinum Plus", "Region": "1 19 T3", "Complaints": 1.7203750078289444, "Incidence rate": 1.9872379462861427, "R rate": -0.09725197548047498, "Satisfaction": -0.28123684350818595, "Experience": -1.1257696580415801, "Purchases": -0.2880159594253274, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 1.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -1.159113579713125}, {"DoctorID": "AEGFAA", "spec_1": -0.01276359280164176, "spec_2": 0.02246609362115638, "Segment": 2, "Category": "General Practitioner", "Rank": "Platinum", "Region": "1 12", "Complaints": -0.6968607626648889, "Incidence rate": 0.09929556420358526, "R rate": -1.1608637917717333, "Satisfaction": -0.612140672486148, "Experience": 1.065941857219586, "Purchases": -0.49594943257141744, "Category_Specialist": 0.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 1.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -0.09359302196441391}, {"DoctorID": "AFCADC", "spec_1": 0.09299988121456905, "spec_2": -0.06205782442064167, "Segment": 3, "Category": "Specialist", "Rank": "Platinum", "Region": "1 10", "Complaints": -0.42827901038779637, "Incidence rate": 0.09929556420358526, "R rate": -0.23538338019362554, "Satisfaction": -0.3308071250709462, "Experience": -1.1257696580415801, "Purchases": -0.5479328008579399, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 1.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": 2.037448093533008}, {"DoctorID": "AFCGAH", "spec_1": 0.0028971818422348747, "spec_2": -0.034981713443859995, "Segment": 3, "Category": "Specialist", "Rank": "Ambassador", "Region": "1 14", "Complaints": -0.6968607626648889, "Incidence rate": 0.09929556420358526, "R rate": -1.064171808472528, "Satisfaction": -1.034558867426129, "Experience": -0.2490850519371136, "Purchases": -0.5479328008579399, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": 0.4391672569099416}, {"DoctorID": "AHAHIB", "spec_1": 0.015411000554641065, "spec_2": 0.08388698066973282, "Segment": 2, "Category": "Specialist", "Rank": "Platinum Plus", "Region": "1 14 T3", "Complaints": -0.6968607626648889, "Incidence rate": 0.8544725170366082, "R rate": 0.10994513158925052, "Satisfaction": 1.6165893314336126, "Experience": 0.8029364753882461, "Purchases": -0.39198269599837243, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 1.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -0.6263533008387694}, {"DoctorID": "AHDDAI", "spec_1": 0.041128786763631554, "spec_2": 0.007272494527105448, "Segment": 3, "Category": "Specialist", "Rank": "Titanium", "Region": "1 10", "Complaints": -0.6968607626648889, "Incidence rate": 1.9872379462861427, "R rate": 0.38620794101555134, "Satisfaction": 0.502328797928027, "Experience": -0.7312615852945702, "Purchases": -0.2360325911388049, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 1.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -0.09359302196441391}, {"DoctorID": "AHIEIG", "spec_1": 0.02981530578591658, "spec_2": 0.0018364359958828339, "Segment": 3, "Category": "Specialist", "Rank": "Ambassador", "Region": "1 12", "Complaints": -0.6968607626648889, "Incidence rate": 2.489430619920103, "R rate": -0.23538338019362554, "Satisfaction": -0.5547352568512971, "Experience": -0.46825620346323027, "Purchases": 1.1155349843107802, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -0.6263533008387694}, {"DoctorID": "AIABDJ", "spec_1": -0.009729867553619506, "spec_2": -0.010983438791184552, "Segment": 2, "Category": "Specialist", "Rank": "Ambassador", "Region": "1 10", "Complaints": -0.42827901038779637, "Incidence rate": -0.965503939290977, "R rate": -0.5116461896199264, "Satisfaction": -0.22706994995646587, "Experience": 0.5618482087095178, "Purchases": 1.0115682477377352, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -1.159113579713125}, {"DoctorID": "AIEBFD", "spec_1": 0.015151978588361294, "spec_2": 0.03314762655124685, "Segment": 2, "Category": "Specialist", "Rank": "Titanium", "Region": "1 8 T3", "Complaints": 2.2575385123831295, "Incidence rate": -0.6558813886294377, "R rate": 0.10994513158925052, "Satisfaction": 0.30326415826977693, "Experience": -0.029913900410997056, "Purchases": -0.39198269599837243, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 1.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": 0.971927535784297}, {"DoctorID": "AJGICE", "spec_1": 0.004715990684359449, "spec_2": 0.035970290021857955, "Segment": 2, "Category": "Specialist", "Rank": "Ambassador", "Region": "1 19", "Complaints": 1.4517932555518518, "Incidence rate": -0.2782929122129262, "R rate": -0.5807118919765016, "Satisfaction": 0.1241529933817846, "Experience": 1.065941857219586, "Purchases": -0.5999161691444624, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -0.6263533008387694}, {"DoctorID": "BABEFH", "spec_1": 0.02611771677703123, "spec_2": 0.03846716539137451, "Segment": 2, "Category": "Specialist", "Rank": "Platinum", "Region": "1 13", "Complaints": 2.7947020169373147, "Incidence rate": 0.47688404062009676, "R rate": 0.16519769347451074, "Satisfaction": 0.30326415826977693, "Experience": 0.12350590565728446, "Purchases": -0.44396606428489493, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 1.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": 0.4391672569099416}, {"DoctorID": "BABGJG", "spec_1": 0.04078810553456801, "spec_2": -0.016908420389356447, "Segment": 3, "Category": "Specialist", "Rank": "Ambassador", "Region": "1 8", "Complaints": 1.7203750078289444, "Incidence rate": 0.6845577026491779, "R rate": -0.16631767783705026, "Satisfaction": 1.6165893314336126, "Experience": 0.6933508996251876, "Purchases": 3.5067699254908153, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": 0.971927535784297}, {"DoctorID": "BBAJCF", "spec_1": -0.0585472350680036, "spec_2": -0.002008678136788912, "Segment": 1, "Category": "Specialist", "Rank": "Ambassador", "Region": "1 9 T4", "Complaints": -0.6968607626648889, "Incidence rate": -0.9692798240551422, "R rate": 0.7039101718557973, "Satisfaction": 0.7146086970545363, "Experience": -0.8846813913628518, "Purchases": 0.17983435515337517, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -0.6263533008387694}, {"DoctorID": "BBCHEH", "spec_1": -0.03857961911043258, "spec_2": 0.02371827471785605, "Segment": 2, "Category": "General Practitioner", "Rank": "Platinum Plus", "Region": "1 9", "Complaints": -0.15969725811070376, "Incidence rate": 0.09929556420358526, "R rate": 1.42219347636418, "Satisfaction": -2.03980656887536, "Experience": -0.2490850519371136, "Purchases": -0.5479328008579399, "Category_Specialist": 0.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 1.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -0.09359302196441391}, {"DoctorID": "BCFJAB", "spec_1": -0.028688081018976627, "spec_2": 0.008407651545741378, "Segment": 2, "Category": "Specialist", "Rank": "Platinum", "Region": "1 13", "Complaints": -0.15969725811070376, "Incidence rate": -0.2782929122129262, "R rate": 0.31714223865897606, "Satisfaction": -0.8906535716353972, "Experience": -0.2490850519371136, "Purchases": -0.5479328008579399, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 1.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -0.09359302196441391}, {"DoctorID": "BCGFDD", "spec_1": -0.02382272500939319, "spec_2": -0.04731756436044818, "Segment": 1, "Category": "Specialist", "Rank": "Platinum Plus", "Region": "1 8 T3", "Complaints": -0.6968607626648889, "Incidence rate": 0.09929556420358526, "R rate": -1.340434617898829, "Satisfaction": -1.034558867426129, "Experience": -0.6874273549893468, "Purchases": -0.5479328008579399, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 1.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -0.09359302196441391}, {"DoctorID": "BDGHAH", "spec_1": -0.048732461279574556, "spec_2": -0.0806175512777686, "Segment": 1, "Category": "General Practitioner", "Rank": "Silver Plus", "Region": "2 6 12", "Complaints": -0.6968607626648889, "Incidence rate": -0.6558813886294377, "R rate": -1.6166974273251298, "Satisfaction": 0.35837126791014795, "Experience": -0.40250485800539526, "Purchases": -0.6518995374309849, "Category_Specialist": 0.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 1.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -0.09359302196441391}, {"DoctorID": "BJBFJC", "spec_1": -0.006102177567346145, "spec_2": 0.07544059887038622, "Segment": 2, "Category": "Specialist", "Rank": "Platinum Plus", "Region": "1 9 T3", "Complaints": -0.6968607626648889, "Incidence rate": -0.8446756268376934, "R rate": -0.04199941359521507, "Satisfaction": 0.8792509810227346, "Experience": 0.4303455177938477, "Purchases": -0.44396606428489493, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 1.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -0.6263533008387694}, {"DoctorID": "BJDEGI", "spec_1": -0.017427615239764674, "spec_2": 0.08439915209292342, "Segment": 2, "Category": "Specialist", "Rank": "Gold Plus", "Region": "2 7 19", "Complaints": 1.1832115032747592, "Incidence rate": -0.2782929122129262, "R rate": 2.527244714069383, "Satisfaction": 1.2316230773582253, "Experience": -0.2490850519371136, "Purchases": -0.5479328008579399, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 1.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -1.159113579713125}, {"DoctorID": "BJDFFJ", "spec_1": -0.09117279004209321, "spec_2": -0.08812934615531984, "Segment": 1, "Category": "General Practitioner", "Rank": "Gold", "Region": "2 11", "Complaints": -0.6968607626648889, "Incidence rate": -0.6558813886294377, "R rate": -1.2713689155422536, "Satisfaction": 1.6165893314336126, "Experience": -1.1257696580415801, "Purchases": -0.5999161691444624, "Category_Specialist": 0.0, "Rank_Gold": 1.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -1.159113579713125}, {"DoctorID": "BJEACG", "spec_1": -0.08863715677576205, "spec_2": -0.08139295744327346, "Segment": 1, "Category": "General Practitioner", "Rank": "Platinum", "Region": "1 11", "Complaints": -0.6968607626648889, "Incidence rate": -0.6558813886294377, "R rate": -0.5807118919765016, "Satisfaction": 0.35837126791014795, "Experience": -0.5778417792262885, "Purchases": -0.5999161691444624, "Category_Specialist": 0.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 1.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -1.159113579713125}, {"DoctorID": "EHEGI", "spec_1": -0.02944586370193093, "spec_2": 0.003594865912925871, "Segment": 2, "Category": "Specialist", "Rank": "Platinum", "Region": "1 8", "Complaints": -0.42827901038779637, "Incidence rate": -0.6558813886294377, "R rate": 0.4552736433721266, "Satisfaction": -1.1371991237705164, "Experience": -0.5778417792262885, "Purchases": -0.5999161691444624, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 1.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": 0.4391672569099416}, {"DoctorID": "EHHGF", "spec_1": -0.04431024633582163, "spec_2": 0.01328544337092407, "Segment": 2, "Category": "Specialist", "Rank": "Titanium", "Region": "1 12 T3", "Complaints": -0.6968607626648889, "Incidence rate": -0.8446756268376934, "R rate": 0.9525467003394683, "Satisfaction": -2.5621488403480703, "Experience": 0.12350590565728446, "Purchases": -0.44396606428489493, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 1.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": 0.4391672569099416}, {"DoctorID": "EIFEJ", "spec_1": -0.06330334883388108, "spec_2": -0.051020822791712925, "Segment": 1, "Category": "Specialist", "Rank": "Ambassador", "Region": "1 9 T4", "Complaints": -0.15969725811070376, "Incidence rate": -0.7087437753277493, "R rate": -0.49783304914861126, "Satisfaction": -0.09977513839856637, "Experience": -1.1257696580415801, "Purchases": 0.5957013014455552, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -1.159113579713125}, {"DoctorID": "EIFHE", "spec_1": 0.0075734661547436025, "spec_2": 0.05094056501763237, "Segment": 2, "Category": "Specialist", "Rank": "Ambassador", "Region": "1 21 T3", "Complaints": -0.42827901038779637, "Incidence rate": 0.8544725170366082, "R rate": 0.4552736433721266, "Satisfaction": 0.3411862071786957, "Experience": 0.25500859657295455, "Purchases": -0.39198269599837243, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -0.6263533008387694}, {"DoctorID": "FAGBJ", "spec_1": -0.001590868371280542, "spec_2": 0.018455510300986938, "Segment": 2, "Category": "Specialist", "Rank": "Ambassador", "Region": "3 16", "Complaints": 0.6460479987205741, "Incidence rate": -0.40289710943037504, "R rate": -1.326621477427514, "Satisfaction": -0.18596161319156354, "Experience": 1.2193616632878677, "Purchases": -0.08008248627923736, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -0.6263533008387694}, {"DoctorID": "FAGIE", "spec_1": 0.08697644128835895, "spec_2": -0.046364478473896985, "Segment": 3, "Category": "Specialist", "Rank": "Ambassador", "Region": "1 10", "Complaints": 0.10888449416638886, "Incidence rate": -0.2782929122129262, "R rate": -0.9260404037593777, "Satisfaction": 0.1701191132713831, "Experience": 0.5180139784042944, "Purchases": -0.5999161691444624, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": 2.037448093533008}, {"DoctorID": "FAHDI", "spec_1": 0.0629944242744802, "spec_2": -0.030615202139236634, "Segment": 3, "Category": "Specialist", "Rank": "Ambassador", "Region": "1 14", "Complaints": -0.42827901038779637, "Incidence rate": -0.825796203016868, "R rate": -0.4425804872633512, "Satisfaction": -0.47277975445722886, "Experience": 0.671433784472576, "Purchases": 1.2195017208838252, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": 1.5046878146586526}, {"DoctorID": "FAICB", "spec_1": 0.01780391791732044, "spec_2": 0.006084670383752339, "Segment": 2, "Category": "Specialist", "Rank": "Ambassador", "Region": "1 19", "Complaints": 0.6460479987205741, "Incidence rate": -0.08949867400467047, "R rate": -0.27682280160757067, "Satisfaction": -0.5547352568512971, "Experience": 0.5399310935569062, "Purchases": 0.9076015111646902, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": 0.4391672569099416}, {"DoctorID": "FBFHB", "spec_1": -0.03942241136520899, "spec_2": 0.06600513513880281, "Segment": 2, "Category": "Specialist", "Rank": "Gold Plus", "Region": "2 7 14", "Complaints": -0.42827901038779637, "Incidence rate": -0.6558813886294377, "R rate": 4.253887272983763, "Satisfaction": -0.9808620819187341, "Experience": 2.161797614850169, "Purchases": -0.5999161691444624, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 1.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": 0.971927535784297}, {"DoctorID": "FBHHI", "spec_1": 0.007933457770785192, "spec_2": 0.06615624598975386, "Segment": 2, "Category": "Specialist", "Rank": "Platinum", "Region": "1 10 T3", "Complaints": 2.2575385123831295, "Incidence rate": -0.7804855858468865, "R rate": 1.3945671954215497, "Satisfaction": 0.9897786056663602, "Experience": 0.27692571172556624, "Purchases": -0.2360325911388049, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 1.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -1.159113579713125}, {"DoctorID": "FBIII", "spec_1": 0.10275941992233435, "spec_2": -0.05862647786047996, "Segment": 3, "Category": "Specialist", "Rank": "Ambassador", "Region": "1 8 T4", "Complaints": -0.42827901038779637, "Incidence rate": 0.6656782788283525, "R rate": -0.6083381729191317, "Satisfaction": 1.6165893314336126, "Experience": -1.1257696580415801, "Purchases": -0.028099117992714858, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": 1.5046878146586526}, {"DoctorID": "FBJIB", "spec_1": -0.0005717877223775426, "spec_2": 0.027415373967007165, "Segment": 2, "Category": "Specialist", "Rank": "Platinum Plus", "Region": "1 14", "Complaints": 0.6460479987205741, "Incidence rate": -0.40289710943037504, "R rate": -0.04199941359521507, "Satisfaction": -1.1691664707846463, "Experience": 0.9125220511513045, "Purchases": -0.08008248627923736, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 1.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -1.159113579713125}, {"DoctorID": "FCBDC", "spec_1": 0.030351095072984315, "spec_2": -0.0008127010342047071, "Segment": 3, "Category": "Specialist", "Rank": "Silver Plus", "Region": "2 7 19", "Complaints": -0.6968607626648889, "Incidence rate": 3.4975918519521887, "R rate": -1.5200054440259243, "Satisfaction": -0.033124264558648496, "Experience": -0.9723498519732984, "Purchases": -0.08008248627923736, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 1.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -1.159113579713125}, {"DoctorID": "FCDBG", "spec_1": 0.03120117328139225, "spec_2": 0.052998659682795574, "Segment": 2, "Category": "Specialist", "Rank": "Ambassador", "Region": "1 12", "Complaints": -0.6968607626648889, "Incidence rate": -0.9088656678285003, "R rate": -0.16631767783705026, "Satisfaction": 1.347060719353694, "Experience": 1.065941857219586, "Purchases": 0.23181772343989768, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": 0.4391672569099416}, {"DoctorID": "FCEDH", "spec_1": -0.0013191741979458266, "spec_2": 0.015155019033511423, "Segment": 2, "Category": "Specialist", "Rank": "Titanium", "Region": "1 13", "Complaints": 0.3774662464434815, "Incidence rate": -0.6558813886294377, "R rate": -0.6635907348043919, "Satisfaction": 0.2596485786018057, "Experience": 0.25500859657295455, "Purchases": 0.023884250293807648, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 1.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -0.09359302196441391}, {"DoctorID": "FCIJH", "spec_1": 0.008163794174793914, "spec_2": 0.09181583193156811, "Segment": 2, "Category": "Specialist", "Rank": "Platinum", "Region": "1 14", "Complaints": 1.1832115032747592, "Incidence rate": 0.09929556420358526, "R rate": 0.5934050480852772, "Satisfaction": 1.6165893314336126, "Experience": 1.9426264633240522, "Purchases": -0.5479328008579399, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 1.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -0.6263533008387694}, {"DoctorID": "FDDIH", "spec_1": 0.02870656551443832, "spec_2": 0.02007843555224197, "Segment": 2, "Category": "Specialist", "Rank": "Titanium", "Region": "1 14 T3", "Complaints": 1.1832115032747592, "Incidence rate": 1.2320609934531197, "R rate": -0.08343883500915993, "Satisfaction": 0.18704300286709888, "Experience": 0.34267705718340125, "Purchases": 0.12785098686685267, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 1.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": 0.4391672569099416}, {"DoctorID": "FDFAC", "spec_1": 0.00201312895726817, "spec_2": 0.016710960352172864, "Segment": 2, "Category": "Specialist", "Rank": "Ambassador", "Region": "1 13", "Complaints": -0.42827901038779637, "Incidence rate": 0.09929556420358526, "R rate": -0.5807118919765016, "Satisfaction": -0.47277975445722886, "Experience": 0.8906049359986927, "Purchases": -0.18404922285228237, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -0.09359302196441391}, {"DoctorID": "FDHAJ", "spec_1": -0.03164743616559026, "spec_2": 0.030205374168571025, "Segment": 2, "Category": "Specialist", "Rank": "Platinum", "Region": "1 13", "Complaints": -0.15969725811070376, "Incidence rate": -0.46708715042118193, "R rate": 0.5381524862000169, "Satisfaction": -0.7184895589579917, "Experience": 0.34267705718340125, "Purchases": -0.33999932771184993, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 1.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": 0.4391672569099416}, {"DoctorID": "FDHDI", "spec_1": 0.08960564871657621, "spec_2": -0.05915597847546874, "Segment": 3, "Category": "Specialist", "Rank": "Ambassador", "Region": "1 12", "Complaints": -0.6968607626648889, "Incidence rate": -0.8220203182527027, "R rate": -0.6221513133904467, "Satisfaction": -0.3499248522068474, "Experience": -0.7750958155997935, "Purchases": 0.8556181428781677, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": 1.5046878146586526}, {"DoctorID": "FDHGC", "spec_1": 0.07050749557235224, "spec_2": -0.00981589069042328, "Segment": 3, "Category": "Specialist", "Rank": "Titanium", "Region": "1 14", "Complaints": 1.4517932555518518, "Incidence rate": 2.7424148991191655, "R rate": -0.4425804872633512, "Satisfaction": -0.11194571332388051, "Experience": 0.23309148142034286, "Purchases": -0.13206585456575987, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 1.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": 2.5702083724073637}, {"DoctorID": "FJAJH", "spec_1": 0.07288710422452893, "spec_2": -0.04391494139836411, "Segment": 3, "Category": "Specialist", "Rank": "Ambassador", "Region": "1 14", "Complaints": -0.42827901038779637, "Incidence rate": -0.5312771914119888, "R rate": 0.4552736433721266, "Satisfaction": -0.24900832535831968, "Experience": 0.25500859657295455, "Purchases": 1.895285508608618, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": 2.037448093533008}, {"DoctorID": "FJBGJ", "spec_1": -0.017031153626139897, "spec_2": 0.0376520528527784, "Segment": 2, "Category": "Specialist", "Rank": "Platinum", "Region": "1 19", "Complaints": -0.6968607626648889, "Incidence rate": -0.2782929122129262, "R rate": 0.4552736433721266, "Satisfaction": -0.5956346567076103, "Experience": 1.6138697360348775, "Purchases": -0.5999161691444624, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 1.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -0.6263533008387694}, {"DoctorID": "GDADF", "spec_1": -0.00893596538220242, "spec_2": -0.004679579199290893, "Segment": 2, "Category": "Specialist", "Rank": "Ambassador", "Region": "1 14", "Complaints": 0.6460479987205741, "Incidence rate": -0.7729338163185563, "R rate": 0.2480765363024011, "Satisfaction": 0.9202026151061953, "Experience": 0.6056824390147412, "Purchases": 1.687352035462528, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -1.159113579713125}, {"DoctorID": "GDFHE", "spec_1": -0.03998084319238633, "spec_2": 0.011799473356583734, "Segment": 2, "Category": "Specialist", "Rank": "Platinum Plus", "Region": "1 12", "Complaints": -0.6968607626648889, "Incidence rate": -0.8446756268376934, "R rate": 0.551965626671332, "Satisfaction": -1.0227016978636982, "Experience": -0.49017331861584196, "Purchases": -0.44396606428489493, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 1.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": 0.4391672569099416}, {"DoctorID": "GDGHI", "spec_1": -0.027500217266884643, "spec_2": -0.011999836470661239, "Segment": 1, "Category": "Specialist", "Rank": "Ambassador", "Region": "1 12", "Complaints": 0.9146297509976666, "Incidence rate": -0.5312771914119888, "R rate": -1.0917980894151582, "Satisfaction": 0.0037530998073247953, "Experience": -0.7970129307524051, "Purchases": 0.5437179331590327, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -0.6263533008387694}, {"DoctorID": "GGCCD", "spec_1": -0.06321528769241885, "spec_2": -0.07189936749168573, "Segment": 1, "Category": "Specialist", "Rank": "Silver Plus", "Region": "2 7 9", "Complaints": -0.6968607626648889, "Incidence rate": -0.6558813886294377, "R rate": -1.1608637917717333, "Satisfaction": -0.9951220259299393, "Experience": -1.1257696580415801, "Purchases": -0.6518995374309849, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 1.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -1.159113579713125}, {"DoctorID": "GHDFB", "spec_1": 0.08104168430604738, "spec_2": -0.04314243038088419, "Segment": 3, "Category": "Specialist", "Rank": "Silver Plus", "Region": "1 13", "Complaints": -0.6968607626648889, "Incidence rate": 1.609649469869631, "R rate": -0.08343883500915993, "Satisfaction": -1.1326025117815566, "Experience": -0.8846813913628518, "Purchases": -0.33999932771184993, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 1.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": 2.037448093533008}, {"DoctorID": "GIHBE", "spec_1": -0.04917407662930055, "spec_2": 0.03825114211349117, "Segment": 2, "Category": "Specialist", "Rank": "Titanium", "Region": "1 8 T3", "Complaints": -0.6968607626648889, "Incidence rate": -0.7804855858468865, "R rate": 2.527244714069383, "Satisfaction": -0.24744129854390157, "Experience": -1.1257696580415801, "Purchases": -0.2360325911388049, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 1.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": 0.4391672569099416}, {"DoctorID": "HBAHA", "spec_1": -0.002141281705579052, "spec_2": 0.09537211529981822, "Segment": 2, "Category": "Specialist", "Rank": "Platinum Plus", "Region": "1 10 T3", "Complaints": 0.10888449416638886, "Incidence rate": 0.09929556420358526, "R rate": 1.42219347636418, "Satisfaction": 1.5691606531838906, "Experience": 0.6275995541673528, "Purchases": -0.5479328008579399, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 1.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -0.09359302196441391}, {"DoctorID": "HBDID", "spec_1": -0.047413303063674556, "spec_2": -0.026236896775710842, "Segment": 1, "Category": "Specialist", "Rank": "Ambassador", "Region": "1 19 T4", "Complaints": -0.42827901038779637, "Incidence rate": -0.7804855858468865, "R rate": 0.13757141253188065, "Satisfaction": -1.1691664707846463, "Experience": -1.0161840822785217, "Purchases": 0.3357844600129427, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -0.6263533008387694}, {"DoctorID": "HBIEA", "spec_1": 0.008177140867570477, "spec_2": -0.03639867922921936, "Segment": 3, "Category": "Specialist", "Rank": "Silver Plus", "Region": "2 7 19", "Complaints": -0.15969725811070376, "Incidence rate": -0.6558813886294377, "R rate": -0.23538338019362554, "Satisfaction": 0.022870826943226053, "Experience": -0.40250485800539526, "Purchases": -0.6518995374309849, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 1.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": 0.4391672569099416}, {"DoctorID": "HCBFF", "spec_1": 0.017093122450608424, "spec_2": 0.02433654014151466, "Segment": 2, "Category": "Specialist", "Rank": "Platinum Plus", "Region": "1 8", "Complaints": 0.9146297509976666, "Incidence rate": 1.2320609934531197, "R rate": 0.10994513158925052, "Satisfaction": -0.35405135615148176, "Experience": -0.5778417792262885, "Purchases": -0.39198269599837243, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 1.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -0.6263533008387694}, {"DoctorID": "HCIGF", "spec_1": -0.03495249840973173, "spec_2": -0.013593548838556643, "Segment": 1, "Category": "Specialist", "Rank": "Titanium", "Region": "1 19 T3", "Complaints": 0.10888449416638886, "Incidence rate": -0.2782929122129262, "R rate": 0.040879429232675256, "Satisfaction": -0.24744129854390157, "Experience": -0.6874273549893468, "Purchases": -0.2880159594253274, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 1.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -0.09359302196441391}, {"DoctorID": "HJDFA", "spec_1": 0.02049471910231558, "spec_2": -0.03346305022745913, "Segment": 3, "Category": "Specialist", "Rank": "Ambassador", "Region": "1 9", "Complaints": -0.6968607626648889, "Incidence rate": -0.08949867400467047, "R rate": -0.04199941359521507, "Satisfaction": -1.1691664707846463, "Experience": -0.3367535125475603, "Purchases": 1.4794185623164378, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -0.09359302196441391}, {"DoctorID": "IAEBD", "spec_1": 0.030331055704098116, "spec_2": -0.02133478090256084, "Segment": 3, "Category": "Specialist", "Rank": "Ambassador", "Region": "1 19 20", "Complaints": 0.10888449416638886, "Incidence rate": -0.9164174373568306, "R rate": 0.16519769347451074, "Satisfaction": 1.2883494480401616, "Experience": 1.2631958935930911, "Purchases": 5.898004866670851, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 0.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": -1.159113579713125}, {"DoctorID": "IFDIB", "spec_1": 0.07036610262799181, "spec_2": -0.015938778397605522, "Segment": 3, "Category": "Specialist", "Rank": "Titanium", "Region": "1 19 T3", "Complaints": -0.6968607626648889, "Incidence rate": 3.120003375535677, "R rate": 0.16519769347451074, "Satisfaction": 0.31073365275183673, "Experience": -0.8189300459050168, "Purchases": -0.08008248627923736, "Category_Specialist": 1.0, "Rank_Gold": 0.0, "Rank_Gold Plus": 0.0, "Rank_Platinum": 0.0, "Rank_Platinum Plus": 0.0, "Rank_Silver": 0.0, "Rank_Silver Plus": 0.0, "Rank_Titanium": 1.0, "Rank_Titanium Plus": 0.0, "Unique Condition Index": 1.5046878146586526}]}}, {"mode": "vega-lite"});
</script>
<div id="ca4e3acc" class="cell" data-execution_count="10">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb12" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb12-1"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%</span>load_ext watermark</span>
<span id="cb12-2"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%</span>watermark <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">--</span>iversions</span></code></pre></div></div>
</div>
<pre><code>pymc      : 4.0.0
arviz     : 0.12.1
seaborn   : 0.12.0rc0
altair    : 4.2.0
numpy     : 1.21.6
matplotlib: 3.5.2
scipy     : 1.8.1
pandas    : 1.4.2</code></pre>


</section>
</section>

 ]]></description>
  <category>Bayesian</category>
  <category>competition</category>
  <category>dimension reduction</category>
  <guid>https://alexjonesphd.github.io/posts/customer-segmentation/</guid>
  <pubDate>Tue, 23 Aug 2022 23:00:00 GMT</pubDate>
  <media:content url="https://alexjonesphd.github.io/posts/customer-segmentation/dist.png" medium="image" type="image/png" height="139" width="144"/>
</item>
<item>
  <title>Multi100 Collaboration Project: Is Eco-Friendly Unmanly?</title>
  <link>https://alexjonesphd.github.io/posts/multi-100-analysis/</link>
  <description><![CDATA[ 




<p>Earlier this year I responded to an invitation to take part in the <strong>MultiAnalysis Collaboration Project</strong>, run by the Centre for Open Science. The project aims to obtain at least five different analyses for 100 different papers published, with open data, in psychology. I opted for the below paper, published in 2016 — <em>Is Eco-Friendly Unmanly? The Green-Feminine Stereotype and Its Effect on Sustainable Consumption</em>. The organisers selected a single claim from each paper that appears to be the ‘central’ conclusion, and participants in the project have to test it — that’s more or less it. The claim in this paper is:</p>
<blockquote class="blockquote">
<p><em>…consumers who engaged in green behavior were perceived …. as more feminine than consumers who engaged in nongreen behavior. (p.&nbsp;571.)</em></p>
</blockquote>
<p>I used a Bayesian hierarchical model here, and because the project required it, I had to figure out how to carry out a Bayes Factor hypothesis test with Python. This led me down a rabbit hole of reading about the Savage-Dickey density ratio, which is surprisingly (magically, even) quite easy to compute in comparison to the horror of marginal likelihoods of complex models. That said, I’m still not certain this is all correct, but I’m satisfied the posterior probabilities, if not the Bayes Factor, are good. The analysis and data is all on the <a href="https://osf.io/37vpj/">OSF</a>.</p>
<section id="multi100-analysis-nf503" class="level2">
<h2 class="anchored" data-anchor-id="multi100-analysis-nf503">Multi100 Analysis — NF503</h2>
<section id="is-eco-friendly-unmanly-the-green-feminine-stereotype-and-its-effect-on-sustainable-consumption" class="level3">
<h3 class="anchored" data-anchor-id="is-eco-friendly-unmanly-the-green-feminine-stereotype-and-its-effect-on-sustainable-consumption">Is Eco-Friendly Unmanly? The Green-Feminine Stereotype and Its Effect on Sustainable Consumption</h3>
<div id="86a0f67d" class="cell" data-execution_count="1">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb1-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Imports</span></span>
<span id="cb1-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> arviz <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> az</span>
<span id="cb1-3"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> bambi <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> bmb</span>
<span id="cb1-4"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> numpy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> np</span>
<span id="cb1-5"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> pandas <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> pd</span>
<span id="cb1-6"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> pymc <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> pm</span>
<span id="cb1-7"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> seaborn <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> sns</span>
<span id="cb1-8"></span>
<span id="cb1-9"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> matplotlib.pyplot <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> plt</span>
<span id="cb1-10"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> scipy.stats <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> st</span>
<span id="cb1-11"></span>
<span id="cb1-12"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Set matplotlib style</span></span>
<span id="cb1-13">plt.style.use(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'bmh'</span>)</span>
<span id="cb1-14"></span>
<span id="cb1-15"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Read in data</span></span>
<span id="cb1-16">data <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.read_csv(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Phase 2 Reproduction Materials/Study 2 Data September 2015.csv'</span>)</span>
<span id="cb1-17">data.head()</span></code></pre></div></div>
</div>
<div>
<table class="dataframe table table-sm table-striped small">
<thead>
<tr>
<th>
</th>
<th>
SubPool
</th>
<th>
V1
</th>
<th>
V8
</th>
<th>
V9
</th>
<th>
Intro
</th>
<th>
M_NG_19
</th>
<th>
M_NG_20
</th>
<th>
M_NG_23
</th>
<th>
M_NG_24
</th>
<th>
M_NG_25
</th>
<th>
…
</th>
<th>
F_G_32
</th>
<th>
F_G_33
</th>
<th>
F_G_34
</th>
<th>
Q13
</th>
<th>
Age
</th>
<th>
Gender
</th>
<th>
GenderIden_1
</th>
<th>
Dating_1
</th>
<th>
Dating_2
</th>
<th>
Status
</th>
</tr>
</thead>
<tbody>
<tr>
<th>
0
</th>
<td>
ND
</td>
<td>
R_a2xOgJn7aY967yJ
</td>
<td>
9/25/2015 7:00
</td>
<td>
9/25/2015 7:02
</td>
<td>
1
</td>
<td>
1.0
</td>
<td>
2.0
</td>
<td>
4.0
</td>
<td>
3.0
</td>
<td>
3.0
</td>
<td>
…
</td>
<td>
NaN
</td>
<td>
NaN
</td>
<td>
NaN
</td>
<td>
how we perceive ourselves
</td>
<td>
33
</td>
<td>
2
</td>
<td>
84.0
</td>
<td>
100.0
</td>
<td>
0.0
</td>
<td>
1
</td>
</tr>
<tr>
<th>
1
</th>
<td>
ND
</td>
<td>
R_9KB7Aqj8Dw5NYAR
</td>
<td>
9/25/2015 7:00
</td>
<td>
9/25/2015 7:02
</td>
<td>
1
</td>
<td>
NaN
</td>
<td>
NaN
</td>
<td>
NaN
</td>
<td>
NaN
</td>
<td>
NaN
</td>
<td>
…
</td>
<td>
3.0
</td>
<td>
4.0
</td>
<td>
1.0
</td>
<td>
Environmental awareness
</td>
<td>
21
</td>
<td>
1
</td>
<td>
76.0
</td>
<td>
0.0
</td>
<td>
100.0
</td>
<td>
1
</td>
</tr>
<tr>
<th>
2
</th>
<td>
ND
</td>
<td>
R_78605PJdv9gl2g5
</td>
<td>
9/25/2015 7:00
</td>
<td>
9/25/2015 7:02
</td>
<td>
1
</td>
<td>
1.0
</td>
<td>
1.0
</td>
<td>
1.0
</td>
<td>
1.0
</td>
<td>
1.0
</td>
<td>
…
</td>
<td>
NaN
</td>
<td>
NaN
</td>
<td>
NaN
</td>
<td>
perceptions
</td>
<td>
27
</td>
<td>
1
</td>
<td>
65.0
</td>
<td>
0.0
</td>
<td>
100.0
</td>
<td>
2
</td>
</tr>
<tr>
<th>
3
</th>
<td>
ND
</td>
<td>
R_6o5G3vGXbEi8LTT
</td>
<td>
9/25/2015 7:00
</td>
<td>
9/25/2015 7:03
</td>
<td>
1
</td>
<td>
NaN
</td>
<td>
NaN
</td>
<td>
NaN
</td>
<td>
NaN
</td>
<td>
NaN
</td>
<td>
…
</td>
<td>
NaN
</td>
<td>
NaN
</td>
<td>
NaN
</td>
<td>
attitudinal perceptions to reusable bags
</td>
<td>
29
</td>
<td>
1
</td>
<td>
75.0
</td>
<td>
2.0
</td>
<td>
99.0
</td>
<td>
2
</td>
</tr>
<tr>
<th>
4
</th>
<td>
ND
</td>
<td>
R_4IYda5xCDnq0Kln
</td>
<td>
9/25/2015 7:01
</td>
<td>
9/25/2015 7:03
</td>
<td>
1
</td>
<td>
NaN
</td>
<td>
NaN
</td>
<td>
NaN
</td>
<td>
NaN
</td>
<td>
NaN
</td>
<td>
…
</td>
<td>
1.0
</td>
<td>
4.0
</td>
<td>
1.0
</td>
<td>
Perception of recycling.
</td>
<td>
29
</td>
<td>
1
</td>
<td>
83.0
</td>
<td>
0.0
</td>
<td>
100.0
</td>
<td>
2
</td>
</tr>
</tbody>
</table>
<p>
5 rows × 56 columns
</p>
</div>
<p>There is no coding scheme evident for <code>Gender</code>, i.e.&nbsp;it is not clear whether 1 or 2 is female/male. The paper reports 45.9% were male, so we should be able to infer from that:</p>
<div id="28d4947a" class="cell" data-execution_count="2">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb2-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># What is what?</span></span>
<span id="cb2-2">data[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Gender'</span>].value_counts(normalize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>).<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">round</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span></code></pre></div></div>
</div>
<pre><code>2    0.54
1    0.46
Name: Gender, dtype: float64</code></pre>
<p>‘1’ is probably male.</p>
</section>
<section id="step-1" class="level3">
<h3 class="anchored" data-anchor-id="step-1">Step 1</h3>
<p>First we must tidy the data up into a long-form dataset, and clear up the variable names (e.g.&nbsp;<code>M_NG_19</code>) to get a clearer sense of conditions. We also use the variable coding for each perception from <code>Study 2 Survey September 2015.docx</code> to more clearly label the perceptual trait ratings the participants gave.</p>
<div id="c2f6917a" class="cell" data-execution_count="3">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb4-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Variable coding from 'Study 2 Survey September 2015.docx'</span></span>
<span id="cb4-2">recoding <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> {<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">34</span>: <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'wasteful'</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">32</span>: <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'masculine'</span>,</span>
<span id="cb4-3">            <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">27</span>: <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'macho'</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">28</span>: <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'aggressive'</span>,</span>
<span id="cb4-4">            <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">24</span>: <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'eco-friendly'</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">25</span>: <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'feminine'</span>,</span>
<span id="cb4-5">            <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">33</span>: <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'sensitive'</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">26</span>: <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'gentle'</span>,</span>
<span id="cb4-6">            <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">19</span>: <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'athletic'</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>: <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'attractive'</span>,</span>
<span id="cb4-7">            <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">23</span>: <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'curious'</span></span>
<span id="cb4-8">           }</span>
<span id="cb4-9"></span>
<span id="cb4-10"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Convert to long format and do some cleaning up</span></span>
<span id="cb4-11">data_l <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (data</span>
<span id="cb4-12">          .melt(id_vars<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'SubPool'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'V1'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Age'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Gender'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'GenderIden_1'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Dating_1'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Dating_2'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Status'</span>],</span>
<span id="cb4-13">                value_vars<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>data.loc[:,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'M_NG_19'</span>:<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'F_G_34'</span>].columns,</span>
<span id="cb4-14">                var_name<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'condition'</span>, value_name<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'rating'</span>)</span>
<span id="cb4-15">          .pipe(<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">lambda</span> df_: df_.join(df_[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'condition'</span>].<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">str</span>.split(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'_'</span>, expand<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)))</span>
<span id="cb4-16">          .rename(columns<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>{<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>: <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'target_sex'</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>: <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'green'</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>: <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'perception'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'V1'</span>: <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'pid'</span>})</span>
<span id="cb4-17">          .rename(columns<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">str</span>.lower)</span>
<span id="cb4-18">          .assign(perception<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">lambda</span> x: x[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'perception'</span>].astype(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">int</span>))</span>
<span id="cb4-19">          .replace({<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'perception'</span>: recoding,</span>
<span id="cb4-20">                    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'target_sex'</span>: {<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'M'</span>: <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'male'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'F'</span>: <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'female'</span>},</span>
<span id="cb4-21">                    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'green'</span>: {<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'NG'</span>: <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'non-green'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'G'</span>: <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'green'</span>},</span>
<span id="cb4-22">                    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'gender'</span>: {<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>: <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'male'</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>: <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'female'</span>}})</span>
<span id="cb4-23">          .drop(columns<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'condition'</span>)</span>
<span id="cb4-24">         )</span>
<span id="cb4-25"></span>
<span id="cb4-26"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Drop missing values in 'rating' - between-participants design means not everyone rated all combinations</span></span>
<span id="cb4-27">data_l <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> data_l.dropna(subset<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'rating'</span>).reset_index(drop<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span>
<span id="cb4-28"></span>
<span id="cb4-29">display(data_l.head())</span>
<span id="cb4-30">display(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Participant counts'</span>, data_l.groupby(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'green'</span>)[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'pid'</span>].nunique())</span>
<span id="cb4-31">display(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Missing data'</span>, data_l.isna().<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">any</span>())</span></code></pre></div></div>
</div>
<div>
<table class="dataframe table table-sm table-striped small">
<thead>
<tr>
<th>
</th>
<th>
subpool
</th>
<th>
pid
</th>
<th>
age
</th>
<th>
gender
</th>
<th>
genderiden_1
</th>
<th>
dating_1
</th>
<th>
dating_2
</th>
<th>
status
</th>
<th>
rating
</th>
<th>
target_sex
</th>
<th>
green
</th>
<th>
perception
</th>
</tr>
</thead>
<tbody>
<tr>
<th>
0
</th>
<td>
ND
</td>
<td>
R_a2xOgJn7aY967yJ
</td>
<td>
33
</td>
<td>
female
</td>
<td>
84.0
</td>
<td>
100.0
</td>
<td>
0.0
</td>
<td>
1
</td>
<td>
1.0
</td>
<td>
male
</td>
<td>
non-green
</td>
<td>
athletic
</td>
</tr>
<tr>
<th>
1
</th>
<td>
ND
</td>
<td>
R_78605PJdv9gl2g5
</td>
<td>
27
</td>
<td>
male
</td>
<td>
65.0
</td>
<td>
0.0
</td>
<td>
100.0
</td>
<td>
2
</td>
<td>
1.0
</td>
<td>
male
</td>
<td>
non-green
</td>
<td>
athletic
</td>
</tr>
<tr>
<th>
2
</th>
<td>
ND
</td>
<td>
R_cNrHv7l4bzAPzo1
</td>
<td>
19
</td>
<td>
female
</td>
<td>
68.0
</td>
<td>
100.0
</td>
<td>
0.0
</td>
<td>
1
</td>
<td>
1.0
</td>
<td>
male
</td>
<td>
non-green
</td>
<td>
athletic
</td>
</tr>
<tr>
<th>
3
</th>
<td>
ND
</td>
<td>
R_cIl6ai9lZGVTEih
</td>
<td>
28
</td>
<td>
male
</td>
<td>
87.0
</td>
<td>
0.0
</td>
<td>
100.0
</td>
<td>
2
</td>
<td>
2.0
</td>
<td>
male
</td>
<td>
non-green
</td>
<td>
athletic
</td>
</tr>
<tr>
<th>
4
</th>
<td>
ND
</td>
<td>
R_0xi4MaYTLcWON7v
</td>
<td>
25
</td>
<td>
male
</td>
<td>
66.0
</td>
<td>
0.0
</td>
<td>
100.0
</td>
<td>
1
</td>
<td>
2.0
</td>
<td>
male
</td>
<td>
non-green
</td>
<td>
athletic
</td>
</tr>
</tbody>
</table>
</div>
<pre><code>'Participant counts'

green
green         94
non-green    100
Name: pid, dtype: int64</code></pre>
<p>There is also missing data in the <code>genderiden_1</code> and <code>dating_</code> variables. These will be used as additional predictors, so these missing values will be dropped — i.e.&nbsp;a complete-case design will be used.</p>
<div id="4abb8917" class="cell" data-execution_count="4">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb6-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Complete cases - drop all missing in the three named variables</span></span>
<span id="cb6-2">data_l <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> data_l.dropna(subset<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'genderiden_1'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'dating_1'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'dating_2'</span>]).reset_index(drop<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span>
<span id="cb6-3">data_l.pid.nunique()</span></code></pre></div></div>
</div>
<pre><code>171</code></pre>
</section>
<section id="step-2" class="level3">
<h3 class="anchored" data-anchor-id="step-2">Step 2</h3>
<p>We now ready to specify a model, and lay out an inference plan.</p>
<p>The aim is to assess whether consumers who engaged in green behaviour are perceived as more feminine, with participants making ratings of vignettes. The claim is straightforward; however the data-generating process is more complex, with participants being allocated to one of four conditions (e.g.&nbsp;male-green, female-nongreen), and provided multiple ratings of the same vignette. In addition, there are variables that may affect these ratings (e.g., participant gender, interest in dating males or females) that could feasibly impact the ratings.</p>
<p>The original paper created a ‘femininity index’ by averaging together several traits (feminine, gentle, sensitive). This is perhaps fine, but it seems more direct to work with the rating of femininity itself, and not to open up other measurement issues from averaging variables (e.g., Flake &amp; Fried, 2020). However, it is sensible to acknowledge that all trait ratings are correlated (e.g., Sutherland et al., 2013), and that other trait ratings could impact femininity, and thus estimate the effects jointly with other variables.</p>
<p>The approach taken here is to build a hierarchical Bayesian model that adjusts for other covariates, and accounts for correlations within-participants given repeated trait ratings, and to examine the posterior distributions of the estimated marginal means.</p>
<p>The model includes main effects of gender, gender identity, and male and female dating intention. The interaction between target sex (male or female) and green behaviour (green or non-green) is estimated for each of the 11 trait ratings the participant provided (i.e., a three way interaction). While it would be simple to examine a given coefficient that represents the differences between green-nongreen for the <code>feminine</code> perception, this becomes difficult with the inclusion of the <code>target_sex</code> variable, as this difference will be tied to <em>either</em> female or male targets given the nature of dummy coding. The clearest answer to the claim question is averaged over the <code>target_sex</code> variable — the claim makes no reference to target sex, but it is a core component of the design.</p>
<p>As such, the solution is to fit the model and have it make marginal mean predictions, from which differences can be drawn from the posterior.</p>
<p>As the inclusion of the interaction with perception increases the size of the predictor space, regularising priors are chosen to constrain estimates. Coefficient priors are set to a <img src="https://latex.codecogs.com/png.latex?%5Cmathcal%7BN%7D(0,%200.25)"> prior, representing a state of information that most effects will be no larger than half a rating-scale unit change.</p>
<div id="886b1be7" class="cell" data-execution_count="5">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb8" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb8-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Set out a model formula and orders of levels for categoricals</span></span>
<span id="cb8-2">attr_levels <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (y <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">list</span>(data_l[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'perception'</span>].unique()))[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>::<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> y[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>:]</span>
<span id="cb8-3">green_levels <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'non-green'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'green'</span>]</span>
<span id="cb8-4">sex_levels <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'male'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'female'</span>]</span>
<span id="cb8-5"></span>
<span id="cb8-6">mdspec <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"""rating </span></span>
<span id="cb8-7"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">            ~ C(perception, levels=attr_levels)</span></span>
<span id="cb8-8"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">            * C(green, levels=green_levels)</span></span>
<span id="cb8-9"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">            * C(target_sex, levels=sex_levels)</span></span>
<span id="cb8-10"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">            + gender</span></span>
<span id="cb8-11"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">            + scale(genderiden_1)</span></span>
<span id="cb8-12"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">            + scale(dating_1)</span></span>
<span id="cb8-13"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">            + scale(dating_2)</span></span>
<span id="cb8-14"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">            + (1|pid)</span></span>
<span id="cb8-15"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">            """</span></span>
<span id="cb8-16"></span>
<span id="cb8-17"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Instantiate the model with regularising N(0, 0.25) priors</span></span>
<span id="cb8-18">model <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> bmb.Model(mdspec, </span>
<span id="cb8-19">                  priors<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>{<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'common'</span>: bmb.Prior(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Normal'</span>, mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.25</span>)},</span>
<span id="cb8-20">                  data<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>data_l)</span>
<span id="cb8-21"></span>
<span id="cb8-22"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Sample the posterior</span></span>
<span id="cb8-23">posterior_idata <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> model.fit(draws<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3000</span>, random_seed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">34</span>)</span>
<span id="cb8-24"></span>
<span id="cb8-25"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Marginal mean predictions</span></span>
<span id="cb8-26">model.predict(posterior_idata, kind<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'mean'</span>)</span></code></pre></div></div>
</div>
<pre><code>Auto-assigning NUTS sampler...
Initializing NUTS using jitter+adapt_diag...
Multiprocess sampling (4 chains in 4 jobs)
Sampling 4 chains for 1_000 tune and 3_000 draw iterations (4_000 + 12_000 draws total) took 198 seconds.</code></pre>
</section>
<section id="step-3" class="level3">
<h3 class="anchored" data-anchor-id="step-3">Step 3</h3>
<p>Below we recover the estimated means from the model and aggregate them across the green/non-green for each perception, obtaining a posterior distribution for the estimated marginal means.</p>
<div id="198cb1d8" class="cell" data-execution_count="6">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb10" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb10-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Extract aggregate marginal mean for the femininity/green-nongreen comparison</span></span>
<span id="cb10-2">feminine_emm <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (posterior_idata[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior'</span>]</span>
<span id="cb10-3">                [<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'rating_mean'</span>]</span>
<span id="cb10-4">                .to_dataframe()</span>
<span id="cb10-5">                .reset_index()</span>
<span id="cb10-6">                .merge(data_l, left_on<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'rating_obs'</span>, right_index<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span>
<span id="cb10-7">                .groupby([<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'perception'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'green'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'chain'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'draw'</span>])</span>
<span id="cb10-8">                .agg(mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'rating_mean'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'mean'</span>))</span>
<span id="cb10-9">                .query(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'perception == "feminine"'</span>)</span>
<span id="cb10-10">                .unstack(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'green'</span>)</span>
<span id="cb10-11">                .droplevel(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, axis<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'columns'</span>)</span>
<span id="cb10-12">                .reset_index(drop<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span>
<span id="cb10-13">                .assign(difference<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">lambda</span> x: x[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'green'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> x[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'non-green'</span>])</span>
<span id="cb10-14">              )</span>
<span id="cb10-15"></span>
<span id="cb10-16"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Plot</span></span>
<span id="cb10-17"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> sns.plotting_context(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'poster'</span>):</span>
<span id="cb10-18">    </span>
<span id="cb10-19">    fig, ax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plt.subplot_mosaic(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"""AAB"""</span>, gridspec_kw<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>{<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'wspace'</span>: <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.05</span>}, <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span>{<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'figsize'</span>: (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>)})</span>
<span id="cb10-20">    sns.despine(fig)</span>
<span id="cb10-21">    </span>
<span id="cb10-22">    az.plot_dist(feminine_emm[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'green'</span>], color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'green'</span>, ax<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>ax[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'A'</span>], rug<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>, fill_kwargs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>{<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'alpha'</span>: <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.2</span>}, rug_kwargs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>{<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'alpha'</span>: <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.05</span>}, label<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Green'</span>)</span>
<span id="cb10-23">    az.plot_dist(feminine_emm[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'non-green'</span>], color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>, ax<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>ax[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'A'</span>], rug<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>, fill_kwargs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>{<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'alpha'</span>: <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.2</span>}, rug_kwargs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>{<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'alpha'</span>: <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.05</span>}, label<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Non-Green'</span>)</span>
<span id="cb10-24">    ax[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'A'</span>].<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">set</span>(title<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Feminine</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">Green|Non-Green'</span>, xlabel<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Estimated Distribution of Femininity Ratings'</span>)</span>
<span id="cb10-25">    </span>
<span id="cb10-26">    az.plot_posterior(feminine_emm[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'difference'</span>].values,</span>
<span id="cb10-27">                      color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'green'</span>, lw<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>, </span>
<span id="cb10-28">                      ref_val<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, hdi_prob<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.95</span>,</span>
<span id="cb10-29">                      point_estimate<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'mean'</span>,</span>
<span id="cb10-30">                      ax<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>ax[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'B'</span>])</span>
<span id="cb10-31">    ax[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'B'</span>].<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">set</span>(title<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Feminine</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">Green - Non-green'</span>, xlabel<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'θ Difference between conditions'</span>)</span></code></pre></div></div>
</div>
<p><img src="https://alexjonesphd.github.io/posts/multi-100-analysis/output_13_0.png" class="img-fluid"></p>
<p>The posterior distribution implies:</p>
<ul>
<li>The average difference is 0.33 rating scale points.</li>
<li>The lower and upper 95% credible intervals are [0.11, 0.53], indicating effects of around a tenth of, and up to half, of a rating scale point are plausible difference sizes.</li>
<li>The probability the effect is positive — that is, that higher levels of femininity are ascribed to those with green behaviour — is 99.9%.</li>
</ul>
<p>It is also possible to estimate a Bayes Factor to test the null hypothesis, using the Savage-Dickey density ratio method. The difference to test was observed from marginal means, but the prior distribution is the same as what is implied in the model for the coefficients, <img src="https://latex.codecogs.com/png.latex?%5Cmathcal%7BN%7D(0,%200.25)">.</p>
<div id="b488f29f" class="cell" data-execution_count="7">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb11" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb11-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Estimate a Bayes Factor and plot</span></span>
<span id="cb11-2">prior <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> st.norm(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.25</span>)</span>
<span id="cb11-3">post <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> st.gaussian_kde(feminine_emm[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'difference'</span>].values)</span>
<span id="cb11-4"></span>
<span id="cb11-5"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Compute BF</span></span>
<span id="cb11-6">BF <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> (post.pdf(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> prior.pdf(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>))</span>
<span id="cb11-7"></span>
<span id="cb11-8">eval_ <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.linspace(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5000</span>)</span>
<span id="cb11-9"></span>
<span id="cb11-10"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> sns.plotting_context(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'poster'</span>):</span>
<span id="cb11-11">    </span>
<span id="cb11-12">    fig, ax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plt.subplots(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, figsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">15</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>))</span>
<span id="cb11-13">    sns.despine(fig)</span>
<span id="cb11-14">    ax.plot(eval_, prior.pdf(eval_), color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'grey'</span>, lw<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>, linestyle<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'--'</span>, label<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Prior'</span>)</span>
<span id="cb11-15">    ax.plot(eval_, post.pdf(eval_), color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>, lw<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>, label<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Posterior'</span>)</span>
<span id="cb11-16">    ax.plot([<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>], [prior.pdf(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>), <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>post.pdf(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)], <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'ko'</span>, markersize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">15</span>)</span>
<span id="cb11-17">    ax.plot([<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>], [prior.pdf(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>), <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>post.pdf(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)], <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'k-'</span>)</span>
<span id="cb11-18">    ax.legend()</span>
<span id="cb11-19">    ax.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">set</span>(ylabel<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Density'</span>, xlabel<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Green - Nongreen</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">Difference'</span>)</span>
<span id="cb11-20">    ax.text(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">3.2</span>, <span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">f'$BF_</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">{{</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">}}</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">$ = </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span>BF[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>]<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:.2f}</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">'</span>)</span></code></pre></div></div>
</div>
<p><img src="https://alexjonesphd.github.io/posts/multi-100-analysis/output_15_0.png" class="img-fluid"></p>
</section>
<section id="step-4" class="level3">
<h3 class="anchored" data-anchor-id="step-4">Step 4</h3>
<p>Thus far, the conclusion is that there is a positive effect of green behaviour on perceptions of femininity in general — the probability that the ratings of femininity are higher for green behaviour is 99.9%, and the BF for the alternative is 48.87. While this indicates the presence of an effect, the overall effect is relatively small, with the upper bound being only around half a rating scale point. This may — or may not — be psychologically practical or relevant.</p>
<p>It is also possible to examine the posterior predictive distribution of the data, which takes into account both the uncertainty in the sampling of participants, as well as the uncertainty in the parameters of the model. By generating the posterior predictive distribution, it will be possible to examine the differences between green/nongreen behaviour that could be expected in future, as opposed to a focus on the average effect. Examining this may give more insight into the expected size of the effect in actual data-point terms, as opposed to the mean. We conduct this analysis below, focused on the green/non-green difference for femininity ratings.</p>
<div id="2d7c2c9b" class="cell" data-execution_count="8">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb12" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb12-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Take a posterior predictive distribution</span></span>
<span id="cb12-2">model.predict(posterior_idata, kind<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'pps'</span>)</span>
<span id="cb12-3"></span>
<span id="cb12-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Extract posterior predictive</span></span>
<span id="cb12-5">ppc <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (posterior_idata[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior_predictive'</span>]</span>
<span id="cb12-6">       .to_dataframe()</span>
<span id="cb12-7">       .reset_index()</span>
<span id="cb12-8">       .merge(data_l, left_on<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'rating_dim_0'</span>, right_index<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>, suffixes<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'_pp'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'_observed'</span>))</span>
<span id="cb12-9">       .groupby([<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'perception'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'green'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'chain'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'draw'</span>])</span>
<span id="cb12-10">       .agg({<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'rating_pp'</span>: <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'mean'</span>})</span>
<span id="cb12-11">       .query(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'perception == "feminine"'</span>)</span>
<span id="cb12-12">       .unstack(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'green'</span>)</span>
<span id="cb12-13">       .droplevel(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, axis<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'columns'</span>)</span>
<span id="cb12-14">       .assign(difference<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">lambda</span> x: x[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'green'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> x[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'non-green'</span>])</span>
<span id="cb12-15">      )</span>
<span id="cb12-16"></span>
<span id="cb12-17"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Plot</span></span>
<span id="cb12-18"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> sns.plotting_context(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'poster'</span>):</span>
<span id="cb12-19">    </span>
<span id="cb12-20">    fig, ax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plt.subplot_mosaic(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"""AAB"""</span>, gridspec_kw<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>{<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'wspace'</span>: <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.05</span>}, <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span>{<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'figsize'</span>: (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>)})</span>
<span id="cb12-21">    sns.despine(fig)</span>
<span id="cb12-22">    </span>
<span id="cb12-23">    az.plot_dist(ppc[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'green'</span>], color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'green'</span>, ax<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>ax[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'A'</span>], rug<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>, fill_kwargs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>{<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'alpha'</span>: <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.2</span>}, rug_kwargs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>{<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'alpha'</span>: <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.05</span>}, label<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Green'</span>)</span>
<span id="cb12-24">    az.plot_dist(ppc[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'non-green'</span>], color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>, ax<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>ax[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'A'</span>], rug<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>, fill_kwargs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>{<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'alpha'</span>: <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.2</span>}, rug_kwargs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>{<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'alpha'</span>: <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.05</span>}, label<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Non-Green'</span>)</span>
<span id="cb12-25">    ax[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'A'</span>].<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">set</span>(title<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Posterior Predictive</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">Feminine - Green|Non-Green'</span>, xlabel<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Posterior Predictive Distribution of Femininity Ratings'</span>)</span>
<span id="cb12-26">    </span>
<span id="cb12-27">    az.plot_posterior(ppc[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'difference'</span>].values,</span>
<span id="cb12-28">                      color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'green'</span>, lw<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>, </span>
<span id="cb12-29">                      ref_val<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, hdi_prob<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.95</span>,</span>
<span id="cb12-30">                      point_estimate<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'mean'</span>,</span>
<span id="cb12-31">                      ax<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>ax[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'B'</span>])</span>
<span id="cb12-32">    </span>
<span id="cb12-33">    ax[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'B'</span>].<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">set</span>(title<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Posterior Predictive Green - Nongreen'</span>, xlabel<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'θ Difference between conditions'</span>)</span></code></pre></div></div>
</div>
<p><img src="https://alexjonesphd.github.io/posts/multi-100-analysis/output_17_0.png" class="img-fluid"></p>
<p>There is slightly greater uncertainty in the difference, and thus more overlap between the conditions. However, it is still very probable that green behaviour will be rated as more feminine, though this is not a large effect.</p>
</section>
</section>
<section id="conclusion" class="level2">
<h2 class="anchored" data-anchor-id="conclusion">Conclusion</h2>
<p>Given this data, there is convincing evidence that green behaviours, as described in the study, are associated with higher ratings of femininity, and the magnitude of this effect is around a tenth to half a rating scale point.</p>


</section>

 ]]></description>
  <category>Bayesian</category>
  <category>PyMC</category>
  <category>bambi</category>
  <category>reanalysis</category>
  <guid>https://alexjonesphd.github.io/posts/multi-100-analysis/</guid>
  <pubDate>Thu, 07 Jul 2022 23:00:00 GMT</pubDate>
  <media:content url="https://alexjonesphd.github.io/posts/multi-100-analysis/output_15_0.png" medium="image" type="image/png" height="100" width="144"/>
</item>
<item>
  <title>Predicting Concrete Strength - and winning competitions with Bayes</title>
  <link>https://alexjonesphd.github.io/posts/bambi-competition/</link>
  <description><![CDATA[ 




<p>I recently took part in a data-science competition that involved building a linear model to estimate the strength of concrete. Perhaps not the most thrilling of topics, but it was a good place to apply some Bayesian inference. The <a href="https://bambinos.github.io/bambi/main/index.html"><code>bambi</code></a> package makes fitting Bayesian linear models in Python very simple, and I’ve been using it as part of my workflow on the majority of projects. I’m pleased to say I won, and I’m posting the solution below as a reminder. In the final steps I had to translate standardised coefficients back to the original scale, which was tricky.</p>
<section id="can-you-predict-the-strength-of-concrete" class="level1">
<h1>Can you predict the strength of concrete?</h1>
<section id="background" class="level2">
<h2 class="anchored" data-anchor-id="background">📖 Background</h2>
<p>You work in the civil engineering department of a major university. You are part of a project testing the strength of concrete samples.</p>
<p>Concrete is the most widely used building material in the world. It is a mix of cement and water with gravel and sand. It can also include other materials like fly ash, blast furnace slag, and additives.</p>
<p>The compressive strength of concrete is a function of components and age, so your team is testing different combinations of ingredients at different time intervals.</p>
<p>The project leader asked you to find a simple way to estimate strength so that students can predict how a particular sample is expected to perform.</p>
</section>
<section id="the-data" class="level2">
<h2 class="anchored" data-anchor-id="the-data">💾 The data</h2>
<p>The team has already tested more than a thousand samples (<a href="https://archive.ics.uci.edu/ml/datasets/concrete+compressive+strength">source</a>):</p>
<section id="compressive-strength-data" class="level4">
<h4 class="anchored" data-anchor-id="compressive-strength-data">Compressive strength data:</h4>
<ul>
<li>“cement” - Portland cement in kg/m3</li>
<li>“slag” - Blast furnace slag in kg/m3</li>
<li>“fly_ash” - Fly ash in kg/m3</li>
<li>“water” - Water in liters/m3</li>
<li>“superplasticizer” - Superplasticizer additive in kg/m3</li>
<li>“coarse_aggregate” - Coarse aggregate (gravel) in kg/m3</li>
<li>“fine_aggregate” - Fine aggregate (sand) in kg/m3</li>
<li>“age” - Age of the sample in days</li>
<li>“strength” - Concrete compressive strength in megapascals (MPa)</li>
</ul>
<p><em><strong>Acknowledgments</strong>: I-Cheng Yeh, “Modeling of strength of high-performance concrete using artificial neural networks,” Cement and Concrete Research, Vol. 28, No.&nbsp;12, pp.&nbsp;1797-1808 (1998)</em>.</p>
</section>
</section>
<section id="challenge" class="level2">
<h2 class="anchored" data-anchor-id="challenge">💪 Challenge</h2>
<p>Provide your project leader with a formula that estimates the compressive strength. Include:</p>
<ol type="1">
<li>The average strength of the concrete samples at 1, 7, 14, and 28 days of age.</li>
<li>The coefficients <img src="https://latex.codecogs.com/png.latex?%20%5Cbeta_%7B0%7D,%20%5Cbeta_%7B1%7D%20...%20%5Cbeta_%7B8%7D%20">, to use in the following formula:</li>
</ol>
<p><img src="https://latex.codecogs.com/png.latex?%20Concrete%20%5C%20Strength%20=%20%5Cbeta_%7B0%7D%20%5C%20+%20%5C%20%5Cbeta_%7B1%7D*cement%20%5C%20+%20%5C%20%5Cbeta_%7B2%7D*slag%20%5C%20+%20%5C%20%5Cbeta_%7B3%7D*fly%20%5C%20ash%20%20%5C%20+%20%5C%20%5Cbeta_%7B4%7D*water%20%5C%20+%20"> <img src="https://latex.codecogs.com/png.latex?%20%5Cbeta_%7B5%7D*superplasticizer%20%5C%20+%20%5C%20%5Cbeta_%7B6%7D*coarse%20%5C%20aggregate%20%5C%20+%20%5C%20%5Cbeta_%7B7%7D*fine%20%5C%20aggregate%20%5C%20+%20%5C%20%5Cbeta_%7B8%7D*age%20"></p>
</section>
</section>
<section id="starting-note" class="level1">
<h1>Starting Note</h1>
<p>The <code>bambi</code> package is needed here to help build a Bayesian regression model that will give an informative, probabilistic estimate of compressive strength. <code>!pip install bambi</code> was used to acquire it, PyMC, and other Bayesian workflow packages for model building and exploration.</p>
</section>
<section id="step-0---imports" class="level1">
<h1>Step 0 - Imports</h1>
<div id="8d304e45" class="cell" data-execution_count="1">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb1-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> re                       <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Regular expressions</span></span>
<span id="cb1-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> arviz <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> az              <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Bayesian plotting</span></span>
<span id="cb1-3"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> bambi <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> bmb             <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Bayesian model building</span></span>
<span id="cb1-4"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> numpy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> np              <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># numeric python</span></span>
<span id="cb1-5"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> pandas <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> pd             <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># dataframes</span></span>
<span id="cb1-6"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> seaborn <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> sns           <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># plots</span></span>
<span id="cb1-7"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> scipy.stats <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> st        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># statistical functions</span></span>
<span id="cb1-8"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> matplotlib.pyplot <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> plt <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Plotting </span></span>
<span id="cb1-9"></span>
<span id="cb1-10"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Set seed for reproducibility</span></span>
<span id="cb1-11">np.random.seed(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">34</span>)</span></code></pre></div></div>
</div>
</section>
<section id="step-1---exploratory-data-analysis" class="level1">
<h1>Step 1 - Exploratory Data Analysis</h1>
<p>First we check for missing values, examine the datatypes of the dataframe, and examine the distribution of the target variable - <code>strength</code>.</p>
<div id="b70c3b56" class="cell" data-execution_count="2">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb2-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Read in the data</span></span>
<span id="cb2-2">df <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.read_csv(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'concrete_data.csv'</span>)</span>
<span id="cb2-3"></span>
<span id="cb2-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Any missing values?</span></span>
<span id="cb2-5">display(df.isna().<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">any</span>())</span>
<span id="cb2-6"></span>
<span id="cb2-7"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># What are the data types?</span></span>
<span id="cb2-8">display(df.dtypes)</span>
<span id="cb2-9"></span>
<span id="cb2-10"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Plot the strength variable</span></span>
<span id="cb2-11">sns.displot(df[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'strength'</span>])</span></code></pre></div></div>
</div>
<pre><code>cement              False
slag                False
fly_ash             False
water               False
superplasticizer    False
coarse_aggregate    False
fine_aggregate      False
age                 False
strength            False
dtype: bool



cement              float64
slag                float64
fly_ash             float64
water               float64
superplasticizer    float64
coarse_aggregate    float64
fine_aggregate      float64
age                   int64
strength            float64
dtype: object





&lt;seaborn.axisgrid.FacetGrid at 0x13c345c30&gt;</code></pre>
<p><img src="https://alexjonesphd.github.io/posts/bambi-competition/output_7_3.png" class="img-fluid"></p>
<p>There are no missing values, which is really helpful. Moreover, the data is all numeric, and the <code>strength</code> variable looks approximately normally distributed. We can more or less proceed straight to building our Bayesian model!</p>
</section>
<section id="step-2---building-a-bayesian-model" class="level1">
<h1>Step 2 - Building a Bayesian model</h1>
<p>The brief clearly lays out the foundations of a <em>linear model</em> for the relationship between <code>strength</code> and the other given variables. There are many approaches to linear models (and many other kinds of modelling strategies that could be used here), but the aim seems to be to estimate the β coefficients in the model and use those to predict the strengths of different ages of concrete.</p>
<p>Bayesian inference is a natural method here because it allows us to estimate these coefficients with uncertainty, and best of all - we get uncertainty in our estimates for free, which would be absolutely vital in civil engineering (in fact check out episode number 59 of the <a href="https://www.learnbayesstats.com/">Learning Bayesian Statistics</a> podcast!)</p>
<p>Bayesian inference does require a prior for each of the coefficients. There isn’t any clear indication of these effects in the brief, so we will use very wide, general priors. First though, let us set up the model using <code>bambi</code>.</p>
<div id="13e37277" class="cell" data-execution_count="3">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb4-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Models are built in bambi using a formula string, much like statsmodels or R</span></span>
<span id="cb4-2"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># We lay out this model according to the brief!</span></span>
<span id="cb4-3">modelspec <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'strength ~ cement + slag + fly_ash + water + superplasticizer + coarse_aggregate + fine_aggregate + age'</span></span></code></pre></div></div>
</div>
<p><strong>However</strong>, unlike frequentist estimators, Bayesian inference is very picky about the <em>scale</em> of the data. The above model would cause the MCMC sampler to struggle given the hugely different scales of the variables. The solution is to <strong>scale</strong> the predictors. A z-score standardisation works particularly well here. In fact, <code>bambi</code> is clever enough to allow this in the model specification - we simply wrap each term in a <code>scale</code> function. We do this below, and build a model instance</p>
<div id="d658ce9d" class="cell" data-execution_count="4">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb5-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Set a scaled model</span></span>
<span id="cb5-2">modelspec <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"""strength</span></span>
<span id="cb5-3"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">               ~ scale(cement) + scale(slag) </span></span>
<span id="cb5-4"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">               + scale(fly_ash) + scale(water)</span></span>
<span id="cb5-5"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">               + scale(superplasticizer) + scale(coarse_aggregate)</span></span>
<span id="cb5-6"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">               + scale(fine_aggregate) + scale(age)</span></span>
<span id="cb5-7"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">               """</span></span>
<span id="cb5-8"></span>
<span id="cb5-9"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Set up a model - the priors are by default very weak, so there is no need to specify them explicitly here, though we will examine them</span></span>
<span id="cb5-10">model <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> bmb.Model(modelspec, df)</span>
<span id="cb5-11">model.build() <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># creates the model graph using theano</span></span></code></pre></div></div>
</div>
</section>
<section id="step-3---examining-the-prior-beliefs" class="level1">
<h1>Step 3 - Examining the prior beliefs</h1>
<p>With the model built (but not yet fitted), it is time to check the priors. First, let us examine a plot of the prior distribution of each of the coefficients - a good way to think of this is what the model <em>thinks</em> the coefficients could be before it sees the data.</p>
<div id="6fb7e587" class="cell" data-execution_count="5">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb6-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Show the priors</span></span>
<span id="cb6-2">model.plot_priors(draws<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10_000</span>, hdi_prob<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.95</span>, kind<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'hist'</span>, bins<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span></code></pre></div></div>
</div>
<p><img src="https://alexjonesphd.github.io/posts/bambi-competition/output_14_0.png" class="img-fluid"></p>
<p>This is great. It shows us that the most likely effects for the main predictors are hovering around zero, but that the effect could be as big or small as about ±80 <code>strength</code> units. Sometimes people accuse priors of ‘influencing’ the data; but this is clearly not happening much here as those effects are very broad. Next, we check a ‘prior predictive’ distribution, which will give us an idea of what the model thinks the <code>strength</code> variable itself looks like, based on - The observed data for our predictors, and - Our prior distributions for the coefficients</p>
<p>In simple terms - we can ask the model to make some predictions before its seen the data, just to get a sense of what it thinks.</p>
<div id="0eaf052b" class="cell" data-execution_count="6">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb7" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb7-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Build prior predictive</span></span>
<span id="cb7-2">prpc <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> model.prior_predictive(draws<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10_000</span>)</span>
<span id="cb7-3"></span>
<span id="cb7-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># And pass this to the plot_ppc function in Arviz</span></span>
<span id="cb7-5">az.plot_ppc(prpc, group<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'prior'</span>, num_pp_samples<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1000</span>, backend_kwargs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>{<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'figsize'</span>: (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>)})</span></code></pre></div></div>
</div>
<pre><code>&lt;AxesSubplot:xlabel='strength / strength'&gt;</code></pre>
<p><img src="https://alexjonesphd.github.io/posts/bambi-competition/output_16_1.png" class="img-fluid"></p>
<p>OK, its pretty clear at this point our model gets the shape of the distribution correct, but its guesses are extremely spread out - it thinks concrete strength of -250 to 250 is plausible. Obviously that is not true, and we can sharpen things up by letting the model observe the <code>strength</code> data.</p>
</section>
<section id="step-4---fitting-the-model" class="level1">
<h1>Step 4 - Fitting the model</h1>
<p>Inspired by <code>sklearn</code>, we can fit a Bayesian model in <code>bambi</code> using MCMC with the <code>.fit()</code> method. We do this below and sample from the posterior distribution (which we can then use to predict on new data).</p>
<div id="15091dc7" class="cell" data-execution_count="7">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb9" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb9-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Fit the model using the NUTS sampler in PyMC</span></span>
<span id="cb9-2">posterior <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> model.fit(draws<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2000</span>, tune<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1000</span>)</span>
<span id="cb9-3"></span>
<span id="cb9-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Once fitted, let us examine the posterior distributions of the coefficients</span></span>
<span id="cb9-5">az.plot_posterior(posterior, kind<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'hist'</span>,</span>
<span id="cb9-6">                  color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>,</span>
<span id="cb9-7">                  bins<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>,</span>
<span id="cb9-8">                  var_names<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'~sigma'</span>, </span>
<span id="cb9-9">                  filter_vars<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'like'</span>, </span>
<span id="cb9-10">                  hdi_prob<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.95</span>)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span></code></pre></div></div>
</div>
<pre><code>Auto-assigning NUTS sampler...
Initializing NUTS using jitter+adapt_diag...
Multiprocess sampling (4 chains in 4 jobs)
NUTS: [Intercept, scale(cement), scale(slag), scale(fly_ash), scale(water), scale(superplasticizer), scale(coarse_aggregate), scale(fine_aggregate), scale(age), strength_sigma]</code></pre>
<style>
    /* Turns off some styling */
    progress {
        /* gets rid of default border in Firefox and Opera. */
        border: none;
        /* Needs to be in here for Safari polyfill so background images work as expected. */
        background-size: auto;
    }
    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {
        background: #F44336;
    }
</style>
<div>
<p><progress value="12000" class="" max="12000" style="width:300px; height:20px; vertical-align: middle;"></progress> 100.00% [12000/12000 00:25&lt;00:00 Sampling 4 chains, 0 divergences]</p>
</div>
<pre><code>Sampling 4 chains for 1_000 tune and 2_000 draw iterations (4_000 + 8_000 draws total) took 58 seconds.</code></pre>
<p><img src="https://alexjonesphd.github.io/posts/bambi-competition/output_19_4.png" class="img-fluid"></p>
<p>This contains all the information about the coefficients we may need, but we need to bear in mind scaling the predictor variables now means that - for exmaple - a 1 standard deviation increase in the <code>cement</code> variable is associated with a 13 point increase in <code>strength</code>; and we’re 95% certain the effect is between 11 and 14 units. This is an issue for age in particular as we need to predict specific ages, and now we have age on the scale of the standard deviation. First, let us examine the predictions of the model, and see if it maps closely to the data. We do that using a posterior predictive check:</p>
<div id="4a63c195" class="cell" data-execution_count="8">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb12" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb12-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Conduct a posterior predictive check</span></span>
<span id="cb12-2">model.predict(posterior, kind<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'pps'</span>)</span>
<span id="cb12-3"></span>
<span id="cb12-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># And plot</span></span>
<span id="cb12-5">az.plot_ppc(posterior, num_pp_samples<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">500</span>, backend_kwargs<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>{<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'figsize'</span>: (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>)})</span></code></pre></div></div>
</div>
<pre><code>&lt;AxesSubplot:xlabel='strength / strength'&gt;</code></pre>
<p><img src="https://alexjonesphd.github.io/posts/bambi-competition/output_21_1.png" class="img-fluid"></p>
<p>After seeing the data, the models predictions look pretty good - we can rest knowing our model makes sensible predictions.</p>
</section>
<section id="step-5---delivering-the-answers" class="level1">
<h1>Step 5 - Delivering the answers</h1>
<p>Now we turn to answering the question. The project leader wants: - The average strength of the concrete samples at 1, 7, 14, and 28 days of age. - The coefficients <img src="https://latex.codecogs.com/png.latex?%20%5Cbeta_%7B0%7D,%20%5Cbeta_%7B1%7D,%20%20...%20%20%5Cbeta_%7B8%7D%20"></p>
<p>We almost have the second part, but the first part involves making some specific predictions - we want the model to tell us specifically what it thinks the <code>strength</code> value will be at 1, 7, 14, and 28 days. This will invovle building a new dataset for the model to predict on. What we then want is to send to the model a dataset with four new observations for age (set at the desired levels). For all other predictors, we will hold them constant at their mean levels. <code>bambi</code> will transform this data and give us our predictions!</p>
<div id="a0b2a8c7" class="cell" data-execution_count="9">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb14" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb14-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># First, compute the means of the other predictors (not age, or strength), and repeat them four times</span></span>
<span id="cb14-2">new_data <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (df</span>
<span id="cb14-3">            .drop(columns<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'age'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'strength'</span>])</span>
<span id="cb14-4">            .mean()</span>
<span id="cb14-5">            .to_frame()</span>
<span id="cb14-6">            .T</span>
<span id="cb14-7">           )</span>
<span id="cb14-8"></span>
<span id="cb14-9"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Repeat it, then assign the age data</span></span>
<span id="cb14-10">new_data <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (pd.concat([new_data] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>, ignore_index<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span>
<span id="cb14-11">            .assign(age <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">7</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">14</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">28</span>])</span>
<span id="cb14-12">           )</span>
<span id="cb14-13"></span>
<span id="cb14-14"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Examine</span></span>
<span id="cb14-15">new_data.head()</span></code></pre></div></div>
</div>
<div>

<table class="dataframe table table-sm table-striped small">
<thead>
<tr>
<th>
</th>
<th>
cement
</th>
<th>
slag
</th>
<th>
fly_ash
</th>
<th>
water
</th>
<th>
superplasticizer
</th>
<th>
coarse_aggregate
</th>
<th>
fine_aggregate
</th>
<th>
age
</th>
</tr>
</thead>
<tbody>
<tr>
<th>
0
</th>
<td>
281.165631
</td>
<td>
73.895485
</td>
<td>
54.187136
</td>
<td>
181.566359
</td>
<td>
6.203112
</td>
<td>
972.918592
</td>
<td>
773.578883
</td>
<td>
1
</td>
</tr>
<tr>
<th>
1
</th>
<td>
281.165631
</td>
<td>
73.895485
</td>
<td>
54.187136
</td>
<td>
181.566359
</td>
<td>
6.203112
</td>
<td>
972.918592
</td>
<td>
773.578883
</td>
<td>
7
</td>
</tr>
<tr>
<th>
2
</th>
<td>
281.165631
</td>
<td>
73.895485
</td>
<td>
54.187136
</td>
<td>
181.566359
</td>
<td>
6.203112
</td>
<td>
972.918592
</td>
<td>
773.578883
</td>
<td>
14
</td>
</tr>
<tr>
<th>
3
</th>
<td>
281.165631
</td>
<td>
73.895485
</td>
<td>
54.187136
</td>
<td>
181.566359
</td>
<td>
6.203112
</td>
<td>
972.918592
</td>
<td>
773.578883
</td>
<td>
28
</td>
</tr>
</tbody>
</table>
</div>
<p>This can now be handed to the model.</p>
<div id="5a2179d0" class="cell" data-execution_count="10">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb15" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb15-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Get predictions of the mean of those datapoints</span></span>
<span id="cb15-2">mean_predictions <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> model.predict(posterior, kind<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'mean'</span>, data<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>new_data, inplace<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>)</span>
<span id="cb15-3"></span>
<span id="cb15-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Extract them to a dataframe, and join with the 'age' column of new_data, and do some tidying up</span></span>
<span id="cb15-5">means <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (mean_predictions[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior'</span>][<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'strength_mean'</span>]</span>
<span id="cb15-6">         .stack(draws<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'chain'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'draw'</span>))</span>
<span id="cb15-7">         .to_dataframe()</span>
<span id="cb15-8">         .reset_index()</span>
<span id="cb15-9">         .merge(new_data[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'age'</span>]], left_on<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'strength_obs'</span>, right_index<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span>
<span id="cb15-10">         .pivot(index<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'chain'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'draw'</span>], columns<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'age'</span>, values<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'strength_mean'</span>)</span>
<span id="cb15-11">        )</span>
<span id="cb15-12"></span>
<span id="cb15-13">means.head()</span></code></pre></div></div>
</div>
<div>

<table class="dataframe table table-sm table-striped small">
<thead>
<tr>
<th>
</th>
<th>
age
</th>
<th>
1
</th>
<th>
7
</th>
<th>
14
</th>
<th>
28
</th>
</tr>
<tr>
<th>
chain
</th>
<th>
draw
</th>
<th>
</th>
<th>
</th>
<th>
</th>
<th>
</th>
</tr>
</thead>
<tbody>
<tr>
<th rowspan="5" valign="top">
0
</th>
<th>
0
</th>
<td>
30.414769
</td>
<td>
31.088415
</td>
<td>
31.874336
</td>
<td>
33.446179
</td>
</tr>
<tr>
<th>
1
</th>
<td>
30.112034
</td>
<td>
30.830555
</td>
<td>
31.668829
</td>
<td>
33.345377
</td>
</tr>
<tr>
<th>
2
</th>
<td>
30.747711
</td>
<td>
31.412350
</td>
<td>
32.187762
</td>
<td>
33.738587
</td>
</tr>
<tr>
<th>
3
</th>
<td>
30.955742
</td>
<td>
31.603543
</td>
<td>
32.359310
</td>
<td>
33.870844
</td>
</tr>
<tr>
<th>
4
</th>
<td>
30.530722
</td>
<td>
31.261242
</td>
<td>
32.113516
</td>
<td>
33.818064
</td>
</tr>
</tbody>
</table>
</div>
<p>Our posterior predictions for the mean concrete strength for different ages are in hand. Let us analyse and plot these: - Averages and highest density intervals - Density plots for visualisation purposes</p>
<div id="52da3ba0" class="cell" data-execution_count="11">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb16" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb16-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Create the summary per age</span></span>
<span id="cb16-2"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> summarise_bayesian(col, coverage<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.95</span>):</span>
<span id="cb16-3">    </span>
<span id="cb16-4">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Mean</span></span>
<span id="cb16-5">    mu <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> col.mean()</span>
<span id="cb16-6">    </span>
<span id="cb16-7">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Density</span></span>
<span id="cb16-8">    lwr, upr <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> az.hdi(col.values, hdi_prob<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>coverage)</span>
<span id="cb16-9">    </span>
<span id="cb16-10">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> pd.Series([mu, lwr, upr], index<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Mean Strength'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Lower Strength Credible Limit 95%'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Upper Strength Credible Limit 95%'</span>])</span>
<span id="cb16-11"></span>
<span id="cb16-12"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Show the means and credible intervals</span></span>
<span id="cb16-13">display(</span>
<span id="cb16-14">    (means</span>
<span id="cb16-15">     .<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">apply</span>(summarise_bayesian)</span>
<span id="cb16-16">     .<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">round</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb16-17">     .rename_axis(index<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Age (in days)'</span>)</span>
<span id="cb16-18">     .T</span>
<span id="cb16-19">    ))</span>
<span id="cb16-20"></span>
<span id="cb16-21"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Illustrate via a plot</span></span>
<span id="cb16-22"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> sns.plotting_context(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'poster'</span>):</span>
<span id="cb16-23">    </span>
<span id="cb16-24">    fig, ax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plt.subplots(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, figsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>))</span>
<span id="cb16-25">    sns.despine(fig)</span>
<span id="cb16-26">    </span>
<span id="cb16-27">    sns.kdeplot(data<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>means, ax<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>ax, fill<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>, palette<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Greys'</span>, linewidth<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>)</span>
<span id="cb16-28">    ax.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">set</span>(xlabel<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Concrete Strength'</span>)</span>
<span id="cb16-29">    ax.get_legend().set_title(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Age (in days)'</span>)</span></code></pre></div></div>
</div>
<div>

<table class="dataframe table table-sm table-striped small">
<thead>
<tr>
<th>
Age (in days)
</th>
<th>
Mean Strength
</th>
<th>
Lower Strength Credible Limit 95%
</th>
<th>
Upper Strength Credible Limit 95%
</th>
</tr>
<tr>
<th>
age
</th>
<th>
</th>
<th>
</th>
<th>
</th>
</tr>
</thead>
<tbody>
<tr>
<th>
1
</th>
<td>
30.72
</td>
<td>
29.90
</td>
<td>
31.52
</td>
</tr>
<tr>
<th>
7
</th>
<td>
31.41
</td>
<td>
30.63
</td>
<td>
32.17
</td>
</tr>
<tr>
<th>
14
</th>
<td>
32.21
</td>
<td>
31.48
</td>
<td>
32.94
</td>
</tr>
<tr>
<th>
28
</th>
<td>
33.80
</td>
<td>
33.11
</td>
<td>
34.45
</td>
</tr>
</tbody>
</table>
</div>
<p><img src="https://alexjonesphd.github.io/posts/bambi-competition/output_27_1.png" class="img-fluid"></p>
<p>From the above it is clear that, holding all other predictors constant, the average strength of concrete increases over time. Using Bayesian methods meant our predictions of this average comes with uncertainty - for 28 days for example, the average is 33.80, but we are 95% certain it is between 33.12 and 34.45. We can also easily make probabilistic claims, such as what is the probability a 28 day old concrete sample is stronger than a 14 day old?</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb17" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb17-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Whats the probability 28 day old is stronger on average than 14? According to the model - certain!</span></span>
<span id="cb17-2">display(means[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">28</span>].ge(means[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">14</span>]).mean())</span></code></pre></div></div>
<pre><code>1.0</code></pre>
<p>The only thing left to do is to provide the project leader with the coefficient terms for our regression. Given we are using Bayesian methods, we can provide <em>three</em> - one for the lower 95% credibliliy, one for the mean, and another for the upper 95% credibility, just so our project leader can quantify uncertainty! To save them the trouble of transforming variables, all we need to is transform the posterior coefficient estimates to the original scale and compute a summary.</p>
<p>Back transformation is a little tricky but not impossible, following the formula:</p>
<p><img src="https://latex.codecogs.com/png.latex?%20%5Chat%20%5Cbeta_0%20-%20%5Csum_%7Bj=1%7D%5Ek%20%5Chat%20%5Cbeta_j%20%5Cfrac%7B%5Cbar%20x_j%7D%7BS_j%7D%20"> for the intercept, and</p>
<p><img src="https://latex.codecogs.com/png.latex?%20%5Cfrac%7B%5Chat%20%5Cbeta_j%7D%7BS_j%7D%20"> for the coefficients, where <img src="https://latex.codecogs.com/png.latex?%20%7BS_j%7D%20"> represents the standard deviation of the predictor.</p>
<div id="4c708832" class="cell" data-execution_count="12">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb19" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb19-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># As it is simpler, let us convert the coefficients back first</span></span>
<span id="cb19-2"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># First get the coefficient distributions</span></span>
<span id="cb19-3">posterior_draws <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (posterior[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior'</span>]</span>
<span id="cb19-4">                   .drop_vars([<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'strength_sigma'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'strength_mean'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Intercept'</span>])</span>
<span id="cb19-5">                   .to_dataframe()</span>
<span id="cb19-6">                   .rename(columns<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">lambda</span> x: re.sub(<span class="vs" style="color: #20794D;
background-color: null;
font-style: inherit;">r'scale</span><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">|</span><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">[</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\\</span><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">(</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\\</span><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">)]</span><span class="vs" style="color: #20794D;
background-color: null;
font-style: inherit;">'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">''</span>, x)) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># little regex to remove the 'scale(var_name)' formatting</span></span>
<span id="cb19-7">                   .<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">apply</span>(<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">lambda</span> x, df_<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>df: x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> df_[x.name].std()) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># for each column, grab the corresponding column from df, compute SD, and divide posterior distribution by it</span></span>
<span id="cb19-8">                  )</span>
<span id="cb19-9"></span>
<span id="cb19-10"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># # Then target the intercept which is a little trickier</span></span>
<span id="cb19-11"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># First scale the coefficients differently, and sum</span></span>
<span id="cb19-12">sum_scaled_coefs <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (posterior[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior'</span>]</span>
<span id="cb19-13">                    .drop_vars([<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'strength_sigma'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'strength_mean'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Intercept'</span>])</span>
<span id="cb19-14">                    .to_dataframe()</span>
<span id="cb19-15">                    .rename(columns<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">lambda</span> x: re.sub(<span class="vs" style="color: #20794D;
background-color: null;
font-style: inherit;">r'scale</span><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">|</span><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">[</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\\</span><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">(</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\\</span><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">)]</span><span class="vs" style="color: #20794D;
background-color: null;
font-style: inherit;">'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">''</span>, x)) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># little regex to remove the 'scale(var_name)' formatting</span></span>
<span id="cb19-16">                    .<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">apply</span>(<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">lambda</span> x, df_<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>df: x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> (df_[x.name].mean() <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> df_[x.name].std())) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># now grab corresponding column compute mean/sd and multiply by estimate</span></span>
<span id="cb19-17">                    .<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">sum</span>(axis<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'columns'</span>)</span>
<span id="cb19-18">                    .reset_index(drop<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span>
<span id="cb19-19">                    .squeeze()</span>
<span id="cb19-20">                   )</span>
<span id="cb19-21"></span>
<span id="cb19-22"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Compute the rest of the equation </span></span>
<span id="cb19-23">Intercept <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (posterior[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior'</span>][<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Intercept'</span>]</span>
<span id="cb19-24">             .to_dataframe()</span>
<span id="cb19-25">             .reset_index(drop<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span>
<span id="cb19-26">             .squeeze()</span>
<span id="cb19-27">             .sub(sum_scaled_coefs)</span>
<span id="cb19-28">             .to_frame()</span>
<span id="cb19-29">             .set_index(posterior_draws.index)</span>
<span id="cb19-30">            )</span>
<span id="cb19-31"></span>
<span id="cb19-32"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># and add it to posterior_draws</span></span>
<span id="cb19-33">posterior_draws.insert(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Intercept'</span>, Intercept)</span>
<span id="cb19-34"></span>
<span id="cb19-35">posterior_draws.head()</span></code></pre></div></div>
</div>
<div>

<table class="dataframe table table-sm table-striped small">
<thead>
<tr>
<th>
</th>
<th>
</th>
<th>
Intercept
</th>
<th>
cement
</th>
<th>
slag
</th>
<th>
fly_ash
</th>
<th>
water
</th>
<th>
superplasticizer
</th>
<th>
coarse_aggregate
</th>
<th>
fine_aggregate
</th>
<th>
age
</th>
</tr>
<tr>
<th>
chain
</th>
<th>
draw
</th>
<th>
</th>
<th>
</th>
<th>
</th>
<th>
</th>
<th>
</th>
<th>
</th>
<th>
</th>
<th>
</th>
<th>
</th>
</tr>
</thead>
<tbody>
<tr>
<th rowspan="5" valign="top">
0
</th>
<th>
0
</th>
<td>
-23.620205
</td>
<td>
0.115327
</td>
<td>
0.107009
</td>
<td>
0.086837
</td>
<td>
-0.142423
</td>
<td>
0.260784
</td>
<td>
0.019041
</td>
<td>
0.018877
</td>
<td>
0.112220
</td>
</tr>
<tr>
<th>
1
</th>
<td>
-15.596581
</td>
<td>
0.118582
</td>
<td>
0.106121
</td>
<td>
0.086538
</td>
<td>
-0.157617
</td>
<td>
0.304718
</td>
<td>
0.012568
</td>
<td>
0.018382
</td>
<td>
0.119695
</td>
</tr>
<tr>
<th>
2
</th>
<td>
-26.222202
</td>
<td>
0.114074
</td>
<td>
0.098117
</td>
<td>
0.079643
</td>
<td>
-0.125431
</td>
<td>
0.376820
</td>
<td>
0.018306
</td>
<td>
0.020487
</td>
<td>
0.110719
</td>
</tr>
<tr>
<th>
3
</th>
<td>
-21.705891
</td>
<td>
0.115148
</td>
<td>
0.089371
</td>
<td>
0.083510
</td>
<td>
-0.144183
</td>
<td>
0.453397
</td>
<td>
0.023125
</td>
<td>
0.012821
</td>
<td>
0.107914
</td>
</tr>
<tr>
<th>
4
</th>
<td>
-35.762022
</td>
<td>
0.132922
</td>
<td>
0.113358
</td>
<td>
0.102077
</td>
<td>
-0.175410
</td>
<td>
0.137964
</td>
<td>
0.021733
</td>
<td>
0.031982
</td>
<td>
0.121694
</td>
</tr>
</tbody>
</table>
</div>
<p>With some <code>pandas</code> wrangling, we now have the posterior distributions on the original scale. This is one of the downsides of Bayesian modelling - sometimes you need the coefficients on the scale of the input variables, but MCMC sampling struggles with varying scales, so most estimation is done on a standardised scale. But we have it; and now we can give the <em>three</em> regression equations for the mean and upper/lower uncertainty:</p>
<div id="67df2f8e" class="cell" data-execution_count="13">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb20" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb20-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># State the regression equation for the project lead, as well as upper/lower credible bounds</span></span>
<span id="cb20-2">display(posterior_draws.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">apply</span>(summarise_bayesian).<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">round</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>))</span></code></pre></div></div>
</div>
<div>

<table class="dataframe table table-sm table-striped small">
<thead>
<tr>
<th>
</th>
<th>
Intercept
</th>
<th>
cement
</th>
<th>
slag
</th>
<th>
fly_ash
</th>
<th>
water
</th>
<th>
superplasticizer
</th>
<th>
coarse_aggregate
</th>
<th>
fine_aggregate
</th>
<th>
age
</th>
</tr>
</thead>
<tbody>
<tr>
<th>
Mean Strength
</th>
<td>
-22.412
</td>
<td>
0.120
</td>
<td>
0.104
</td>
<td>
0.088
</td>
<td>
-0.151
</td>
<td>
0.289
</td>
<td>
0.018
</td>
<td>
0.020
</td>
<td>
0.114
</td>
</tr>
<tr>
<th>
Lower Strength Credible Limit 95%
</th>
<td>
-75.285
</td>
<td>
0.103
</td>
<td>
0.084
</td>
<td>
0.063
</td>
<td>
-0.230
</td>
<td>
0.108
</td>
<td>
-0.002
</td>
<td>
-0.002
</td>
<td>
0.104
</td>
</tr>
<tr>
<th>
Upper Strength Credible Limit 95%
</th>
<td>
29.179
</td>
<td>
0.136
</td>
<td>
0.124
</td>
<td>
0.113
</td>
<td>
-0.071
</td>
<td>
0.470
</td>
<td>
0.036
</td>
<td>
0.040
</td>
<td>
0.125
</td>
</tr>
</tbody>
</table>
</div>
</section>
<section id="conclusion" class="level1">
<h1>Conclusion</h1>
<p>Using Bayesian inference, we have estimated a model that solves the problem the project leader asked for. For each of the predictor variables, we obtained a coefficient (actually a distribution of credible coefficients) that represents how the variable changes with concrete strength. One of the amazing things about Bayesian estimation is that we have free uncertainty in our estimates. As such, we are able to provide not just a point estimate (the mean-strength formula above) but also the lower and upper 95% credible values for each variable, which essentially represents actually-possible regression equations. The students would be wise to incorporate this uncertainty.</p>
<p>We also used the model to provide estimates for concrete strength at different levels of age, in days; 1, 7, 14, and 28 days. Again, because of the power of Bayesian estimation, we were able to provide credible limits for these predictions and were able to make statements about the superiority of concrete strength - for example, our model was 100% certain that, all other variables being equal, 28 day old concrete is stronger than 14 day old concrete.</p>
</section>
<section id="step--1---bonus-analysis" class="level1">
<h1>Step [-1] - BONUS ANALYSIS</h1>
<p>What is stated above is a fairly standard example of Bayesian linear regression. In linear regression, we aim to predict the mean of the distribution of observed data as a linear combination of factors. Formally, it is set out as:</p>
<p><img src="https://latex.codecogs.com/png.latex?%20y_i%20=%20%5Calpha%20+%20x_i%5Cbeta%20+%20%5Cepsilon%20"></p>
<p>However, from a probabilistic perspective, a linear model can be written like this:</p>
<p><img src="https://latex.codecogs.com/png.latex?%20y_i%20%5Csim%20%5Cmathcal%7BN%7D(%5Cmu_i,%20%5Csigma)%20"></p>
<p>where</p>
<p><img src="https://latex.codecogs.com/png.latex?%20%5Cmu_i%20=%20%5Calpha%20+%20x_i%5Cbeta%20"></p>
<p>That is, our observed data is expected to be normally distributed with the mean parameter generated by the linear combination of predictors, and a standard deviation parameter.</p>
<p>What is not obvious from looking at this formula is that it implies that there is a distribution per-observation governed by the model, and not a distribution around the <em>mean</em> parameter, which is what is focused on in the above analysis. In fact, using Bayesian estimation, it is possible to obtained a distribution of a given data point, known as the <strong>posterior predictive distribution</strong>, which is the distribution of future data points, given observed data points, integrating out the parameters in the model.</p>
<p>While this sounds complex, in reality what it gives us is simple: a probability distribution for a single datapoint for what it may look like in future, after taking the model into account. This is really important for the application at hand, given that concrete strength is critical for a lot of work! Specifically we can look past the mean of the distributions - that is, what is the average concrete strength for a given 14 day old sample - but instead estimate likely values we may see in future. Let’s examine this below and see what the distributions look like for the different ages using an empirical cumulative distribution plot. As will be seen, density plots will be too messy here.</p>
<div id="87340684" class="cell" data-execution_count="14">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb21" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb21-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Sample the posterior predictive distribution</span></span>
<span id="cb21-2">ppd <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> model.predict(posterior, kind<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'pps'</span>, data<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>new_data, inplace<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>)</span>
<span id="cb21-3"></span>
<span id="cb21-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Examine it</span></span>
<span id="cb21-5">ppd <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (ppd[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior_predictive'</span>]</span>
<span id="cb21-6">       .to_dataframe()</span>
<span id="cb21-7">       .unstack(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'strength_dim_0'</span>)</span>
<span id="cb21-8">       .rename(columns<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>new_data.age)</span>
<span id="cb21-9">       .droplevel(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, axis<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'columns'</span>)</span>
<span id="cb21-10">      )</span>
<span id="cb21-11"></span>
<span id="cb21-12"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> sns.plotting_context(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'poster'</span>):</span>
<span id="cb21-13">    </span>
<span id="cb21-14">    plt.style.use(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'bmh'</span>)</span>
<span id="cb21-15">    </span>
<span id="cb21-16">    fig, ax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plt.subplots(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, figsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>))</span>
<span id="cb21-17">    sns.despine(fig)</span>
<span id="cb21-18">    </span>
<span id="cb21-19">    sns.ecdfplot(data<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>ppd, ax<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>ax, palette<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Greys'</span>, linewidth<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>)</span>
<span id="cb21-20">    ax.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">set</span>(xlabel<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Concrete Strength'</span>, facecolor<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'white'</span>)</span>
<span id="cb21-21">    ax.get_legend().set_title(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Age (in days)'</span>)</span>
<span id="cb21-22">    ax.set_xticks(labs <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:=</span> np.arange(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">110</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>), labels<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>labs)</span>
<span id="cb21-23">    ax.set_yticks(labs <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:=</span> np.arange(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.1</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>), labels<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">round</span>(x,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> x <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> labs])</span></code></pre></div></div>
</div>
<p><img src="https://alexjonesphd.github.io/posts/bambi-competition/output_36_0.png" class="img-fluid"></p>
<p>This gives a surprising result. While we can see that 28 day old concrete, for the most part, is stronger than the others. But the variability here is <strong>much</strong> greater than when just estimating the mean. In fact, there are similar overlaps in strength across all ages. For example, about 70% of 28 day year old concrete will be weaker than 40, but around 77% of 14 day old will be weaker, a difference of just 7% points. Above all, this highlights that future variability is much greater than intuition suggests.</p>


</section>

 ]]></description>
  <category>Bayesian</category>
  <category>PyMC</category>
  <category>bambi</category>
  <category>competition</category>
  <guid>https://alexjonesphd.github.io/posts/bambi-competition/</guid>
  <pubDate>Thu, 07 Jul 2022 23:00:00 GMT</pubDate>
  <media:content url="https://alexjonesphd.github.io/posts/bambi-competition/output_21_1.png" medium="image" type="image/png" height="76" width="144"/>
</item>
<item>
  <title>COVID-19 Vaccine Side Effects — a rough night, in data</title>
  <link>https://alexjonesphd.github.io/posts/vaccine-effects/</link>
  <description><![CDATA[ 




<p>In April 2021 I got my first COVID-19 vaccination. The side effects were pretty hard going — for about 24 hours I was laid out, and woke up in the middle of the night to my smart watch giving me an “extreme heart rate warning”, which is just the kind of thing you want to see after getting injected with a vaccine for a virus sweeping the globe.</p>
<p>Once I felt more alive, I had the idea of extracting the heart rate data from my watch. As it turns out, there is an excellent Python package, <a href="https://pypi.org/project/fitparse/"><code>fitparse</code></a>, that allows the parsing of the <code>.FIT</code> files from Fitbit watches. I won’t post the raw data here and the associated code, but it was pretty simple to get a few days’ worth of data from the watch and plot it. Easy to see how bad things were — which made me extremely grateful for getting vaccinated and <em>not</em> the real thing.</p>
<p>I’m posting this because the plot took a little while to do, and has some functions I don’t use often and am always looking up. The trickiest part was adding annotations to the x-axis — because it’s a datetime object, positions need to be expressed as datetimes too. This took some creativity to make a readable attempt: while <code>annotate</code> gives flexibility in how you specify the text locations, raw data coordinates are the easiest approach, and the raw string representation of dates messes up the temporal ordering of the plot.</p>
<div id="378a8562" class="cell" data-execution_count="1">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb1-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Imports</span></span>
<span id="cb1-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> pandas <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> pd</span>
<span id="cb1-3"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> seaborn <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> sns</span>
<span id="cb1-4"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> matplotlib.pyplot <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> plt</span></code></pre></div></div>
</div>
<div id="36280fe6" class="cell" data-execution_count="2">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb2-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Data preprocessing</span></span>
<span id="cb2-2">hr <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (pd.read_csv(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'https://raw.githubusercontent.com/alexjonesphd/alexjonesphd.github.io/master/assets/covid/vaccination_experience.csv'</span>)</span>
<span id="cb2-3">      .assign(date<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">lambda</span> x: pd.to_datetime(x[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'timestamp'</span>], <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">format</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'%Y-%m-</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%d</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'</span>))</span>
<span id="cb2-4">      .sort_values(by<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'date'</span>)</span>
<span id="cb2-5">      .dropna(subset<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'heart_rate'</span>, how<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'any'</span>)</span>
<span id="cb2-6">      .query(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'heart_rate &gt; 50'</span>)</span>
<span id="cb2-7">      .assign(rolling_30<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">lambda</span> x: x[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'heart_rate'</span>].rolling(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>).mean())</span>
<span id="cb2-8">      .reset_index(drop<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span>
<span id="cb2-9">     )</span>
<span id="cb2-10"></span>
<span id="cb2-11">hr.head()</span></code></pre></div></div>
</div>
<div>
<table class="dataframe table table-sm table-striped small">
<thead>
<tr>
<th>
</th>
<th>
timestamp
</th>
<th>
stress_level
</th>
<th>
heart_rate
</th>
<th>
date
</th>
<th>
rolling_30
</th>
</tr>
</thead>
<tbody>
<tr>
<th>
0
</th>
<td>
2021-04-22 23:00:00
</td>
<td>
30
</td>
<td>
84.0
</td>
<td>
2021-04-22 23:00:00
</td>
<td>
NaN
</td>
</tr>
<tr>
<th>
1
</th>
<td>
2021-04-22 23:01:00
</td>
<td>
21
</td>
<td>
68.0
</td>
<td>
2021-04-22 23:01:00
</td>
<td>
NaN
</td>
</tr>
<tr>
<th>
2
</th>
<td>
2021-04-22 23:02:00
</td>
<td>
18
</td>
<td>
67.0
</td>
<td>
2021-04-22 23:02:00
</td>
<td>
NaN
</td>
</tr>
<tr>
<th>
3
</th>
<td>
2021-04-22 23:03:00
</td>
<td>
19
</td>
<td>
63.0
</td>
<td>
2021-04-22 23:03:00
</td>
<td>
NaN
</td>
</tr>
<tr>
<th>
4
</th>
<td>
2021-04-22 23:04:00
</td>
<td>
15
</td>
<td>
62.0
</td>
<td>
2021-04-22 23:04:00
</td>
<td>
NaN
</td>
</tr>
</tbody>
</table>
</div>
<p>There were also a bunch of things that happened I want to annotate on the plot, so first I’ll make a dictionary containing them along with their associated time points and my heart rate at the time (I worked backwards from the plot to figure these out, but it makes the code tidier to include here). These will be used as coordinates for the <code>annotate</code> method of an axis object.</p>
<div id="05b6b8e2" class="cell" data-execution_count="3">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb3-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Event log dictionary, using datetime spec for X locations - the strings will need parsing into datetimes</span></span>
<span id="cb3-2"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Format follows XX, YY...</span></span>
<span id="cb3-3">events <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> {<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Morning dog walk'</span>: [(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'2021-04-23 10:45'</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">105</span>), (<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'2021-04-23 10:45'</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">109</span>)],</span>
<span id="cb3-4">          <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Vaccinated!'</span>: [(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'2021-04-23 17'</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">125</span>), (<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'2021-04-23 18'</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">135</span>)],</span>
<span id="cb3-5">          <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Evening dog walk'</span>: [(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'2021-04-23 19:30'</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">108</span>), (<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'2021-04-23 21'</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">125</span>)],</span>
<span id="cb3-6">          <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Suspiciously high for</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">just watching TV...'</span>: [(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'2021-04-23 22:30'</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">98</span>), (<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'2021-04-23 22:30'</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">115</span>)],</span>
<span id="cb3-7">          <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Sleep'</span>: [(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'2021-04-24 00'</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">68</span>), (<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'2021-04-24 00'</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">55</span>)],</span>
<span id="cb3-8">          <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Wake up with chills'</span>: [(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'2021-04-24 01'</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">83</span>), (<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'2021-04-24 01'</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">65</span>)],</span>
<span id="cb3-9">          <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Abnormal heart rate warning'</span>: [(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'2021-04-24 03:55'</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">134</span>), (<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'2021-04-24 03:58'</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">140</span>)],</span>
<span id="cb3-10">          <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Move downstairs'</span>: [(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'2021-04-24 12:30'</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">155</span>), (<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'2021-04-24 13:15'</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">160</span>)]</span>
<span id="cb3-11">         }</span></code></pre></div></div>
</div>
<p>Plot and annotate some of the events of the 24 hours and what I was doing, and do it in <strong>xkcd</strong> style.</p>
<p>Vaccines are great, and having a heart rate over 150bpm just walking down the stairs is worth it.</p>
<div id="7a6c7aed" class="cell" data-execution_count="4">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb4-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Set up plotting context, style, and fig/ax</span></span>
<span id="cb4-2">sns.set_context(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'poster'</span>, font_scale<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb4-3"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> plt.xkcd(scale<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>, length<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>, randomness<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">200</span>):</span>
<span id="cb4-4">    </span>
<span id="cb4-5">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Fig/axis</span></span>
<span id="cb4-6">    fig, ax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> plt.subplots(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, figsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">50</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>))</span>
<span id="cb4-7">    sns.despine(fig) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Turn off up/right axis</span></span>
<span id="cb4-8"></span>
<span id="cb4-9">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Plot both raw and rolling lines separately for easier control</span></span>
<span id="cb4-10">    sns.lineplot(data<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>hr, ax<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>ax,</span>
<span id="cb4-11">                 x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'date'</span>, y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'heart_rate'</span>, </span>
<span id="cb4-12">                 alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.2</span>, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>, </span>
<span id="cb4-13">                 label<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Raw Heart Rate'</span>)</span>
<span id="cb4-14"></span>
<span id="cb4-15">    sns.lineplot(data<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>hr, ax<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>ax,</span>
<span id="cb4-16">                 x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'date'</span>, y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'rolling_30'</span>, </span>
<span id="cb4-17">                 color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>, linestyle<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'--'</span>,</span>
<span id="cb4-18">                 linewidth<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8</span>,</span>
<span id="cb4-19">                 label<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Rolling 30 minute average'</span>)</span>
<span id="cb4-20"></span>
<span id="cb4-21">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Add a horizontal line at 100bpm, shift legend, add a shaded block for the 23rd, annotate the 23rd/24th</span></span>
<span id="cb4-22">    ax.axhline(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'black'</span>, alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.5</span>)</span>
<span id="cb4-23">    ax.legend(loc<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'upper left'</span>)</span>
<span id="cb4-24">    ax.axvspan(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'2021-04-23 00:00:00'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'2021-04-24 00:00:00'</span>, color<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'silver'</span>, alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.05</span>)</span>
<span id="cb4-25">    ax.text(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.27</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.80</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'23rd'</span>, transform<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>ax.transAxes, fontsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">80</span>)</span>
<span id="cb4-26">    ax.text(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.85</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">.80</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'24th'</span>, transform<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>ax.transAxes, fontsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">80</span>)</span>
<span id="cb4-27">    </span>
<span id="cb4-28">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Add the annotations - the X coord needs converting to datetime</span></span>
<span id="cb4-29">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> event, time <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> events.items():</span>
<span id="cb4-30">        </span>
<span id="cb4-31">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Convert the first element - cleanest way I could think of</span></span>
<span id="cb4-32">        time_ <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [(pd.to_datetime(t[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>]), t[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]) <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> t <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> time]</span>
<span id="cb4-33">        </span>
<span id="cb4-34">        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Add annotation</span></span>
<span id="cb4-35">        ax.annotate(event, <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>time_, arrowprops<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>{<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'width'</span>: <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>}, fontsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>)</span>
<span id="cb4-36"></span>
<span id="cb4-37">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Clean up axes, setting an x tick every four hours in date-time format, then relabelling</span></span>
<span id="cb4-38">    ax.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">set</span>(ylabel<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Heart Rate</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">bpm'</span>, xlabel<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Time'</span>, ylim<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">50</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">160</span>),</span>
<span id="cb4-39">           xticks<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">f'2021-04-</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span>d<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;"> </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span>h<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:02}</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">:00:00'</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> d <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> [<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">23</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">24</span>] <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> h <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> [<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">12</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>]],</span>
<span id="cb4-40">           xticklabels<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">f'</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span>x<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:02}</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">:00'</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> x <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> [<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">12</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>]]<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span></code></pre></div></div>
</div>
<p><img src="https://alexjonesphd.github.io/posts/vaccine-effects/output_7_0.png" class="img-fluid"></p>



 ]]></description>
  <category>Python</category>
  <category>data viz</category>
  <category>matplotlib</category>
  <guid>https://alexjonesphd.github.io/posts/vaccine-effects/</guid>
  <pubDate>Wed, 06 Jul 2022 23:00:00 GMT</pubDate>
  <media:content url="https://alexjonesphd.github.io/posts/vaccine-effects/output_7_0.png" medium="image" type="image/png" height="59" width="144"/>
</item>
<item>
  <title>Bayesian Bookshelf</title>
  <link>https://alexjonesphd.github.io/posts/bayesian-bookshelf/</link>
  <description><![CDATA[ 




<p><img src="https://alexjonesphd.github.io/posts/bayesian-bookshelf/bayes_book.jpg" class="img-fluid"></p>
<p>The pandemic lockdowns were a time for exploring new interests for a lot of people — baking sourdough, gardening, photography… Perhaps foolishly, I decided to get into Bayesian statistics.</p>
<p>I’d read a lot in the psychological methods literature for some time that the Bayesian approach was a natural and easily interpretable approach to inference, could give evidence for null effects, and there was no need to open a textbook to get the definition of a confidence interval every single time. I found plenty of published tutorial papers starting with these promises, but by the second paragraph almost all of them contained either deeply philosophical views on probability or introduced terrifying formulas and distributions I’d never heard of.</p>
<p>Even worse, there seemed to be two distinct schools of thought on Bayesian inference — an estimation and uncertainty approach, and the Bayes Factor hypothesis testing school. The former didn’t like the latter, and the latter seemed disconnected to the former and felt suspiciously like frequentist <em>p</em>-values, with journals requiring minimum thresholds for publication and discussions around the probability a Bayes Factor would be “significant”.</p>
<p>After two years of reading as many books as I could afford on the topic, I genuinely do think Bayesian inference has all of the benefits you read about. It is a natural way to reason about data, build models, and think about statistics. But after years of using frequentist approaches, it is <strong>not</strong> easy. Ironically, I learned much more about frequentist statistics by reading about Bayesian inference than I did in nearly a whole decade of <em>using</em> frequentist statistics.</p>
<p>If you’re interested in learning more about Bayesian inference, I’ve found these books very useful. They are a blend of theoretical and practical — I’m most comfortable in Python, but many of the ideas, if not the implementation, translate to other languages easily. Your experience may vary, but if you have a background in social or psychological sciences, my prior is that these books will help you like they helped me.</p>
<section id="bayesian-statistics-the-fun-way" class="level2 unnumbered">
<h2 class="unnumbered anchored" data-anchor-id="bayesian-statistics-the-fun-way">1. Bayesian Statistics The Fun Way</h2>
<p><em>Will Kurt</em></p>
<p><img src="https://alexjonesphd.github.io/posts/bayesian-bookshelf/kurt.jpg" class="img-fluid"></p>
<p>This book is the perfect place to start. It gently introduces the idea of probability, probability distributions, and explains Bayes’ rule with a lot of clear examples. There’s chapters on priors and how to update them, and discussion of using Bayes Factors to understand individual degrees of belief. There’s some R code too to help calculate some of the trickier aspects that are necessary for inference, and everything is presented in a clear and engaging way.</p>
<p>More on this book <a href="https://nostarch.com/learnbayes">here</a>.</p>
</section>
<section id="bayesian-statistics-for-beginners-a-step-by-step-approach" class="level2 unnumbered">
<h2 class="unnumbered anchored" data-anchor-id="bayesian-statistics-for-beginners-a-step-by-step-approach">2. Bayesian Statistics for Beginners: A step-by-step approach</h2>
<p><em>Therese Donovan and Ruth Mickey</em></p>
<p><img src="https://alexjonesphd.github.io/posts/bayesian-bookshelf/donovan.jpg" class="img-fluid"></p>
<p>This book is <strong>amazing</strong>. It was after reading this that things finally started to make sense. The authors — who describe themselves as lifetime frequentists — go through a series of chapters that introduce probability distributions, the concepts of priors and likelihoods, and how to use Bayes’ rule to calculate posterior distributions with simple datasets. The thing I love the most about this book is that it is not afraid to repeat itself. In fact, the second half of the book revisits all the concepts of the first half, but repeats the examples with flavours of how modern Bayesian inference is done (using Markov-chain Monte Carlo methods), and introduces some basic models estimated with Bayesian methods. It’s very clear, accessible, and I got the sense the authors knew what I was thinking before I did when it came to trickier parts.</p>
<p>Outline of the book <a href="https://oxford.universitypressscholarship.com/view/10.1093/oso/9780198841296.001.0001/oso-9780198841296">here</a>.</p>
</section>
<section id="bayes-rules-an-introduction-to-applied-bayesian-modelling" class="level2 unnumbered">
<h2 class="unnumbered anchored" data-anchor-id="bayes-rules-an-introduction-to-applied-bayesian-modelling">3. Bayes Rules! An introduction to applied Bayesian Modelling</h2>
<p><em>Alicia Johnson, Miles Ott, and Mine Dogucu</em></p>
<p><img src="https://alexjonesphd.github.io/posts/bayesian-bookshelf/bayes-rules-hex.png" class="img-fluid"></p>
<p>There’s a lot to cover learning Bayesian stats before you can even think about doing something as simple as a correlation. This book gives very clear examples of fitting regression models (all done in R) using Bayesian methods, and introduces concepts like prior predictive checks (what does my model think before it sees the data?) and how mixed models are thought of from a Bayesian perspective. There’s a lot of excellent content here — all types of linear models are covered, from simple linear regression through to generalised mixed models. This is an ideal hands-on book, especially if you’re comfortable with R. It’s an extremely accessible read.</p>
<p>You can find this book online <a href="https://www.bayesrulesbook.com/">here</a>.</p>
</section>
<section id="statistical-rethinking-second-edition" class="level2 unnumbered">
<h2 class="unnumbered anchored" data-anchor-id="statistical-rethinking-second-edition">4. Statistical Rethinking, Second Edition</h2>
<p><em>Richard McElreath</em></p>
<p><img src="https://alexjonesphd.github.io/posts/bayesian-bookshelf/rethinking.png" class="img-fluid"></p>
<p>I would guess this is one of the most influential modern books on Bayesian statistics, and for good reason. McElreath works from the first principles of probability through to causal inference with directed acyclic graphs. As the name suggests, the information is presented alongside deep perspectives on inference and what it means to learn from data, and how we can often fool ourselves. This is a challenging but rewarding read — things made a lot more sense to me after some gentler texts, but it’s never far away when I am fitting models. It also comes with its own R package to facilitate model building, and is as hands-on as it is theoretical.</p>
<p>More info on Rethinking <a href="https://xcelab.net/rm/statistical-rethinking/">here</a>.</p>
</section>
<section id="doing-bayesian-data-analysis" class="level2 unnumbered">
<h2 class="unnumbered anchored" data-anchor-id="doing-bayesian-data-analysis">5. Doing Bayesian Data Analysis</h2>
<p><em>John Kruschke</em></p>
<p><img src="https://alexjonesphd.github.io/posts/bayesian-bookshelf/puppy.png" class="img-fluid"></p>
<p>From an applied statistics perspective, this is about as comprehensive a guide to Bayesian statistics as you would hope to find. Kruschke has an accessible style and teaches Bayesian inference in comparison to frequentist approaches. Once I was comfortable with the idea of priors and model building this book helped to connect the dots between what frequentist models were doing and their Bayesian equivalents, and what the differences meant. There is also some insightful (and incisive) discussion between the two approaches to statistical inference here, and the level of detail is excellent. Kruschke has really brought the estimation approach to the fore in psychology, and demonstrates how techniques like regions of practical equivalence can give evidence for the null. This book also helped connect Bayes Factors and Bayesian estimation, with some convincing criticisms of the former approach.</p>
<p>John Kruschke also has an associated blog <a href="https://doingbayesiandataanalysis.blogspot.com/">here</a>.</p>
</section>
<section id="bayesian-methods-in-statistics-from-concepts-to-practice" class="level2 unnumbered">
<h2 class="unnumbered anchored" data-anchor-id="bayesian-methods-in-statistics-from-concepts-to-practice">6. Bayesian Methods in Statistics: From Concepts to Practice</h2>
<p><em>Mel Slater</em></p>
<p><img src="https://alexjonesphd.github.io/posts/bayesian-bookshelf/slater.jpg" class="img-fluid"></p>
<p>One of the things I like about this book is that it has some excellent chapters on probability distributions which have been indispensable in figuring out different types of priors in analyses. It also has a wealth of examples in how to fit many models in <a href="https://mc-stan.org/">Stan</a>, a probabilistic programming language (read: code that does Bayesian inference) that interfaces with R and Python. It’s also got some nice examples of how to compute Bayes Factors from fitted models, which a lot of books tend to avoid. This book has a lot of formulas, which if you’re unaccustomed to reading can prove difficult. Disclaimer: I was a reviewer of this book!</p>
<p>Outline <a href="https://uk.sagepub.com/en-gb/eur/bayesian-methods-in-statistics/book277659#description">here</a>.</p>
</section>
<section id="bayesian-analysis-with-python-second-edition" class="level2 unnumbered">
<h2 class="unnumbered anchored" data-anchor-id="bayesian-analysis-with-python-second-edition">7. Bayesian Analysis with Python, Second Edition</h2>
<p><em>Osvaldo Martin</em></p>
<p><img src="https://alexjonesphd.github.io/posts/bayesian-bookshelf/osvaldo.jpg" class="img-fluid"></p>
<p>This book changed my statistical analysis practices enormously. Written by one of the developers of the amazing <a href="https://www.pymc.io/">PyMC</a> library, Python’s probabilistic programming package. It contains a range of examples of how to use the package, and translates a number of statistical models (linear models, generalized linear models, and hierarchical models) into Python and PyMC code. These examples are excellent. If like me you can read code faster than formulas, some big gains in understanding are to be found here. The book also introduces some of the other approaches in Bayesian statistics beyond the traditional linear model approaches, including Gaussian processes — which give you probability distributions over functions, rather than model parameters! Incredible stuff.</p>
<p>Codebase and discussion <a href="https://github.com/aloctavodia/BAP">here</a>.</p>
</section>
<section id="bayesian-modeling-and-computation-in-python" class="level2 unnumbered">
<h2 class="unnumbered anchored" data-anchor-id="bayesian-modeling-and-computation-in-python">8. Bayesian Modeling and Computation in Python</h2>
<p><em>Osvaldo Martin, Ravin Kumar, and Junpeng Lao</em></p>
<p><img src="https://alexjonesphd.github.io/posts/bayesian-bookshelf/pycomp.jpg" class="img-fluid"></p>
<p>An advancement on <strong>Bayesian Analysis with Python</strong>, this features updated approaches to Bayesian inference in Python, using both PyMC and other probabilistic programming languages. There’s some really advanced topics in this book that showcase what Python can do in this realm, and there’s perhaps one of the clearest demonstrations of hierarchical models from a Bayesian perspective written in code, as well as great examples of model-checking practices like Bayesian <em>p</em>-values. Not a beginner text, but one to expand the skill-set in Python.</p>
<p>You can find this book online <a href="https://bayesiancomputationbook.com/welcome.html">here</a>.</p>
</section>
<section id="a-students-guide-to-bayesian-statistics" class="level2 unnumbered">
<h2 class="unnumbered anchored" data-anchor-id="a-students-guide-to-bayesian-statistics">9. A Student’s Guide to Bayesian Statistics</h2>
<p><em>Ben Lambert</em></p>
<p><img src="https://alexjonesphd.github.io/posts/bayesian-bookshelf/lambert.jpg" class="img-fluid"></p>
<p>I have some mixed feelings on this book, and depending on your journey you may find it more or less useful. I encountered it pretty early on, and found it difficult. The exercises at the end of each chapter are hard and that can be off-putting, and the focus is on the theoretical approaches (with some minor applications with R), rather than actual analysis. Looking back though, the book does a really thorough job of going through each part of the famous formula — there’s a chapter on priors, <img src="https://latex.codecogs.com/png.latex?p(%5Ctheta)">, one on likelihoods, <img src="https://latex.codecogs.com/png.latex?p(D%20%5Cmid%20%5Ctheta)">, and on the marginal likelihood, <img src="https://latex.codecogs.com/png.latex?p(D)">, and how these come together. One of the standout sections is on the algorithms used in modern Bayesian computing and how they work. I’d say these are the most detailed and accessible descriptions of these “inference engines” I’ve seen.</p>
</section>
<section id="bayesian-data-analysis-3rd-edition" class="level2 unnumbered">
<h2 class="unnumbered anchored" data-anchor-id="bayesian-data-analysis-3rd-edition">10. Bayesian Data Analysis, 3rd Edition</h2>
<p><em>Andrew Gelman, John Carlin, Hal Stern, David Dunson, Aki Vehtari, and Donald Rubin</em></p>
<p><img src="https://alexjonesphd.github.io/posts/bayesian-bookshelf/bda.jpg" class="img-fluid"></p>
<p>There’s a reason this book is known as the “Bayesian bible”. It’s written by some of the leaders in the field of Bayesian statistics, as well as some of the core developers of the Stan language. The book is theoretical in scope, and lays out the mathematics behind Bayesian statistics comprehensively. I’ve definitely not read this cover to cover, but it’s a good litmus test of building knowledge — any time I pick it up and read through, I know I am progressing if I am following along. Not a beginner’s book but an essential addition.</p>
<p>You can find this book <a href="http://www.stat.columbia.edu/~gelman/book/">here</a>.</p>
</section>
<section id="other-notable-mentions" class="level2 unnumbered">
<h2 class="unnumbered anchored" data-anchor-id="other-notable-mentions">Other notable mentions</h2>
<p><strong>Regression and Other Stories</strong> — <em>Andrew Gelman, Jennifer Hill, and Aki Vehtari.</em> This is the Trojan horse of Bayesian statistics. Presented as a thorough guide to how linear models are crafted and interpreted, with some solid advance on abandoning statistical significance and a gentle demonstration of how prior information is necessary.</p>
<p><strong>Bayesian Methods for Hackers</strong> — <em>Cameron Davidson-Pilon.</em> This book (found <a href="https://camdavidsonpilon.github.io/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/">online</a> and continually updated) showcases many uses of Bayesian inference, using PyMC. Interestingly, this book is pretty much devoid of formulas and takes a strong code-only approach. The examples here are pretty sophisticated, but the code focus shows how to do some creative statistics with Bayes.</p>
<p><strong>Bernoulli’s Fallacy</strong> — <em>Aubrey Clayton.</em> No statistics here, but an inspiring historical and contemporary discussion of the Bayesian view of probability. By the time I read the book I didn’t need convincing, but if you’re curious about the philosophy of Bayesian inference, start here. And then read it again if you’re not convinced.</p>


</section>

 ]]></description>
  <category>Bayesian</category>
  <category>books</category>
  <category>learning</category>
  <guid>https://alexjonesphd.github.io/posts/bayesian-bookshelf/</guid>
  <pubDate>Tue, 05 Jul 2022 23:00:00 GMT</pubDate>
  <media:content url="https://alexjonesphd.github.io/posts/bayesian-bookshelf/bayes_book.jpg" medium="image" type="image/jpeg"/>
</item>
</channel>
</rss>
