mirror of
https://github.com/fjosw/pyerrors.git
synced 2025-05-15 20:13:41 +02:00
Documentation updated
This commit is contained in:
parent
63c996007d
commit
c66abcdc49
1 changed files with 488 additions and 441 deletions
|
@ -816,35 +816,35 @@
|
|||
</span><span id="L-705"><a href="#L-705"><span class="linenos"> 705</span></a>
|
||||
</span><span id="L-706"><a href="#L-706"><span class="linenos"> 706</span></a><span class="k">def</span> <span class="nf">_combined_fit</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">silent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
</span><span id="L-707"><a href="#L-707"><span class="linenos"> 707</span></a>
|
||||
</span><span id="L-708"><a href="#L-708"><span class="linenos"> 708</span></a> <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'correlated_fit'</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
|
||||
</span><span id="L-709"><a href="#L-709"><span class="linenos"> 709</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">"Correlated fit has not been implemented yet"</span><span class="p">)</span>
|
||||
</span><span id="L-708"><a href="#L-708"><span class="linenos"> 708</span></a> <span class="n">output</span> <span class="o">=</span> <span class="n">Fit_result</span><span class="p">()</span>
|
||||
</span><span id="L-709"><a href="#L-709"><span class="linenos"> 709</span></a> <span class="n">output</span><span class="o">.</span><span class="n">fit_function</span> <span class="o">=</span> <span class="n">func</span>
|
||||
</span><span id="L-710"><a href="#L-710"><span class="linenos"> 710</span></a>
|
||||
</span><span id="L-711"><a href="#L-711"><span class="linenos"> 711</span></a> <span class="n">output</span> <span class="o">=</span> <span class="n">Fit_result</span><span class="p">()</span>
|
||||
</span><span id="L-712"><a href="#L-712"><span class="linenos"> 712</span></a> <span class="n">output</span><span class="o">.</span><span class="n">fit_function</span> <span class="o">=</span> <span class="n">func</span>
|
||||
</span><span id="L-713"><a href="#L-713"><span class="linenos"> 713</span></a>
|
||||
</span><span id="L-714"><a href="#L-714"><span class="linenos"> 714</span></a> <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'num_grad'</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
|
||||
</span><span id="L-715"><a href="#L-715"><span class="linenos"> 715</span></a> <span class="n">jacobian</span> <span class="o">=</span> <span class="n">num_jacobian</span>
|
||||
</span><span id="L-716"><a href="#L-716"><span class="linenos"> 716</span></a> <span class="n">hessian</span> <span class="o">=</span> <span class="n">num_hessian</span>
|
||||
</span><span id="L-717"><a href="#L-717"><span class="linenos"> 717</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="L-718"><a href="#L-718"><span class="linenos"> 718</span></a> <span class="n">jacobian</span> <span class="o">=</span> <span class="n">auto_jacobian</span>
|
||||
</span><span id="L-719"><a href="#L-719"><span class="linenos"> 719</span></a> <span class="n">hessian</span> <span class="o">=</span> <span class="n">auto_hessian</span>
|
||||
</span><span id="L-720"><a href="#L-720"><span class="linenos"> 720</span></a>
|
||||
</span><span id="L-721"><a href="#L-721"><span class="linenos"> 721</span></a> <span class="n">key_ls</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">keys</span><span class="p">()))</span>
|
||||
</span><span id="L-711"><a href="#L-711"><span class="linenos"> 711</span></a> <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'num_grad'</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
|
||||
</span><span id="L-712"><a href="#L-712"><span class="linenos"> 712</span></a> <span class="n">jacobian</span> <span class="o">=</span> <span class="n">num_jacobian</span>
|
||||
</span><span id="L-713"><a href="#L-713"><span class="linenos"> 713</span></a> <span class="n">hessian</span> <span class="o">=</span> <span class="n">num_hessian</span>
|
||||
</span><span id="L-714"><a href="#L-714"><span class="linenos"> 714</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="L-715"><a href="#L-715"><span class="linenos"> 715</span></a> <span class="n">jacobian</span> <span class="o">=</span> <span class="n">auto_jacobian</span>
|
||||
</span><span id="L-716"><a href="#L-716"><span class="linenos"> 716</span></a> <span class="n">hessian</span> <span class="o">=</span> <span class="n">auto_hessian</span>
|
||||
</span><span id="L-717"><a href="#L-717"><span class="linenos"> 717</span></a>
|
||||
</span><span id="L-718"><a href="#L-718"><span class="linenos"> 718</span></a> <span class="n">key_ls</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">keys</span><span class="p">()))</span>
|
||||
</span><span id="L-719"><a href="#L-719"><span class="linenos"> 719</span></a>
|
||||
</span><span id="L-720"><a href="#L-720"><span class="linenos"> 720</span></a> <span class="k">if</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">y</span><span class="o">.</span><span class="n">keys</span><span class="p">()))</span> <span class="o">!=</span> <span class="n">key_ls</span><span class="p">:</span>
|
||||
</span><span id="L-721"><a href="#L-721"><span class="linenos"> 721</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">'x and y dictionaries do not contain the same keys.'</span><span class="p">)</span>
|
||||
</span><span id="L-722"><a href="#L-722"><span class="linenos"> 722</span></a>
|
||||
</span><span id="L-723"><a href="#L-723"><span class="linenos"> 723</span></a> <span class="k">if</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">y</span><span class="o">.</span><span class="n">keys</span><span class="p">()))</span> <span class="o">!=</span> <span class="n">key_ls</span><span class="p">:</span>
|
||||
</span><span id="L-724"><a href="#L-724"><span class="linenos"> 724</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">'x and y dictionaries do not contain the same keys.'</span><span class="p">)</span>
|
||||
</span><span id="L-723"><a href="#L-723"><span class="linenos"> 723</span></a> <span class="k">if</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">func</span><span class="o">.</span><span class="n">keys</span><span class="p">()))</span> <span class="o">!=</span> <span class="n">key_ls</span><span class="p">:</span>
|
||||
</span><span id="L-724"><a href="#L-724"><span class="linenos"> 724</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">'x and func dictionaries do not contain the same keys.'</span><span class="p">)</span>
|
||||
</span><span id="L-725"><a href="#L-725"><span class="linenos"> 725</span></a>
|
||||
</span><span id="L-726"><a href="#L-726"><span class="linenos"> 726</span></a> <span class="k">if</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">func</span><span class="o">.</span><span class="n">keys</span><span class="p">()))</span> <span class="o">!=</span> <span class="n">key_ls</span><span class="p">:</span>
|
||||
</span><span id="L-727"><a href="#L-727"><span class="linenos"> 727</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">'x and func dictionaries do not contain the same keys.'</span><span class="p">)</span>
|
||||
</span><span id="L-726"><a href="#L-726"><span class="linenos"> 726</span></a> <span class="n">x_all</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">([</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">key</span><span class="p">])</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">key_ls</span><span class="p">])</span>
|
||||
</span><span id="L-727"><a href="#L-727"><span class="linenos"> 727</span></a> <span class="n">y_all</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">([</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">y</span><span class="p">[</span><span class="n">key</span><span class="p">])</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">key_ls</span><span class="p">])</span>
|
||||
</span><span id="L-728"><a href="#L-728"><span class="linenos"> 728</span></a>
|
||||
</span><span id="L-729"><a href="#L-729"><span class="linenos"> 729</span></a> <span class="n">x_all</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">([</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">key</span><span class="p">])</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">key_ls</span><span class="p">])</span>
|
||||
</span><span id="L-730"><a href="#L-730"><span class="linenos"> 730</span></a> <span class="n">y_all</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">([</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">y</span><span class="p">[</span><span class="n">key</span><span class="p">])</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">key_ls</span><span class="p">])</span>
|
||||
</span><span id="L-729"><a href="#L-729"><span class="linenos"> 729</span></a> <span class="n">y_f</span> <span class="o">=</span> <span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y_all</span><span class="p">]</span>
|
||||
</span><span id="L-730"><a href="#L-730"><span class="linenos"> 730</span></a> <span class="n">dy_f</span> <span class="o">=</span> <span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">dvalue</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y_all</span><span class="p">]</span>
|
||||
</span><span id="L-731"><a href="#L-731"><span class="linenos"> 731</span></a>
|
||||
</span><span id="L-732"><a href="#L-732"><span class="linenos"> 732</span></a> <span class="n">y_f</span> <span class="o">=</span> <span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y_all</span><span class="p">]</span>
|
||||
</span><span id="L-733"><a href="#L-733"><span class="linenos"> 733</span></a> <span class="n">dy_f</span> <span class="o">=</span> <span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">dvalue</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y_all</span><span class="p">]</span>
|
||||
</span><span id="L-732"><a href="#L-732"><span class="linenos"> 732</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">x_all</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span> <span class="o">></span> <span class="mi">2</span><span class="p">:</span>
|
||||
</span><span id="L-733"><a href="#L-733"><span class="linenos"> 733</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">'Unknown format for x values'</span><span class="p">)</span>
|
||||
</span><span id="L-734"><a href="#L-734"><span class="linenos"> 734</span></a>
|
||||
</span><span id="L-735"><a href="#L-735"><span class="linenos"> 735</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">x_all</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span> <span class="o">></span> <span class="mi">2</span><span class="p">:</span>
|
||||
</span><span id="L-736"><a href="#L-736"><span class="linenos"> 736</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">'Unknown format for x values'</span><span class="p">)</span>
|
||||
</span><span id="L-735"><a href="#L-735"><span class="linenos"> 735</span></a> <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">any</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">dy_f</span><span class="p">)</span> <span class="o"><=</span> <span class="mf">0.0</span><span class="p">):</span>
|
||||
</span><span id="L-736"><a href="#L-736"><span class="linenos"> 736</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">'No y errors available, run the gamma method first.'</span><span class="p">)</span>
|
||||
</span><span id="L-737"><a href="#L-737"><span class="linenos"> 737</span></a>
|
||||
</span><span id="L-738"><a href="#L-738"><span class="linenos"> 738</span></a> <span class="c1"># number of fit parameters</span>
|
||||
</span><span id="L-739"><a href="#L-739"><span class="linenos"> 739</span></a> <span class="n">n_parms_ls</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
|
@ -877,279 +877,326 @@
|
|||
</span><span id="L-766"><a href="#L-766"><span class="linenos"> 766</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="L-767"><a href="#L-767"><span class="linenos"> 767</span></a> <span class="n">x0</span> <span class="o">=</span> <span class="p">[</span><span class="mf">0.1</span><span class="p">]</span> <span class="o">*</span> <span class="n">n_parms</span>
|
||||
</span><span id="L-768"><a href="#L-768"><span class="linenos"> 768</span></a>
|
||||
</span><span id="L-769"><a href="#L-769"><span class="linenos"> 769</span></a> <span class="k">def</span> <span class="nf">chisqfunc</span><span class="p">(</span><span class="n">p</span><span class="p">):</span>
|
||||
</span><span id="L-770"><a href="#L-770"><span class="linenos"> 770</span></a> <span class="n">func_list</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">([[</span><span class="n">func</span><span class="p">[</span><span class="n">k</span><span class="p">]]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">k</span><span class="p">])</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">key_ls</span><span class="p">])</span>
|
||||
</span><span id="L-771"><a href="#L-771"><span class="linenos"> 771</span></a> <span class="n">model</span> <span class="o">=</span> <span class="n">anp</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">func_list</span><span class="p">[</span><span class="n">i</span><span class="p">](</span><span class="n">p</span><span class="p">,</span> <span class="n">x_all</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">x_all</span><span class="p">))])</span>
|
||||
</span><span id="L-772"><a href="#L-772"><span class="linenos"> 772</span></a> <span class="n">chisq</span> <span class="o">=</span> <span class="n">anp</span><span class="o">.</span><span class="n">sum</span><span class="p">(((</span><span class="n">y_f</span> <span class="o">-</span> <span class="n">model</span><span class="p">)</span> <span class="o">/</span> <span class="n">dy_f</span><span class="p">)</span> <span class="o">**</span> <span class="mi">2</span><span class="p">)</span>
|
||||
</span><span id="L-773"><a href="#L-773"><span class="linenos"> 773</span></a> <span class="k">return</span> <span class="n">chisq</span>
|
||||
</span><span id="L-774"><a href="#L-774"><span class="linenos"> 774</span></a>
|
||||
</span><span id="L-775"><a href="#L-775"><span class="linenos"> 775</span></a> <span class="n">output</span><span class="o">.</span><span class="n">method</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'method'</span><span class="p">,</span> <span class="s1">'Levenberg-Marquardt'</span><span class="p">)</span>
|
||||
</span><span id="L-776"><a href="#L-776"><span class="linenos"> 776</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">silent</span><span class="p">:</span>
|
||||
</span><span id="L-777"><a href="#L-777"><span class="linenos"> 777</span></a> <span class="nb">print</span><span class="p">(</span><span class="s1">'Method:'</span><span class="p">,</span> <span class="n">output</span><span class="o">.</span><span class="n">method</span><span class="p">)</span>
|
||||
</span><span id="L-778"><a href="#L-778"><span class="linenos"> 778</span></a>
|
||||
</span><span id="L-779"><a href="#L-779"><span class="linenos"> 779</span></a> <span class="k">if</span> <span class="n">output</span><span class="o">.</span><span class="n">method</span> <span class="o">!=</span> <span class="s1">'Levenberg-Marquardt'</span><span class="p">:</span>
|
||||
</span><span id="L-780"><a href="#L-780"><span class="linenos"> 780</span></a> <span class="k">if</span> <span class="n">output</span><span class="o">.</span><span class="n">method</span> <span class="o">==</span> <span class="s1">'migrad'</span><span class="p">:</span>
|
||||
</span><span id="L-781"><a href="#L-781"><span class="linenos"> 781</span></a> <span class="n">tolerance</span> <span class="o">=</span> <span class="mf">1e-4</span> <span class="c1"># default value of 1e-1 set by iminuit can be problematic</span>
|
||||
</span><span id="L-782"><a href="#L-782"><span class="linenos"> 782</span></a> <span class="k">if</span> <span class="s1">'tol'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
|
||||
</span><span id="L-783"><a href="#L-783"><span class="linenos"> 783</span></a> <span class="n">tolerance</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'tol'</span><span class="p">)</span>
|
||||
</span><span id="L-784"><a href="#L-784"><span class="linenos"> 784</span></a> <span class="n">fit_result</span> <span class="o">=</span> <span class="n">iminuit</span><span class="o">.</span><span class="n">minimize</span><span class="p">(</span><span class="n">chisqfunc</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">tol</span><span class="o">=</span><span class="n">tolerance</span><span class="p">)</span> <span class="c1"># Stopping criterion 0.002 * tol * errordef</span>
|
||||
</span><span id="L-785"><a href="#L-785"><span class="linenos"> 785</span></a> <span class="n">output</span><span class="o">.</span><span class="n">iterations</span> <span class="o">=</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">nfev</span>
|
||||
</span><span id="L-786"><a href="#L-786"><span class="linenos"> 786</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="L-787"><a href="#L-787"><span class="linenos"> 787</span></a> <span class="n">tolerance</span> <span class="o">=</span> <span class="mf">1e-12</span>
|
||||
</span><span id="L-788"><a href="#L-788"><span class="linenos"> 788</span></a> <span class="k">if</span> <span class="s1">'tol'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
|
||||
</span><span id="L-789"><a href="#L-789"><span class="linenos"> 789</span></a> <span class="n">tolerance</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'tol'</span><span class="p">)</span>
|
||||
</span><span id="L-790"><a href="#L-790"><span class="linenos"> 790</span></a> <span class="n">fit_result</span> <span class="o">=</span> <span class="n">scipy</span><span class="o">.</span><span class="n">optimize</span><span class="o">.</span><span class="n">minimize</span><span class="p">(</span><span class="n">chisqfunc</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'method'</span><span class="p">),</span> <span class="n">tol</span><span class="o">=</span><span class="n">tolerance</span><span class="p">)</span>
|
||||
</span><span id="L-791"><a href="#L-791"><span class="linenos"> 791</span></a> <span class="n">output</span><span class="o">.</span><span class="n">iterations</span> <span class="o">=</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">nit</span>
|
||||
</span><span id="L-792"><a href="#L-792"><span class="linenos"> 792</span></a>
|
||||
</span><span id="L-793"><a href="#L-793"><span class="linenos"> 793</span></a> <span class="n">chisquare</span> <span class="o">=</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">fun</span>
|
||||
</span><span id="L-769"><a href="#L-769"><span class="linenos"> 769</span></a> <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'correlated_fit'</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
|
||||
</span><span id="L-770"><a href="#L-770"><span class="linenos"> 770</span></a> <span class="n">corr</span> <span class="o">=</span> <span class="n">covariance</span><span class="p">(</span><span class="n">y_all</span><span class="p">,</span> <span class="n">correlation</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||||
</span><span id="L-771"><a href="#L-771"><span class="linenos"> 771</span></a> <span class="n">covdiag</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="mi">1</span> <span class="o">/</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">dy_f</span><span class="p">))</span>
|
||||
</span><span id="L-772"><a href="#L-772"><span class="linenos"> 772</span></a> <span class="n">condn</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">cond</span><span class="p">(</span><span class="n">corr</span><span class="p">)</span>
|
||||
</span><span id="L-773"><a href="#L-773"><span class="linenos"> 773</span></a> <span class="k">if</span> <span class="n">condn</span> <span class="o">></span> <span class="mf">0.1</span> <span class="o">/</span> <span class="n">np</span><span class="o">.</span><span class="n">finfo</span><span class="p">(</span><span class="nb">float</span><span class="p">)</span><span class="o">.</span><span class="n">eps</span><span class="p">:</span>
|
||||
</span><span id="L-774"><a href="#L-774"><span class="linenos"> 774</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Cannot invert correlation matrix as its condition number exceeds machine precision (</span><span class="si">{</span><span class="n">condn</span><span class="si">:</span><span class="s2">1.2e</span><span class="si">}</span><span class="s2">)"</span><span class="p">)</span>
|
||||
</span><span id="L-775"><a href="#L-775"><span class="linenos"> 775</span></a> <span class="k">if</span> <span class="n">condn</span> <span class="o">></span> <span class="mf">1e13</span><span class="p">:</span>
|
||||
</span><span id="L-776"><a href="#L-776"><span class="linenos"> 776</span></a> <span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s2">"Correlation matrix may be ill-conditioned, condition number: {</span><span class="si">%1.2e</span><span class="s2">}"</span> <span class="o">%</span> <span class="p">(</span><span class="n">condn</span><span class="p">),</span> <span class="ne">RuntimeWarning</span><span class="p">)</span>
|
||||
</span><span id="L-777"><a href="#L-777"><span class="linenos"> 777</span></a> <span class="n">chol</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">cholesky</span><span class="p">(</span><span class="n">corr</span><span class="p">)</span>
|
||||
</span><span id="L-778"><a href="#L-778"><span class="linenos"> 778</span></a> <span class="n">chol_inv</span> <span class="o">=</span> <span class="n">scipy</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">solve_triangular</span><span class="p">(</span><span class="n">chol</span><span class="p">,</span> <span class="n">covdiag</span><span class="p">,</span> <span class="n">lower</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
</span><span id="L-779"><a href="#L-779"><span class="linenos"> 779</span></a>
|
||||
</span><span id="L-780"><a href="#L-780"><span class="linenos"> 780</span></a> <span class="k">def</span> <span class="nf">chisqfunc_corr</span><span class="p">(</span><span class="n">p</span><span class="p">):</span>
|
||||
</span><span id="L-781"><a href="#L-781"><span class="linenos"> 781</span></a> <span class="n">model</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">([</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">func</span><span class="p">[</span><span class="n">key</span><span class="p">](</span><span class="n">p</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">key</span><span class="p">])))</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">key_ls</span><span class="p">])</span>
|
||||
</span><span id="L-782"><a href="#L-782"><span class="linenos"> 782</span></a> <span class="n">chisq</span> <span class="o">=</span> <span class="n">anp</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">anp</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">chol_inv</span><span class="p">,</span> <span class="p">(</span><span class="n">y_f</span> <span class="o">-</span> <span class="n">model</span><span class="p">))</span> <span class="o">**</span> <span class="mi">2</span><span class="p">)</span>
|
||||
</span><span id="L-783"><a href="#L-783"><span class="linenos"> 783</span></a> <span class="k">return</span> <span class="n">chisq</span>
|
||||
</span><span id="L-784"><a href="#L-784"><span class="linenos"> 784</span></a>
|
||||
</span><span id="L-785"><a href="#L-785"><span class="linenos"> 785</span></a> <span class="k">def</span> <span class="nf">chisqfunc</span><span class="p">(</span><span class="n">p</span><span class="p">):</span>
|
||||
</span><span id="L-786"><a href="#L-786"><span class="linenos"> 786</span></a> <span class="n">func_list</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">([[</span><span class="n">func</span><span class="p">[</span><span class="n">k</span><span class="p">]]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">k</span><span class="p">])</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">key_ls</span><span class="p">])</span>
|
||||
</span><span id="L-787"><a href="#L-787"><span class="linenos"> 787</span></a> <span class="n">model</span> <span class="o">=</span> <span class="n">anp</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">func_list</span><span class="p">[</span><span class="n">i</span><span class="p">](</span><span class="n">p</span><span class="p">,</span> <span class="n">x_all</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">x_all</span><span class="p">))])</span>
|
||||
</span><span id="L-788"><a href="#L-788"><span class="linenos"> 788</span></a> <span class="n">chisq</span> <span class="o">=</span> <span class="n">anp</span><span class="o">.</span><span class="n">sum</span><span class="p">(((</span><span class="n">y_f</span> <span class="o">-</span> <span class="n">model</span><span class="p">)</span> <span class="o">/</span> <span class="n">dy_f</span><span class="p">)</span> <span class="o">**</span> <span class="mi">2</span><span class="p">)</span>
|
||||
</span><span id="L-789"><a href="#L-789"><span class="linenos"> 789</span></a> <span class="k">return</span> <span class="n">chisq</span>
|
||||
</span><span id="L-790"><a href="#L-790"><span class="linenos"> 790</span></a>
|
||||
</span><span id="L-791"><a href="#L-791"><span class="linenos"> 791</span></a> <span class="n">output</span><span class="o">.</span><span class="n">method</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'method'</span><span class="p">,</span> <span class="s1">'Levenberg-Marquardt'</span><span class="p">)</span>
|
||||
</span><span id="L-792"><a href="#L-792"><span class="linenos"> 792</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">silent</span><span class="p">:</span>
|
||||
</span><span id="L-793"><a href="#L-793"><span class="linenos"> 793</span></a> <span class="nb">print</span><span class="p">(</span><span class="s1">'Method:'</span><span class="p">,</span> <span class="n">output</span><span class="o">.</span><span class="n">method</span><span class="p">)</span>
|
||||
</span><span id="L-794"><a href="#L-794"><span class="linenos"> 794</span></a>
|
||||
</span><span id="L-795"><a href="#L-795"><span class="linenos"> 795</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="L-796"><a href="#L-796"><span class="linenos"> 796</span></a> <span class="k">def</span> <span class="nf">chisqfunc_residuals</span><span class="p">(</span><span class="n">p</span><span class="p">):</span>
|
||||
</span><span id="L-797"><a href="#L-797"><span class="linenos"> 797</span></a> <span class="n">model</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">([</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">func</span><span class="p">[</span><span class="n">key</span><span class="p">](</span><span class="n">p</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">key</span><span class="p">])))</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">key_ls</span><span class="p">])</span>
|
||||
</span><span id="L-798"><a href="#L-798"><span class="linenos"> 798</span></a> <span class="n">chisq</span> <span class="o">=</span> <span class="p">((</span><span class="n">y_f</span> <span class="o">-</span> <span class="n">model</span><span class="p">)</span> <span class="o">/</span> <span class="n">dy_f</span><span class="p">)</span>
|
||||
</span><span id="L-799"><a href="#L-799"><span class="linenos"> 799</span></a> <span class="k">return</span> <span class="n">chisq</span>
|
||||
</span><span id="L-800"><a href="#L-800"><span class="linenos"> 800</span></a> <span class="k">if</span> <span class="s1">'tol'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
|
||||
</span><span id="L-801"><a href="#L-801"><span class="linenos"> 801</span></a> <span class="nb">print</span><span class="p">(</span><span class="s1">'tol cannot be set for Levenberg-Marquardt'</span><span class="p">)</span>
|
||||
</span><span id="L-802"><a href="#L-802"><span class="linenos"> 802</span></a> <span class="n">fit_result</span> <span class="o">=</span> <span class="n">scipy</span><span class="o">.</span><span class="n">optimize</span><span class="o">.</span><span class="n">least_squares</span><span class="p">(</span><span class="n">chisqfunc_residuals</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="s1">'lm'</span><span class="p">,</span> <span class="n">ftol</span><span class="o">=</span><span class="mf">1e-15</span><span class="p">,</span> <span class="n">gtol</span><span class="o">=</span><span class="mf">1e-15</span><span class="p">,</span> <span class="n">xtol</span><span class="o">=</span><span class="mf">1e-15</span><span class="p">)</span>
|
||||
</span><span id="L-803"><a href="#L-803"><span class="linenos"> 803</span></a>
|
||||
</span><span id="L-804"><a href="#L-804"><span class="linenos"> 804</span></a> <span class="n">chisquare</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">fit_result</span><span class="o">.</span><span class="n">fun</span> <span class="o">**</span> <span class="mi">2</span><span class="p">)</span>
|
||||
</span><span id="L-805"><a href="#L-805"><span class="linenos"> 805</span></a> <span class="k">assert</span> <span class="n">np</span><span class="o">.</span><span class="n">isclose</span><span class="p">(</span><span class="n">chisquare</span><span class="p">,</span> <span class="n">chisqfunc</span><span class="p">(</span><span class="n">fit_result</span><span class="o">.</span><span class="n">x</span><span class="p">),</span> <span class="n">atol</span><span class="o">=</span><span class="mf">1e-14</span><span class="p">)</span>
|
||||
</span><span id="L-806"><a href="#L-806"><span class="linenos"> 806</span></a> <span class="n">output</span><span class="o">.</span><span class="n">iterations</span> <span class="o">=</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">nfev</span>
|
||||
</span><span id="L-807"><a href="#L-807"><span class="linenos"> 807</span></a>
|
||||
</span><span id="L-808"><a href="#L-808"><span class="linenos"> 808</span></a> <span class="n">output</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">message</span>
|
||||
</span><span id="L-809"><a href="#L-809"><span class="linenos"> 809</span></a>
|
||||
</span><span id="L-810"><a href="#L-810"><span class="linenos"> 810</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">success</span><span class="p">:</span>
|
||||
</span><span id="L-811"><a href="#L-811"><span class="linenos"> 811</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">'The minimization procedure did not converge.'</span><span class="p">)</span>
|
||||
</span><span id="L-795"><a href="#L-795"><span class="linenos"> 795</span></a> <span class="k">if</span> <span class="n">output</span><span class="o">.</span><span class="n">method</span> <span class="o">!=</span> <span class="s1">'Levenberg-Marquardt'</span><span class="p">:</span>
|
||||
</span><span id="L-796"><a href="#L-796"><span class="linenos"> 796</span></a> <span class="k">if</span> <span class="n">output</span><span class="o">.</span><span class="n">method</span> <span class="o">==</span> <span class="s1">'migrad'</span><span class="p">:</span>
|
||||
</span><span id="L-797"><a href="#L-797"><span class="linenos"> 797</span></a> <span class="n">tolerance</span> <span class="o">=</span> <span class="mf">1e-4</span> <span class="c1"># default value of 1e-1 set by iminuit can be problematic</span>
|
||||
</span><span id="L-798"><a href="#L-798"><span class="linenos"> 798</span></a> <span class="k">if</span> <span class="s1">'tol'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
|
||||
</span><span id="L-799"><a href="#L-799"><span class="linenos"> 799</span></a> <span class="n">tolerance</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'tol'</span><span class="p">)</span>
|
||||
</span><span id="L-800"><a href="#L-800"><span class="linenos"> 800</span></a> <span class="n">fit_result</span> <span class="o">=</span> <span class="n">iminuit</span><span class="o">.</span><span class="n">minimize</span><span class="p">(</span><span class="n">chisqfunc</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">tol</span><span class="o">=</span><span class="n">tolerance</span><span class="p">)</span> <span class="c1"># Stopping criterion 0.002 * tol * errordef</span>
|
||||
</span><span id="L-801"><a href="#L-801"><span class="linenos"> 801</span></a> <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'correlated_fit'</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
|
||||
</span><span id="L-802"><a href="#L-802"><span class="linenos"> 802</span></a> <span class="n">fit_result</span> <span class="o">=</span> <span class="n">iminuit</span><span class="o">.</span><span class="n">minimize</span><span class="p">(</span><span class="n">chisqfunc_corr</span><span class="p">,</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">x</span><span class="p">,</span> <span class="n">tol</span><span class="o">=</span><span class="n">tolerance</span><span class="p">)</span>
|
||||
</span><span id="L-803"><a href="#L-803"><span class="linenos"> 803</span></a> <span class="n">output</span><span class="o">.</span><span class="n">iterations</span> <span class="o">=</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">nfev</span>
|
||||
</span><span id="L-804"><a href="#L-804"><span class="linenos"> 804</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="L-805"><a href="#L-805"><span class="linenos"> 805</span></a> <span class="n">tolerance</span> <span class="o">=</span> <span class="mf">1e-12</span>
|
||||
</span><span id="L-806"><a href="#L-806"><span class="linenos"> 806</span></a> <span class="k">if</span> <span class="s1">'tol'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
|
||||
</span><span id="L-807"><a href="#L-807"><span class="linenos"> 807</span></a> <span class="n">tolerance</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'tol'</span><span class="p">)</span>
|
||||
</span><span id="L-808"><a href="#L-808"><span class="linenos"> 808</span></a> <span class="n">fit_result</span> <span class="o">=</span> <span class="n">scipy</span><span class="o">.</span><span class="n">optimize</span><span class="o">.</span><span class="n">minimize</span><span class="p">(</span><span class="n">chisqfunc</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'method'</span><span class="p">),</span> <span class="n">tol</span><span class="o">=</span><span class="n">tolerance</span><span class="p">)</span>
|
||||
</span><span id="L-809"><a href="#L-809"><span class="linenos"> 809</span></a> <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'correlated_fit'</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
|
||||
</span><span id="L-810"><a href="#L-810"><span class="linenos"> 810</span></a> <span class="n">fit_result</span> <span class="o">=</span> <span class="n">scipy</span><span class="o">.</span><span class="n">optimize</span><span class="o">.</span><span class="n">minimize</span><span class="p">(</span><span class="n">chisqfunc_corr</span><span class="p">,</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">x</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'method'</span><span class="p">),</span> <span class="n">tol</span><span class="o">=</span><span class="n">tolerance</span><span class="p">)</span>
|
||||
</span><span id="L-811"><a href="#L-811"><span class="linenos"> 811</span></a> <span class="n">output</span><span class="o">.</span><span class="n">iterations</span> <span class="o">=</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">nit</span>
|
||||
</span><span id="L-812"><a href="#L-812"><span class="linenos"> 812</span></a>
|
||||
</span><span id="L-813"><a href="#L-813"><span class="linenos"> 813</span></a> <span class="k">if</span> <span class="n">x_all</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">n_parms</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
||||
</span><span id="L-814"><a href="#L-814"><span class="linenos"> 814</span></a> <span class="n">output</span><span class="o">.</span><span class="n">chisquare</span> <span class="o">=</span> <span class="n">chisquare</span>
|
||||
</span><span id="L-815"><a href="#L-815"><span class="linenos"> 815</span></a> <span class="n">output</span><span class="o">.</span><span class="n">dof</span> <span class="o">=</span> <span class="n">x_all</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">n_parms</span>
|
||||
</span><span id="L-816"><a href="#L-816"><span class="linenos"> 816</span></a> <span class="n">output</span><span class="o">.</span><span class="n">chisquare_by_dof</span> <span class="o">=</span> <span class="n">output</span><span class="o">.</span><span class="n">chisquare</span> <span class="o">/</span> <span class="n">output</span><span class="o">.</span><span class="n">dof</span>
|
||||
</span><span id="L-817"><a href="#L-817"><span class="linenos"> 817</span></a> <span class="n">output</span><span class="o">.</span><span class="n">p_value</span> <span class="o">=</span> <span class="mi">1</span> <span class="o">-</span> <span class="n">scipy</span><span class="o">.</span><span class="n">stats</span><span class="o">.</span><span class="n">chi2</span><span class="o">.</span><span class="n">cdf</span><span class="p">(</span><span class="n">output</span><span class="o">.</span><span class="n">chisquare</span><span class="p">,</span> <span class="n">output</span><span class="o">.</span><span class="n">dof</span><span class="p">)</span>
|
||||
</span><span id="L-818"><a href="#L-818"><span class="linenos"> 818</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="L-819"><a href="#L-819"><span class="linenos"> 819</span></a> <span class="n">output</span><span class="o">.</span><span class="n">chisquare_by_dof</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="s1">'nan'</span><span class="p">)</span>
|
||||
</span><span id="L-820"><a href="#L-820"><span class="linenos"> 820</span></a>
|
||||
</span><span id="L-821"><a href="#L-821"><span class="linenos"> 821</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">silent</span><span class="p">:</span>
|
||||
</span><span id="L-822"><a href="#L-822"><span class="linenos"> 822</span></a> <span class="nb">print</span><span class="p">(</span><span class="n">fit_result</span><span class="o">.</span><span class="n">message</span><span class="p">)</span>
|
||||
</span><span id="L-823"><a href="#L-823"><span class="linenos"> 823</span></a> <span class="nb">print</span><span class="p">(</span><span class="s1">'chisquare/d.o.f.:'</span><span class="p">,</span> <span class="n">output</span><span class="o">.</span><span class="n">chisquare_by_dof</span><span class="p">)</span>
|
||||
</span><span id="L-824"><a href="#L-824"><span class="linenos"> 824</span></a> <span class="nb">print</span><span class="p">(</span><span class="s1">'fit parameters'</span><span class="p">,</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">x</span><span class="p">)</span>
|
||||
</span><span id="L-825"><a href="#L-825"><span class="linenos"> 825</span></a>
|
||||
</span><span id="L-826"><a href="#L-826"><span class="linenos"> 826</span></a> <span class="k">def</span> <span class="nf">chisqfunc_compact</span><span class="p">(</span><span class="n">d</span><span class="p">):</span>
|
||||
</span><span id="L-827"><a href="#L-827"><span class="linenos"> 827</span></a> <span class="n">func_list</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">([[</span><span class="n">func</span><span class="p">[</span><span class="n">k</span><span class="p">]]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">k</span><span class="p">])</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">key_ls</span><span class="p">])</span>
|
||||
</span><span id="L-828"><a href="#L-828"><span class="linenos"> 828</span></a> <span class="n">model</span> <span class="o">=</span> <span class="n">anp</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">func_list</span><span class="p">[</span><span class="n">i</span><span class="p">](</span><span class="n">d</span><span class="p">[:</span><span class="n">n_parms</span><span class="p">],</span> <span class="n">x_all</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">x_all</span><span class="p">))])</span>
|
||||
</span><span id="L-829"><a href="#L-829"><span class="linenos"> 829</span></a> <span class="n">chisq</span> <span class="o">=</span> <span class="n">anp</span><span class="o">.</span><span class="n">sum</span><span class="p">(((</span><span class="n">d</span><span class="p">[</span><span class="n">n_parms</span><span class="p">:]</span> <span class="o">-</span> <span class="n">model</span><span class="p">)</span> <span class="o">/</span> <span class="n">dy_f</span><span class="p">)</span> <span class="o">**</span> <span class="mi">2</span><span class="p">)</span>
|
||||
</span><span id="L-830"><a href="#L-830"><span class="linenos"> 830</span></a> <span class="k">return</span> <span class="n">chisq</span>
|
||||
</span><span id="L-831"><a href="#L-831"><span class="linenos"> 831</span></a>
|
||||
</span><span id="L-832"><a href="#L-832"><span class="linenos"> 832</span></a> <span class="k">def</span> <span class="nf">prepare_hat_matrix</span><span class="p">():</span>
|
||||
</span><span id="L-833"><a href="#L-833"><span class="linenos"> 833</span></a> <span class="n">hat_vector</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
</span><span id="L-834"><a href="#L-834"><span class="linenos"> 834</span></a> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">key_ls</span><span class="p">:</span>
|
||||
</span><span id="L-835"><a href="#L-835"><span class="linenos"> 835</span></a> <span class="n">x_array</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">key</span><span class="p">])</span>
|
||||
</span><span id="L-836"><a href="#L-836"><span class="linenos"> 836</span></a> <span class="k">if</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">x_array</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">):</span>
|
||||
</span><span id="L-837"><a href="#L-837"><span class="linenos"> 837</span></a> <span class="n">hat_vector</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">jacobian</span><span class="p">(</span><span class="n">func</span><span class="p">[</span><span class="n">key</span><span class="p">])(</span><span class="n">fit_result</span><span class="o">.</span><span class="n">x</span><span class="p">,</span> <span class="n">x_array</span><span class="p">))</span>
|
||||
</span><span id="L-838"><a href="#L-838"><span class="linenos"> 838</span></a> <span class="n">hat_vector</span> <span class="o">=</span> <span class="p">[</span><span class="n">item</span> <span class="k">for</span> <span class="n">sublist</span> <span class="ow">in</span> <span class="n">hat_vector</span> <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">sublist</span><span class="p">]</span>
|
||||
</span><span id="L-839"><a href="#L-839"><span class="linenos"> 839</span></a> <span class="k">return</span> <span class="n">hat_vector</span>
|
||||
</span><span id="L-840"><a href="#L-840"><span class="linenos"> 840</span></a>
|
||||
</span><span id="L-841"><a href="#L-841"><span class="linenos"> 841</span></a> <span class="n">fitp</span> <span class="o">=</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">x</span>
|
||||
</span><span id="L-842"><a href="#L-842"><span class="linenos"> 842</span></a>
|
||||
</span><span id="L-843"><a href="#L-843"><span class="linenos"> 843</span></a> <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">any</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">dy_f</span><span class="p">)</span> <span class="o"><=</span> <span class="mf">0.0</span><span class="p">):</span>
|
||||
</span><span id="L-844"><a href="#L-844"><span class="linenos"> 844</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">'No y errors available, run the gamma method first.'</span><span class="p">)</span>
|
||||
</span><span id="L-845"><a href="#L-845"><span class="linenos"> 845</span></a>
|
||||
</span><span id="L-846"><a href="#L-846"><span class="linenos"> 846</span></a> <span class="k">try</span><span class="p">:</span>
|
||||
</span><span id="L-847"><a href="#L-847"><span class="linenos"> 847</span></a> <span class="n">hess</span> <span class="o">=</span> <span class="n">hessian</span><span class="p">(</span><span class="n">chisqfunc</span><span class="p">)(</span><span class="n">fitp</span><span class="p">)</span>
|
||||
</span><span id="L-848"><a href="#L-848"><span class="linenos"> 848</span></a> <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
|
||||
</span><span id="L-849"><a href="#L-849"><span class="linenos"> 849</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">"It is required to use autograd.numpy instead of numpy within fit functions, see the documentation for details."</span><span class="p">)</span> <span class="kn">from</span> <span class="bp">None</span>
|
||||
</span><span id="L-850"><a href="#L-850"><span class="linenos"> 850</span></a>
|
||||
</span><span id="L-851"><a href="#L-851"><span class="linenos"> 851</span></a> <span class="n">jac_jac_y</span> <span class="o">=</span> <span class="n">hessian</span><span class="p">(</span><span class="n">chisqfunc_compact</span><span class="p">)(</span><span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">((</span><span class="n">fitp</span><span class="p">,</span> <span class="n">y_f</span><span class="p">)))</span>
|
||||
</span><span id="L-813"><a href="#L-813"><span class="linenos"> 813</span></a> <span class="n">chisquare</span> <span class="o">=</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">fun</span>
|
||||
</span><span id="L-814"><a href="#L-814"><span class="linenos"> 814</span></a>
|
||||
</span><span id="L-815"><a href="#L-815"><span class="linenos"> 815</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="L-816"><a href="#L-816"><span class="linenos"> 816</span></a> <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'correlated_fit'</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
|
||||
</span><span id="L-817"><a href="#L-817"><span class="linenos"> 817</span></a> <span class="k">def</span> <span class="nf">chisqfunc_residuals_corr</span><span class="p">(</span><span class="n">p</span><span class="p">):</span>
|
||||
</span><span id="L-818"><a href="#L-818"><span class="linenos"> 818</span></a> <span class="n">model</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">([</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">func</span><span class="p">[</span><span class="n">key</span><span class="p">](</span><span class="n">p</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">key</span><span class="p">])))</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">key_ls</span><span class="p">])</span>
|
||||
</span><span id="L-819"><a href="#L-819"><span class="linenos"> 819</span></a> <span class="n">chisq</span> <span class="o">=</span> <span class="n">anp</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">chol_inv</span><span class="p">,</span> <span class="p">(</span><span class="n">y_f</span> <span class="o">-</span> <span class="n">model</span><span class="p">))</span>
|
||||
</span><span id="L-820"><a href="#L-820"><span class="linenos"> 820</span></a> <span class="k">return</span> <span class="n">chisq</span>
|
||||
</span><span id="L-821"><a href="#L-821"><span class="linenos"> 821</span></a>
|
||||
</span><span id="L-822"><a href="#L-822"><span class="linenos"> 822</span></a> <span class="k">def</span> <span class="nf">chisqfunc_residuals</span><span class="p">(</span><span class="n">p</span><span class="p">):</span>
|
||||
</span><span id="L-823"><a href="#L-823"><span class="linenos"> 823</span></a> <span class="n">model</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">([</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">func</span><span class="p">[</span><span class="n">key</span><span class="p">](</span><span class="n">p</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">key</span><span class="p">])))</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">key_ls</span><span class="p">])</span>
|
||||
</span><span id="L-824"><a href="#L-824"><span class="linenos"> 824</span></a> <span class="n">chisq</span> <span class="o">=</span> <span class="p">((</span><span class="n">y_f</span> <span class="o">-</span> <span class="n">model</span><span class="p">)</span> <span class="o">/</span> <span class="n">dy_f</span><span class="p">)</span>
|
||||
</span><span id="L-825"><a href="#L-825"><span class="linenos"> 825</span></a> <span class="k">return</span> <span class="n">chisq</span>
|
||||
</span><span id="L-826"><a href="#L-826"><span class="linenos"> 826</span></a>
|
||||
</span><span id="L-827"><a href="#L-827"><span class="linenos"> 827</span></a> <span class="k">if</span> <span class="s1">'tol'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
|
||||
</span><span id="L-828"><a href="#L-828"><span class="linenos"> 828</span></a> <span class="nb">print</span><span class="p">(</span><span class="s1">'tol cannot be set for Levenberg-Marquardt'</span><span class="p">)</span>
|
||||
</span><span id="L-829"><a href="#L-829"><span class="linenos"> 829</span></a>
|
||||
</span><span id="L-830"><a href="#L-830"><span class="linenos"> 830</span></a> <span class="n">fit_result</span> <span class="o">=</span> <span class="n">scipy</span><span class="o">.</span><span class="n">optimize</span><span class="o">.</span><span class="n">least_squares</span><span class="p">(</span><span class="n">chisqfunc_residuals</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="s1">'lm'</span><span class="p">,</span> <span class="n">ftol</span><span class="o">=</span><span class="mf">1e-15</span><span class="p">,</span> <span class="n">gtol</span><span class="o">=</span><span class="mf">1e-15</span><span class="p">,</span> <span class="n">xtol</span><span class="o">=</span><span class="mf">1e-15</span><span class="p">)</span>
|
||||
</span><span id="L-831"><a href="#L-831"><span class="linenos"> 831</span></a> <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'correlated_fit'</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
|
||||
</span><span id="L-832"><a href="#L-832"><span class="linenos"> 832</span></a> <span class="n">fit_result</span> <span class="o">=</span> <span class="n">scipy</span><span class="o">.</span><span class="n">optimize</span><span class="o">.</span><span class="n">least_squares</span><span class="p">(</span><span class="n">chisqfunc_residuals_corr</span><span class="p">,</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">x</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="s1">'lm'</span><span class="p">,</span> <span class="n">ftol</span><span class="o">=</span><span class="mf">1e-15</span><span class="p">,</span> <span class="n">gtol</span><span class="o">=</span><span class="mf">1e-15</span><span class="p">,</span> <span class="n">xtol</span><span class="o">=</span><span class="mf">1e-15</span><span class="p">)</span>
|
||||
</span><span id="L-833"><a href="#L-833"><span class="linenos"> 833</span></a>
|
||||
</span><span id="L-834"><a href="#L-834"><span class="linenos"> 834</span></a> <span class="n">chisquare</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">fit_result</span><span class="o">.</span><span class="n">fun</span> <span class="o">**</span> <span class="mi">2</span><span class="p">)</span>
|
||||
</span><span id="L-835"><a href="#L-835"><span class="linenos"> 835</span></a> <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'correlated_fit'</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
|
||||
</span><span id="L-836"><a href="#L-836"><span class="linenos"> 836</span></a> <span class="k">assert</span> <span class="n">np</span><span class="o">.</span><span class="n">isclose</span><span class="p">(</span><span class="n">chisquare</span><span class="p">,</span> <span class="n">chisqfunc_corr</span><span class="p">(</span><span class="n">fit_result</span><span class="o">.</span><span class="n">x</span><span class="p">),</span> <span class="n">atol</span><span class="o">=</span><span class="mf">1e-14</span><span class="p">)</span>
|
||||
</span><span id="L-837"><a href="#L-837"><span class="linenos"> 837</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="L-838"><a href="#L-838"><span class="linenos"> 838</span></a> <span class="k">assert</span> <span class="n">np</span><span class="o">.</span><span class="n">isclose</span><span class="p">(</span><span class="n">chisquare</span><span class="p">,</span> <span class="n">chisqfunc</span><span class="p">(</span><span class="n">fit_result</span><span class="o">.</span><span class="n">x</span><span class="p">),</span> <span class="n">atol</span><span class="o">=</span><span class="mf">1e-14</span><span class="p">)</span>
|
||||
</span><span id="L-839"><a href="#L-839"><span class="linenos"> 839</span></a>
|
||||
</span><span id="L-840"><a href="#L-840"><span class="linenos"> 840</span></a> <span class="n">output</span><span class="o">.</span><span class="n">iterations</span> <span class="o">=</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">nfev</span>
|
||||
</span><span id="L-841"><a href="#L-841"><span class="linenos"> 841</span></a>
|
||||
</span><span id="L-842"><a href="#L-842"><span class="linenos"> 842</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">success</span><span class="p">:</span>
|
||||
</span><span id="L-843"><a href="#L-843"><span class="linenos"> 843</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">'The minimization procedure did not converge.'</span><span class="p">)</span>
|
||||
</span><span id="L-844"><a href="#L-844"><span class="linenos"> 844</span></a>
|
||||
</span><span id="L-845"><a href="#L-845"><span class="linenos"> 845</span></a> <span class="k">if</span> <span class="n">x_all</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">n_parms</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
||||
</span><span id="L-846"><a href="#L-846"><span class="linenos"> 846</span></a> <span class="n">output</span><span class="o">.</span><span class="n">chisquare</span> <span class="o">=</span> <span class="n">chisquare</span>
|
||||
</span><span id="L-847"><a href="#L-847"><span class="linenos"> 847</span></a> <span class="n">output</span><span class="o">.</span><span class="n">dof</span> <span class="o">=</span> <span class="n">x_all</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">n_parms</span>
|
||||
</span><span id="L-848"><a href="#L-848"><span class="linenos"> 848</span></a> <span class="n">output</span><span class="o">.</span><span class="n">chisquare_by_dof</span> <span class="o">=</span> <span class="n">output</span><span class="o">.</span><span class="n">chisquare</span> <span class="o">/</span> <span class="n">output</span><span class="o">.</span><span class="n">dof</span>
|
||||
</span><span id="L-849"><a href="#L-849"><span class="linenos"> 849</span></a> <span class="n">output</span><span class="o">.</span><span class="n">p_value</span> <span class="o">=</span> <span class="mi">1</span> <span class="o">-</span> <span class="n">scipy</span><span class="o">.</span><span class="n">stats</span><span class="o">.</span><span class="n">chi2</span><span class="o">.</span><span class="n">cdf</span><span class="p">(</span><span class="n">output</span><span class="o">.</span><span class="n">chisquare</span><span class="p">,</span> <span class="n">output</span><span class="o">.</span><span class="n">dof</span><span class="p">)</span>
|
||||
</span><span id="L-850"><a href="#L-850"><span class="linenos"> 850</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="L-851"><a href="#L-851"><span class="linenos"> 851</span></a> <span class="n">output</span><span class="o">.</span><span class="n">chisquare_by_dof</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="s1">'nan'</span><span class="p">)</span>
|
||||
</span><span id="L-852"><a href="#L-852"><span class="linenos"> 852</span></a>
|
||||
</span><span id="L-853"><a href="#L-853"><span class="linenos"> 853</span></a> <span class="c1"># Compute hess^{-1} @ jac_jac_y[:n_parms + m, n_parms + m:] using LAPACK dgesv</span>
|
||||
</span><span id="L-854"><a href="#L-854"><span class="linenos"> 854</span></a> <span class="k">try</span><span class="p">:</span>
|
||||
</span><span id="L-855"><a href="#L-855"><span class="linenos"> 855</span></a> <span class="n">deriv_y</span> <span class="o">=</span> <span class="o">-</span><span class="n">scipy</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">solve</span><span class="p">(</span><span class="n">hess</span><span class="p">,</span> <span class="n">jac_jac_y</span><span class="p">[:</span><span class="n">n_parms</span><span class="p">,</span> <span class="n">n_parms</span><span class="p">:])</span>
|
||||
</span><span id="L-856"><a href="#L-856"><span class="linenos"> 856</span></a> <span class="k">except</span> <span class="n">np</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">LinAlgError</span><span class="p">:</span>
|
||||
</span><span id="L-857"><a href="#L-857"><span class="linenos"> 857</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">"Cannot invert hessian matrix."</span><span class="p">)</span>
|
||||
</span><span id="L-853"><a href="#L-853"><span class="linenos"> 853</span></a> <span class="n">output</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">message</span>
|
||||
</span><span id="L-854"><a href="#L-854"><span class="linenos"> 854</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">silent</span><span class="p">:</span>
|
||||
</span><span id="L-855"><a href="#L-855"><span class="linenos"> 855</span></a> <span class="nb">print</span><span class="p">(</span><span class="n">fit_result</span><span class="o">.</span><span class="n">message</span><span class="p">)</span>
|
||||
</span><span id="L-856"><a href="#L-856"><span class="linenos"> 856</span></a> <span class="nb">print</span><span class="p">(</span><span class="s1">'chisquare/d.o.f.:'</span><span class="p">,</span> <span class="n">output</span><span class="o">.</span><span class="n">chisquare_by_dof</span><span class="p">)</span>
|
||||
</span><span id="L-857"><a href="#L-857"><span class="linenos"> 857</span></a> <span class="nb">print</span><span class="p">(</span><span class="s1">'fit parameters'</span><span class="p">,</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">x</span><span class="p">)</span>
|
||||
</span><span id="L-858"><a href="#L-858"><span class="linenos"> 858</span></a>
|
||||
</span><span id="L-859"><a href="#L-859"><span class="linenos"> 859</span></a> <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'expected_chisquare'</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
|
||||
</span><span id="L-860"><a href="#L-860"><span class="linenos"> 860</span></a> <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'correlated_fit'</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">True</span><span class="p">:</span>
|
||||
</span><span id="L-861"><a href="#L-861"><span class="linenos"> 861</span></a> <span class="n">W</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="mi">1</span> <span class="o">/</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">dy_f</span><span class="p">))</span>
|
||||
</span><span id="L-862"><a href="#L-862"><span class="linenos"> 862</span></a> <span class="n">cov</span> <span class="o">=</span> <span class="n">covariance</span><span class="p">(</span><span class="n">y_all</span><span class="p">)</span>
|
||||
</span><span id="L-863"><a href="#L-863"><span class="linenos"> 863</span></a> <span class="n">hat_vector</span> <span class="o">=</span> <span class="n">prepare_hat_matrix</span><span class="p">()</span>
|
||||
</span><span id="L-864"><a href="#L-864"><span class="linenos"> 864</span></a> <span class="n">A</span> <span class="o">=</span> <span class="n">W</span> <span class="o">@</span> <span class="n">hat_vector</span> <span class="c1"># hat_vector = 'jacobian(func)(fit_result.x, x)'</span>
|
||||
</span><span id="L-865"><a href="#L-865"><span class="linenos"> 865</span></a> <span class="n">P_phi</span> <span class="o">=</span> <span class="n">A</span> <span class="o">@</span> <span class="n">np</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">pinv</span><span class="p">(</span><span class="n">A</span><span class="o">.</span><span class="n">T</span> <span class="o">@</span> <span class="n">A</span><span class="p">)</span> <span class="o">@</span> <span class="n">A</span><span class="o">.</span><span class="n">T</span>
|
||||
</span><span id="L-866"><a href="#L-866"><span class="linenos"> 866</span></a> <span class="n">expected_chisquare</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">trace</span><span class="p">((</span><span class="n">np</span><span class="o">.</span><span class="n">identity</span><span class="p">(</span><span class="n">x_all</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span> <span class="o">-</span> <span class="n">P_phi</span><span class="p">)</span> <span class="o">@</span> <span class="n">W</span> <span class="o">@</span> <span class="n">cov</span> <span class="o">@</span> <span class="n">W</span><span class="p">)</span>
|
||||
</span><span id="L-867"><a href="#L-867"><span class="linenos"> 867</span></a> <span class="n">output</span><span class="o">.</span><span class="n">chisquare_by_expected_chisquare</span> <span class="o">=</span> <span class="n">output</span><span class="o">.</span><span class="n">chisquare</span> <span class="o">/</span> <span class="n">expected_chisquare</span>
|
||||
</span><span id="L-868"><a href="#L-868"><span class="linenos"> 868</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">silent</span><span class="p">:</span>
|
||||
</span><span id="L-869"><a href="#L-869"><span class="linenos"> 869</span></a> <span class="nb">print</span><span class="p">(</span><span class="s1">'chisquare/expected_chisquare:'</span><span class="p">,</span> <span class="n">output</span><span class="o">.</span><span class="n">chisquare_by_expected_chisquare</span><span class="p">)</span>
|
||||
</span><span id="L-870"><a href="#L-870"><span class="linenos"> 870</span></a>
|
||||
</span><span id="L-871"><a href="#L-871"><span class="linenos"> 871</span></a> <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
</span><span id="L-872"><a href="#L-872"><span class="linenos"> 872</span></a> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">n_parms</span><span class="p">):</span>
|
||||
</span><span id="L-873"><a href="#L-873"><span class="linenos"> 873</span></a> <span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x_all</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="p">(</span><span class="n">x_all</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">np</span><span class="o">.</span><span class="n">finfo</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span><span class="o">.</span><span class="n">eps</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="n">y_all</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">+</span> <span class="n">np</span><span class="o">.</span><span class="n">finfo</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span><span class="o">.</span><span class="n">eps</span><span class="p">)</span> <span class="o">*</span> <span class="n">fitp</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="nb">list</span><span class="p">(</span><span class="n">y_all</span><span class="p">),</span> <span class="n">man_grad</span><span class="o">=</span><span class="nb">list</span><span class="p">(</span><span class="n">deriv_y</span><span class="p">[</span><span class="n">i</span><span class="p">])))</span>
|
||||
</span><span id="L-874"><a href="#L-874"><span class="linenos"> 874</span></a>
|
||||
</span><span id="L-875"><a href="#L-875"><span class="linenos"> 875</span></a> <span class="n">output</span><span class="o">.</span><span class="n">fit_parameters</span> <span class="o">=</span> <span class="n">result</span>
|
||||
</span><span id="L-876"><a href="#L-876"><span class="linenos"> 876</span></a>
|
||||
</span><span id="L-877"><a href="#L-877"><span class="linenos"> 877</span></a> <span class="k">return</span> <span class="n">output</span>
|
||||
</span><span id="L-878"><a href="#L-878"><span class="linenos"> 878</span></a>
|
||||
</span><span id="L-859"><a href="#L-859"><span class="linenos"> 859</span></a> <span class="k">def</span> <span class="nf">prepare_hat_matrix</span><span class="p">():</span>
|
||||
</span><span id="L-860"><a href="#L-860"><span class="linenos"> 860</span></a> <span class="n">hat_vector</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
</span><span id="L-861"><a href="#L-861"><span class="linenos"> 861</span></a> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">key_ls</span><span class="p">:</span>
|
||||
</span><span id="L-862"><a href="#L-862"><span class="linenos"> 862</span></a> <span class="n">x_array</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">key</span><span class="p">])</span>
|
||||
</span><span id="L-863"><a href="#L-863"><span class="linenos"> 863</span></a> <span class="k">if</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">x_array</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">):</span>
|
||||
</span><span id="L-864"><a href="#L-864"><span class="linenos"> 864</span></a> <span class="n">hat_vector</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">jacobian</span><span class="p">(</span><span class="n">func</span><span class="p">[</span><span class="n">key</span><span class="p">])(</span><span class="n">fit_result</span><span class="o">.</span><span class="n">x</span><span class="p">,</span> <span class="n">x_array</span><span class="p">))</span>
|
||||
</span><span id="L-865"><a href="#L-865"><span class="linenos"> 865</span></a> <span class="n">hat_vector</span> <span class="o">=</span> <span class="p">[</span><span class="n">item</span> <span class="k">for</span> <span class="n">sublist</span> <span class="ow">in</span> <span class="n">hat_vector</span> <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">sublist</span><span class="p">]</span>
|
||||
</span><span id="L-866"><a href="#L-866"><span class="linenos"> 866</span></a> <span class="k">return</span> <span class="n">hat_vector</span>
|
||||
</span><span id="L-867"><a href="#L-867"><span class="linenos"> 867</span></a>
|
||||
</span><span id="L-868"><a href="#L-868"><span class="linenos"> 868</span></a> <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'expected_chisquare'</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
|
||||
</span><span id="L-869"><a href="#L-869"><span class="linenos"> 869</span></a> <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'correlated_fit'</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">True</span><span class="p">:</span>
|
||||
</span><span id="L-870"><a href="#L-870"><span class="linenos"> 870</span></a> <span class="n">W</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="mi">1</span> <span class="o">/</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">dy_f</span><span class="p">))</span>
|
||||
</span><span id="L-871"><a href="#L-871"><span class="linenos"> 871</span></a> <span class="n">cov</span> <span class="o">=</span> <span class="n">covariance</span><span class="p">(</span><span class="n">y_all</span><span class="p">)</span>
|
||||
</span><span id="L-872"><a href="#L-872"><span class="linenos"> 872</span></a> <span class="n">hat_vector</span> <span class="o">=</span> <span class="n">prepare_hat_matrix</span><span class="p">()</span>
|
||||
</span><span id="L-873"><a href="#L-873"><span class="linenos"> 873</span></a> <span class="n">A</span> <span class="o">=</span> <span class="n">W</span> <span class="o">@</span> <span class="n">hat_vector</span> <span class="c1"># hat_vector = 'jacobian(func)(fit_result.x, x)'</span>
|
||||
</span><span id="L-874"><a href="#L-874"><span class="linenos"> 874</span></a> <span class="n">P_phi</span> <span class="o">=</span> <span class="n">A</span> <span class="o">@</span> <span class="n">np</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">pinv</span><span class="p">(</span><span class="n">A</span><span class="o">.</span><span class="n">T</span> <span class="o">@</span> <span class="n">A</span><span class="p">)</span> <span class="o">@</span> <span class="n">A</span><span class="o">.</span><span class="n">T</span>
|
||||
</span><span id="L-875"><a href="#L-875"><span class="linenos"> 875</span></a> <span class="n">expected_chisquare</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">trace</span><span class="p">((</span><span class="n">np</span><span class="o">.</span><span class="n">identity</span><span class="p">(</span><span class="n">x_all</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span> <span class="o">-</span> <span class="n">P_phi</span><span class="p">)</span> <span class="o">@</span> <span class="n">W</span> <span class="o">@</span> <span class="n">cov</span> <span class="o">@</span> <span class="n">W</span><span class="p">)</span>
|
||||
</span><span id="L-876"><a href="#L-876"><span class="linenos"> 876</span></a> <span class="n">output</span><span class="o">.</span><span class="n">chisquare_by_expected_chisquare</span> <span class="o">=</span> <span class="n">output</span><span class="o">.</span><span class="n">chisquare</span> <span class="o">/</span> <span class="n">expected_chisquare</span>
|
||||
</span><span id="L-877"><a href="#L-877"><span class="linenos"> 877</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">silent</span><span class="p">:</span>
|
||||
</span><span id="L-878"><a href="#L-878"><span class="linenos"> 878</span></a> <span class="nb">print</span><span class="p">(</span><span class="s1">'chisquare/expected_chisquare:'</span><span class="p">,</span> <span class="n">output</span><span class="o">.</span><span class="n">chisquare_by_expected_chisquare</span><span class="p">)</span>
|
||||
</span><span id="L-879"><a href="#L-879"><span class="linenos"> 879</span></a>
|
||||
</span><span id="L-880"><a href="#L-880"><span class="linenos"> 880</span></a><span class="k">def</span> <span class="nf">fit_lin</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
</span><span id="L-881"><a href="#L-881"><span class="linenos"> 881</span></a><span class="w"> </span><span class="sd">"""Performs a linear fit to y = n + m * x and returns two Obs n, m.</span>
|
||||
</span><span id="L-882"><a href="#L-882"><span class="linenos"> 882</span></a>
|
||||
</span><span id="L-883"><a href="#L-883"><span class="linenos"> 883</span></a><span class="sd"> Parameters</span>
|
||||
</span><span id="L-884"><a href="#L-884"><span class="linenos"> 884</span></a><span class="sd"> ----------</span>
|
||||
</span><span id="L-885"><a href="#L-885"><span class="linenos"> 885</span></a><span class="sd"> x : list</span>
|
||||
</span><span id="L-886"><a href="#L-886"><span class="linenos"> 886</span></a><span class="sd"> Can either be a list of floats in which case no xerror is assumed, or</span>
|
||||
</span><span id="L-887"><a href="#L-887"><span class="linenos"> 887</span></a><span class="sd"> a list of Obs, where the dvalues of the Obs are used as xerror for the fit.</span>
|
||||
</span><span id="L-888"><a href="#L-888"><span class="linenos"> 888</span></a><span class="sd"> y : list</span>
|
||||
</span><span id="L-889"><a href="#L-889"><span class="linenos"> 889</span></a><span class="sd"> List of Obs, the dvalues of the Obs are used as yerror for the fit.</span>
|
||||
</span><span id="L-890"><a href="#L-890"><span class="linenos"> 890</span></a>
|
||||
</span><span id="L-891"><a href="#L-891"><span class="linenos"> 891</span></a><span class="sd"> Returns</span>
|
||||
</span><span id="L-892"><a href="#L-892"><span class="linenos"> 892</span></a><span class="sd"> -------</span>
|
||||
</span><span id="L-893"><a href="#L-893"><span class="linenos"> 893</span></a><span class="sd"> fit_parameters : list[Obs]</span>
|
||||
</span><span id="L-894"><a href="#L-894"><span class="linenos"> 894</span></a><span class="sd"> LIist of fitted observables.</span>
|
||||
</span><span id="L-895"><a href="#L-895"><span class="linenos"> 895</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-896"><a href="#L-896"><span class="linenos"> 896</span></a>
|
||||
</span><span id="L-897"><a href="#L-897"><span class="linenos"> 897</span></a> <span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
|
||||
</span><span id="L-898"><a href="#L-898"><span class="linenos"> 898</span></a> <span class="n">y</span> <span class="o">=</span> <span class="n">a</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">a</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="n">x</span>
|
||||
</span><span id="L-899"><a href="#L-899"><span class="linenos"> 899</span></a> <span class="k">return</span> <span class="n">y</span>
|
||||
</span><span id="L-900"><a href="#L-900"><span class="linenos"> 900</span></a>
|
||||
</span><span id="L-901"><a href="#L-901"><span class="linenos"> 901</span></a> <span class="k">if</span> <span class="nb">all</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">Obs</span><span class="p">)</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">x</span><span class="p">):</span>
|
||||
</span><span id="L-902"><a href="#L-902"><span class="linenos"> 902</span></a> <span class="n">out</span> <span class="o">=</span> <span class="n">total_least_squares</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||||
</span><span id="L-903"><a href="#L-903"><span class="linenos"> 903</span></a> <span class="k">return</span> <span class="n">out</span><span class="o">.</span><span class="n">fit_parameters</span>
|
||||
</span><span id="L-904"><a href="#L-904"><span class="linenos"> 904</span></a> <span class="k">elif</span> <span class="nb">all</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="nb">float</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="nb">int</span><span class="p">)</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">x</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">):</span>
|
||||
</span><span id="L-905"><a href="#L-905"><span class="linenos"> 905</span></a> <span class="n">out</span> <span class="o">=</span> <span class="n">least_squares</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||||
</span><span id="L-906"><a href="#L-906"><span class="linenos"> 906</span></a> <span class="k">return</span> <span class="n">out</span><span class="o">.</span><span class="n">fit_parameters</span>
|
||||
</span><span id="L-907"><a href="#L-907"><span class="linenos"> 907</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="L-908"><a href="#L-908"><span class="linenos"> 908</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">'Unsupported types for x'</span><span class="p">)</span>
|
||||
</span><span id="L-909"><a href="#L-909"><span class="linenos"> 909</span></a>
|
||||
</span><span id="L-910"><a href="#L-910"><span class="linenos"> 910</span></a>
|
||||
</span><span id="L-911"><a href="#L-911"><span class="linenos"> 911</span></a><span class="k">def</span> <span class="nf">qqplot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">o_y</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">p</span><span class="p">):</span>
|
||||
</span><span id="L-912"><a href="#L-912"><span class="linenos"> 912</span></a><span class="w"> </span><span class="sd">"""Generates a quantile-quantile plot of the fit result which can be used to</span>
|
||||
</span><span id="L-913"><a href="#L-913"><span class="linenos"> 913</span></a><span class="sd"> check if the residuals of the fit are gaussian distributed.</span>
|
||||
</span><span id="L-914"><a href="#L-914"><span class="linenos"> 914</span></a>
|
||||
</span><span id="L-915"><a href="#L-915"><span class="linenos"> 915</span></a><span class="sd"> Returns</span>
|
||||
</span><span id="L-916"><a href="#L-916"><span class="linenos"> 916</span></a><span class="sd"> -------</span>
|
||||
</span><span id="L-917"><a href="#L-917"><span class="linenos"> 917</span></a><span class="sd"> None</span>
|
||||
</span><span id="L-918"><a href="#L-918"><span class="linenos"> 918</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-919"><a href="#L-919"><span class="linenos"> 919</span></a>
|
||||
</span><span id="L-920"><a href="#L-920"><span class="linenos"> 920</span></a> <span class="n">residuals</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
</span><span id="L-921"><a href="#L-921"><span class="linenos"> 921</span></a> <span class="k">for</span> <span class="n">i_x</span><span class="p">,</span> <span class="n">i_y</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">o_y</span><span class="p">):</span>
|
||||
</span><span id="L-922"><a href="#L-922"><span class="linenos"> 922</span></a> <span class="n">residuals</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">i_y</span> <span class="o">-</span> <span class="n">func</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">i_x</span><span class="p">))</span> <span class="o">/</span> <span class="n">i_y</span><span class="o">.</span><span class="n">dvalue</span><span class="p">)</span>
|
||||
</span><span id="L-923"><a href="#L-923"><span class="linenos"> 923</span></a> <span class="n">residuals</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">residuals</span><span class="p">)</span>
|
||||
</span><span id="L-924"><a href="#L-924"><span class="linenos"> 924</span></a> <span class="n">my_y</span> <span class="o">=</span> <span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">residuals</span><span class="p">]</span>
|
||||
</span><span id="L-925"><a href="#L-925"><span class="linenos"> 925</span></a> <span class="n">probplot</span> <span class="o">=</span> <span class="n">scipy</span><span class="o">.</span><span class="n">stats</span><span class="o">.</span><span class="n">probplot</span><span class="p">(</span><span class="n">my_y</span><span class="p">)</span>
|
||||
</span><span id="L-926"><a href="#L-926"><span class="linenos"> 926</span></a> <span class="n">my_x</span> <span class="o">=</span> <span class="n">probplot</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||||
</span><span id="L-927"><a href="#L-927"><span class="linenos"> 927</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mi">8</span> <span class="o">/</span> <span class="mf">1.618</span><span class="p">))</span>
|
||||
</span><span id="L-928"><a href="#L-928"><span class="linenos"> 928</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">errorbar</span><span class="p">(</span><span class="n">my_x</span><span class="p">,</span> <span class="n">my_y</span><span class="p">,</span> <span class="n">fmt</span><span class="o">=</span><span class="s1">'o'</span><span class="p">)</span>
|
||||
</span><span id="L-929"><a href="#L-929"><span class="linenos"> 929</span></a> <span class="n">fit_start</span> <span class="o">=</span> <span class="n">my_x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
</span><span id="L-930"><a href="#L-930"><span class="linenos"> 930</span></a> <span class="n">fit_stop</span> <span class="o">=</span> <span class="n">my_x</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
||||
</span><span id="L-931"><a href="#L-931"><span class="linenos"> 931</span></a> <span class="n">samples</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">fit_start</span><span class="p">,</span> <span class="n">fit_stop</span><span class="p">,</span> <span class="mf">0.01</span><span class="p">)</span>
|
||||
</span><span id="L-932"><a href="#L-932"><span class="linenos"> 932</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">samples</span><span class="p">,</span> <span class="n">samples</span><span class="p">,</span> <span class="s1">'k--'</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">11</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'Standard normal distribution'</span><span class="p">)</span>
|
||||
</span><span id="L-933"><a href="#L-933"><span class="linenos"> 933</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">samples</span><span class="p">,</span> <span class="n">probplot</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="n">samples</span> <span class="o">+</span> <span class="n">probplot</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">],</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'Least squares fit, r='</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">around</span><span class="p">(</span><span class="n">probplot</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">2</span><span class="p">],</span> <span class="mi">3</span><span class="p">)),</span> <span class="n">marker</span><span class="o">=</span><span class="s1">''</span><span class="p">,</span> <span class="n">ls</span><span class="o">=</span><span class="s1">'-'</span><span class="p">)</span>
|
||||
</span><span id="L-934"><a href="#L-934"><span class="linenos"> 934</span></a>
|
||||
</span><span id="L-935"><a href="#L-935"><span class="linenos"> 935</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'Theoretical quantiles'</span><span class="p">)</span>
|
||||
</span><span id="L-936"><a href="#L-936"><span class="linenos"> 936</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'Ordered Values'</span><span class="p">)</span>
|
||||
</span><span id="L-937"><a href="#L-937"><span class="linenos"> 937</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">()</span>
|
||||
</span><span id="L-938"><a href="#L-938"><span class="linenos"> 938</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">draw</span><span class="p">()</span>
|
||||
</span><span id="L-939"><a href="#L-939"><span class="linenos"> 939</span></a>
|
||||
</span><span id="L-940"><a href="#L-940"><span class="linenos"> 940</span></a>
|
||||
</span><span id="L-941"><a href="#L-941"><span class="linenos"> 941</span></a><span class="k">def</span> <span class="nf">residual_plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">fit_res</span><span class="p">):</span>
|
||||
</span><span id="L-942"><a href="#L-942"><span class="linenos"> 942</span></a><span class="w"> </span><span class="sd">"""Generates a plot which compares the fit to the data and displays the corresponding residuals</span>
|
||||
</span><span id="L-880"><a href="#L-880"><span class="linenos"> 880</span></a> <span class="n">fitp</span> <span class="o">=</span> <span class="n">fit_result</span><span class="o">.</span><span class="n">x</span>
|
||||
</span><span id="L-881"><a href="#L-881"><span class="linenos"> 881</span></a> <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">any</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">dy_f</span><span class="p">)</span> <span class="o"><=</span> <span class="mf">0.0</span><span class="p">):</span>
|
||||
</span><span id="L-882"><a href="#L-882"><span class="linenos"> 882</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">'No y errors available, run the gamma method first.'</span><span class="p">)</span>
|
||||
</span><span id="L-883"><a href="#L-883"><span class="linenos"> 883</span></a>
|
||||
</span><span id="L-884"><a href="#L-884"><span class="linenos"> 884</span></a> <span class="k">try</span><span class="p">:</span>
|
||||
</span><span id="L-885"><a href="#L-885"><span class="linenos"> 885</span></a> <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'correlated_fit'</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
|
||||
</span><span id="L-886"><a href="#L-886"><span class="linenos"> 886</span></a> <span class="n">hess</span> <span class="o">=</span> <span class="n">hessian</span><span class="p">(</span><span class="n">chisqfunc_corr</span><span class="p">)(</span><span class="n">fitp</span><span class="p">)</span>
|
||||
</span><span id="L-887"><a href="#L-887"><span class="linenos"> 887</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="L-888"><a href="#L-888"><span class="linenos"> 888</span></a> <span class="n">hess</span> <span class="o">=</span> <span class="n">hessian</span><span class="p">(</span><span class="n">chisqfunc</span><span class="p">)(</span><span class="n">fitp</span><span class="p">)</span>
|
||||
</span><span id="L-889"><a href="#L-889"><span class="linenos"> 889</span></a> <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
|
||||
</span><span id="L-890"><a href="#L-890"><span class="linenos"> 890</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">"It is required to use autograd.numpy instead of numpy within fit functions, see the documentation for details."</span><span class="p">)</span> <span class="kn">from</span> <span class="bp">None</span>
|
||||
</span><span id="L-891"><a href="#L-891"><span class="linenos"> 891</span></a>
|
||||
</span><span id="L-892"><a href="#L-892"><span class="linenos"> 892</span></a> <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'correlated_fit'</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
|
||||
</span><span id="L-893"><a href="#L-893"><span class="linenos"> 893</span></a> <span class="k">def</span> <span class="nf">chisqfunc_compact</span><span class="p">(</span><span class="n">d</span><span class="p">):</span>
|
||||
</span><span id="L-894"><a href="#L-894"><span class="linenos"> 894</span></a> <span class="n">func_list</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">([[</span><span class="n">func</span><span class="p">[</span><span class="n">k</span><span class="p">]]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">k</span><span class="p">])</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">key_ls</span><span class="p">])</span>
|
||||
</span><span id="L-895"><a href="#L-895"><span class="linenos"> 895</span></a> <span class="n">model</span> <span class="o">=</span> <span class="n">anp</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">func_list</span><span class="p">[</span><span class="n">i</span><span class="p">](</span><span class="n">d</span><span class="p">[:</span><span class="n">n_parms</span><span class="p">],</span> <span class="n">x_all</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">x_all</span><span class="p">))])</span>
|
||||
</span><span id="L-896"><a href="#L-896"><span class="linenos"> 896</span></a> <span class="n">chisq</span> <span class="o">=</span> <span class="n">anp</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">anp</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">chol_inv</span><span class="p">,</span> <span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="n">n_parms</span><span class="p">:]</span> <span class="o">-</span> <span class="n">model</span><span class="p">))</span> <span class="o">**</span> <span class="mi">2</span><span class="p">)</span>
|
||||
</span><span id="L-897"><a href="#L-897"><span class="linenos"> 897</span></a> <span class="k">return</span> <span class="n">chisq</span>
|
||||
</span><span id="L-898"><a href="#L-898"><span class="linenos"> 898</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="L-899"><a href="#L-899"><span class="linenos"> 899</span></a> <span class="k">def</span> <span class="nf">chisqfunc_compact</span><span class="p">(</span><span class="n">d</span><span class="p">):</span>
|
||||
</span><span id="L-900"><a href="#L-900"><span class="linenos"> 900</span></a> <span class="n">func_list</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">([[</span><span class="n">func</span><span class="p">[</span><span class="n">k</span><span class="p">]]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">k</span><span class="p">])</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">key_ls</span><span class="p">])</span>
|
||||
</span><span id="L-901"><a href="#L-901"><span class="linenos"> 901</span></a> <span class="n">model</span> <span class="o">=</span> <span class="n">anp</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">func_list</span><span class="p">[</span><span class="n">i</span><span class="p">](</span><span class="n">d</span><span class="p">[:</span><span class="n">n_parms</span><span class="p">],</span> <span class="n">x_all</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">x_all</span><span class="p">))])</span>
|
||||
</span><span id="L-902"><a href="#L-902"><span class="linenos"> 902</span></a> <span class="n">chisq</span> <span class="o">=</span> <span class="n">anp</span><span class="o">.</span><span class="n">sum</span><span class="p">(((</span><span class="n">d</span><span class="p">[</span><span class="n">n_parms</span><span class="p">:]</span> <span class="o">-</span> <span class="n">model</span><span class="p">)</span> <span class="o">/</span> <span class="n">dy_f</span><span class="p">)</span> <span class="o">**</span> <span class="mi">2</span><span class="p">)</span>
|
||||
</span><span id="L-903"><a href="#L-903"><span class="linenos"> 903</span></a> <span class="k">return</span> <span class="n">chisq</span>
|
||||
</span><span id="L-904"><a href="#L-904"><span class="linenos"> 904</span></a>
|
||||
</span><span id="L-905"><a href="#L-905"><span class="linenos"> 905</span></a> <span class="n">jac_jac_y</span> <span class="o">=</span> <span class="n">hessian</span><span class="p">(</span><span class="n">chisqfunc_compact</span><span class="p">)(</span><span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">((</span><span class="n">fitp</span><span class="p">,</span> <span class="n">y_f</span><span class="p">)))</span>
|
||||
</span><span id="L-906"><a href="#L-906"><span class="linenos"> 906</span></a>
|
||||
</span><span id="L-907"><a href="#L-907"><span class="linenos"> 907</span></a> <span class="c1"># Compute hess^{-1} @ jac_jac_y[:n_parms + m, n_parms + m:] using LAPACK dgesv</span>
|
||||
</span><span id="L-908"><a href="#L-908"><span class="linenos"> 908</span></a> <span class="k">try</span><span class="p">:</span>
|
||||
</span><span id="L-909"><a href="#L-909"><span class="linenos"> 909</span></a> <span class="n">deriv_y</span> <span class="o">=</span> <span class="o">-</span><span class="n">scipy</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">solve</span><span class="p">(</span><span class="n">hess</span><span class="p">,</span> <span class="n">jac_jac_y</span><span class="p">[:</span><span class="n">n_parms</span><span class="p">,</span> <span class="n">n_parms</span><span class="p">:])</span>
|
||||
</span><span id="L-910"><a href="#L-910"><span class="linenos"> 910</span></a> <span class="k">except</span> <span class="n">np</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">LinAlgError</span><span class="p">:</span>
|
||||
</span><span id="L-911"><a href="#L-911"><span class="linenos"> 911</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">"Cannot invert hessian matrix."</span><span class="p">)</span>
|
||||
</span><span id="L-912"><a href="#L-912"><span class="linenos"> 912</span></a>
|
||||
</span><span id="L-913"><a href="#L-913"><span class="linenos"> 913</span></a> <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
</span><span id="L-914"><a href="#L-914"><span class="linenos"> 914</span></a> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">n_parms</span><span class="p">):</span>
|
||||
</span><span id="L-915"><a href="#L-915"><span class="linenos"> 915</span></a> <span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">derived_observable</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x_all</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="p">(</span><span class="n">x_all</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">np</span><span class="o">.</span><span class="n">finfo</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span><span class="o">.</span><span class="n">eps</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="n">y_all</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">+</span> <span class="n">np</span><span class="o">.</span><span class="n">finfo</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span><span class="o">.</span><span class="n">eps</span><span class="p">)</span> <span class="o">*</span> <span class="n">fitp</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="nb">list</span><span class="p">(</span><span class="n">y_all</span><span class="p">),</span> <span class="n">man_grad</span><span class="o">=</span><span class="nb">list</span><span class="p">(</span><span class="n">deriv_y</span><span class="p">[</span><span class="n">i</span><span class="p">])))</span>
|
||||
</span><span id="L-916"><a href="#L-916"><span class="linenos"> 916</span></a>
|
||||
</span><span id="L-917"><a href="#L-917"><span class="linenos"> 917</span></a> <span class="n">output</span><span class="o">.</span><span class="n">fit_parameters</span> <span class="o">=</span> <span class="n">result</span>
|
||||
</span><span id="L-918"><a href="#L-918"><span class="linenos"> 918</span></a>
|
||||
</span><span id="L-919"><a href="#L-919"><span class="linenos"> 919</span></a> <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'correlated_fit'</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
|
||||
</span><span id="L-920"><a href="#L-920"><span class="linenos"> 920</span></a> <span class="n">n_cov</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">vectorize</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x_all</span><span class="p">:</span> <span class="n">x_all</span><span class="o">.</span><span class="n">N</span><span class="p">)(</span><span class="n">y_all</span><span class="p">))</span>
|
||||
</span><span id="L-921"><a href="#L-921"><span class="linenos"> 921</span></a> <span class="n">output</span><span class="o">.</span><span class="n">t2_p_value</span> <span class="o">=</span> <span class="mi">1</span> <span class="o">-</span> <span class="n">scipy</span><span class="o">.</span><span class="n">stats</span><span class="o">.</span><span class="n">f</span><span class="o">.</span><span class="n">cdf</span><span class="p">((</span><span class="n">n_cov</span> <span class="o">-</span> <span class="n">output</span><span class="o">.</span><span class="n">dof</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="n">output</span><span class="o">.</span><span class="n">dof</span> <span class="o">*</span> <span class="p">(</span><span class="n">n_cov</span> <span class="o">-</span> <span class="mi">1</span><span class="p">))</span> <span class="o">*</span> <span class="n">output</span><span class="o">.</span><span class="n">chisquare</span><span class="p">,</span>
|
||||
</span><span id="L-922"><a href="#L-922"><span class="linenos"> 922</span></a> <span class="n">output</span><span class="o">.</span><span class="n">dof</span><span class="p">,</span> <span class="n">n_cov</span> <span class="o">-</span> <span class="n">output</span><span class="o">.</span><span class="n">dof</span><span class="p">)</span>
|
||||
</span><span id="L-923"><a href="#L-923"><span class="linenos"> 923</span></a>
|
||||
</span><span id="L-924"><a href="#L-924"><span class="linenos"> 924</span></a> <span class="k">return</span> <span class="n">output</span>
|
||||
</span><span id="L-925"><a href="#L-925"><span class="linenos"> 925</span></a>
|
||||
</span><span id="L-926"><a href="#L-926"><span class="linenos"> 926</span></a>
|
||||
</span><span id="L-927"><a href="#L-927"><span class="linenos"> 927</span></a><span class="k">def</span> <span class="nf">fit_lin</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
</span><span id="L-928"><a href="#L-928"><span class="linenos"> 928</span></a><span class="w"> </span><span class="sd">"""Performs a linear fit to y = n + m * x and returns two Obs n, m.</span>
|
||||
</span><span id="L-929"><a href="#L-929"><span class="linenos"> 929</span></a>
|
||||
</span><span id="L-930"><a href="#L-930"><span class="linenos"> 930</span></a><span class="sd"> Parameters</span>
|
||||
</span><span id="L-931"><a href="#L-931"><span class="linenos"> 931</span></a><span class="sd"> ----------</span>
|
||||
</span><span id="L-932"><a href="#L-932"><span class="linenos"> 932</span></a><span class="sd"> x : list</span>
|
||||
</span><span id="L-933"><a href="#L-933"><span class="linenos"> 933</span></a><span class="sd"> Can either be a list of floats in which case no xerror is assumed, or</span>
|
||||
</span><span id="L-934"><a href="#L-934"><span class="linenos"> 934</span></a><span class="sd"> a list of Obs, where the dvalues of the Obs are used as xerror for the fit.</span>
|
||||
</span><span id="L-935"><a href="#L-935"><span class="linenos"> 935</span></a><span class="sd"> y : list</span>
|
||||
</span><span id="L-936"><a href="#L-936"><span class="linenos"> 936</span></a><span class="sd"> List of Obs, the dvalues of the Obs are used as yerror for the fit.</span>
|
||||
</span><span id="L-937"><a href="#L-937"><span class="linenos"> 937</span></a>
|
||||
</span><span id="L-938"><a href="#L-938"><span class="linenos"> 938</span></a><span class="sd"> Returns</span>
|
||||
</span><span id="L-939"><a href="#L-939"><span class="linenos"> 939</span></a><span class="sd"> -------</span>
|
||||
</span><span id="L-940"><a href="#L-940"><span class="linenos"> 940</span></a><span class="sd"> fit_parameters : list[Obs]</span>
|
||||
</span><span id="L-941"><a href="#L-941"><span class="linenos"> 941</span></a><span class="sd"> LIist of fitted observables.</span>
|
||||
</span><span id="L-942"><a href="#L-942"><span class="linenos"> 942</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-943"><a href="#L-943"><span class="linenos"> 943</span></a>
|
||||
</span><span id="L-944"><a href="#L-944"><span class="linenos"> 944</span></a><span class="sd"> Returns</span>
|
||||
</span><span id="L-945"><a href="#L-945"><span class="linenos"> 945</span></a><span class="sd"> -------</span>
|
||||
</span><span id="L-946"><a href="#L-946"><span class="linenos"> 946</span></a><span class="sd"> None</span>
|
||||
</span><span id="L-947"><a href="#L-947"><span class="linenos"> 947</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-948"><a href="#L-948"><span class="linenos"> 948</span></a> <span class="n">sorted_x</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
|
||||
</span><span id="L-949"><a href="#L-949"><span class="linenos"> 949</span></a> <span class="n">xstart</span> <span class="o">=</span> <span class="n">sorted_x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="p">(</span><span class="n">sorted_x</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">sorted_x</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||
</span><span id="L-950"><a href="#L-950"><span class="linenos"> 950</span></a> <span class="n">xstop</span> <span class="o">=</span> <span class="n">sorted_x</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="p">(</span><span class="n">sorted_x</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">sorted_x</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">])</span>
|
||||
</span><span id="L-951"><a href="#L-951"><span class="linenos"> 951</span></a> <span class="n">x_samples</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">xstart</span><span class="p">,</span> <span class="n">xstop</span> <span class="o">+</span> <span class="mf">0.01</span><span class="p">,</span> <span class="mf">0.01</span><span class="p">)</span>
|
||||
</span><span id="L-952"><a href="#L-952"><span class="linenos"> 952</span></a>
|
||||
</span><span id="L-953"><a href="#L-953"><span class="linenos"> 953</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mi">8</span> <span class="o">/</span> <span class="mf">1.618</span><span class="p">))</span>
|
||||
</span><span id="L-954"><a href="#L-954"><span class="linenos"> 954</span></a> <span class="n">gs</span> <span class="o">=</span> <span class="n">gridspec</span><span class="o">.</span><span class="n">GridSpec</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">height_ratios</span><span class="o">=</span><span class="p">[</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> <span class="n">wspace</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">hspace</span><span class="o">=</span><span class="mf">0.0</span><span class="p">)</span>
|
||||
</span><span id="L-955"><a href="#L-955"><span class="linenos"> 955</span></a> <span class="n">ax0</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||
</span><span id="L-956"><a href="#L-956"><span class="linenos"> 956</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">errorbar</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y</span><span class="p">],</span> <span class="n">yerr</span><span class="o">=</span><span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">dvalue</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y</span><span class="p">],</span> <span class="n">ls</span><span class="o">=</span><span class="s1">'none'</span><span class="p">,</span> <span class="n">fmt</span><span class="o">=</span><span class="s1">'o'</span><span class="p">,</span> <span class="n">capsize</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">markersize</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'Data'</span><span class="p">)</span>
|
||||
</span><span id="L-957"><a href="#L-957"><span class="linenos"> 957</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x_samples</span><span class="p">,</span> <span class="n">func</span><span class="p">([</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">fit_res</span><span class="p">],</span> <span class="n">x_samples</span><span class="p">),</span> <span class="n">label</span><span class="o">=</span><span class="s1">'Fit'</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">ls</span><span class="o">=</span><span class="s1">'-'</span><span class="p">,</span> <span class="n">ms</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
|
||||
</span><span id="L-958"><a href="#L-958"><span class="linenos"> 958</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">set_xticklabels</span><span class="p">([])</span>
|
||||
</span><span id="L-959"><a href="#L-959"><span class="linenos"> 959</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">([</span><span class="n">xstart</span><span class="p">,</span> <span class="n">xstop</span><span class="p">])</span>
|
||||
</span><span id="L-960"><a href="#L-960"><span class="linenos"> 960</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">set_xticklabels</span><span class="p">([])</span>
|
||||
</span><span id="L-961"><a href="#L-961"><span class="linenos"> 961</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">legend</span><span class="p">()</span>
|
||||
</span><span id="L-962"><a href="#L-962"><span class="linenos"> 962</span></a>
|
||||
</span><span id="L-963"><a href="#L-963"><span class="linenos"> 963</span></a> <span class="n">residuals</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">([</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y</span><span class="p">])</span> <span class="o">-</span> <span class="n">func</span><span class="p">([</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">fit_res</span><span class="p">],</span> <span class="n">x</span><span class="p">))</span> <span class="o">/</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">([</span><span class="n">o</span><span class="o">.</span><span class="n">dvalue</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y</span><span class="p">])</span>
|
||||
</span><span id="L-964"><a href="#L-964"><span class="linenos"> 964</span></a> <span class="n">ax1</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
|
||||
</span><span id="L-965"><a href="#L-965"><span class="linenos"> 965</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">residuals</span><span class="p">,</span> <span class="s1">'ko'</span><span class="p">,</span> <span class="n">ls</span><span class="o">=</span><span class="s1">'none'</span><span class="p">,</span> <span class="n">markersize</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span>
|
||||
</span><span id="L-966"><a href="#L-966"><span class="linenos"> 966</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">direction</span><span class="o">=</span><span class="s1">'out'</span><span class="p">)</span>
|
||||
</span><span id="L-967"><a href="#L-967"><span class="linenos"> 967</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">"x"</span><span class="p">,</span> <span class="n">bottom</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">top</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">labelbottom</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
</span><span id="L-968"><a href="#L-968"><span class="linenos"> 968</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">axhline</span><span class="p">(</span><span class="n">y</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">ls</span><span class="o">=</span><span class="s1">'--'</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">'k'</span><span class="p">,</span> <span class="n">marker</span><span class="o">=</span><span class="s2">" "</span><span class="p">)</span>
|
||||
</span><span id="L-969"><a href="#L-969"><span class="linenos"> 969</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">fill_between</span><span class="p">(</span><span class="n">x_samples</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">facecolor</span><span class="o">=</span><span class="s1">'k'</span><span class="p">)</span>
|
||||
</span><span id="L-970"><a href="#L-970"><span class="linenos"> 970</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">([</span><span class="n">xstart</span><span class="p">,</span> <span class="n">xstop</span><span class="p">])</span>
|
||||
</span><span id="L-971"><a href="#L-971"><span class="linenos"> 971</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">'Residuals'</span><span class="p">)</span>
|
||||
</span><span id="L-972"><a href="#L-972"><span class="linenos"> 972</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">subplots_adjust</span><span class="p">(</span><span class="n">wspace</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">hspace</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
|
||||
</span><span id="L-973"><a href="#L-973"><span class="linenos"> 973</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">draw</span><span class="p">()</span>
|
||||
</span><span id="L-974"><a href="#L-974"><span class="linenos"> 974</span></a>
|
||||
</span><span id="L-975"><a href="#L-975"><span class="linenos"> 975</span></a>
|
||||
</span><span id="L-976"><a href="#L-976"><span class="linenos"> 976</span></a><span class="k">def</span> <span class="nf">error_band</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">beta</span><span class="p">):</span>
|
||||
</span><span id="L-977"><a href="#L-977"><span class="linenos"> 977</span></a><span class="w"> </span><span class="sd">"""Calculate the error band for an array of sample values x, for given fit function func with optimized parameters beta.</span>
|
||||
</span><span id="L-978"><a href="#L-978"><span class="linenos"> 978</span></a>
|
||||
</span><span id="L-979"><a href="#L-979"><span class="linenos"> 979</span></a><span class="sd"> Returns</span>
|
||||
</span><span id="L-980"><a href="#L-980"><span class="linenos"> 980</span></a><span class="sd"> -------</span>
|
||||
</span><span id="L-981"><a href="#L-981"><span class="linenos"> 981</span></a><span class="sd"> err : np.array(Obs)</span>
|
||||
</span><span id="L-982"><a href="#L-982"><span class="linenos"> 982</span></a><span class="sd"> Error band for an array of sample values x</span>
|
||||
</span><span id="L-983"><a href="#L-983"><span class="linenos"> 983</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-984"><a href="#L-984"><span class="linenos"> 984</span></a> <span class="n">cov</span> <span class="o">=</span> <span class="n">covariance</span><span class="p">(</span><span class="n">beta</span><span class="p">)</span>
|
||||
</span><span id="L-985"><a href="#L-985"><span class="linenos"> 985</span></a> <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">any</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">cov</span> <span class="o">-</span> <span class="n">cov</span><span class="o">.</span><span class="n">T</span><span class="p">)</span> <span class="o">></span> <span class="mi">1000</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">finfo</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span><span class="o">.</span><span class="n">eps</span><span class="p">):</span>
|
||||
</span><span id="L-986"><a href="#L-986"><span class="linenos"> 986</span></a> <span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s2">"Covariance matrix is not symmetric within floating point precision"</span><span class="p">,</span> <span class="ne">RuntimeWarning</span><span class="p">)</span>
|
||||
</span><span id="L-944"><a href="#L-944"><span class="linenos"> 944</span></a> <span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
|
||||
</span><span id="L-945"><a href="#L-945"><span class="linenos"> 945</span></a> <span class="n">y</span> <span class="o">=</span> <span class="n">a</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">a</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="n">x</span>
|
||||
</span><span id="L-946"><a href="#L-946"><span class="linenos"> 946</span></a> <span class="k">return</span> <span class="n">y</span>
|
||||
</span><span id="L-947"><a href="#L-947"><span class="linenos"> 947</span></a>
|
||||
</span><span id="L-948"><a href="#L-948"><span class="linenos"> 948</span></a> <span class="k">if</span> <span class="nb">all</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">Obs</span><span class="p">)</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">x</span><span class="p">):</span>
|
||||
</span><span id="L-949"><a href="#L-949"><span class="linenos"> 949</span></a> <span class="n">out</span> <span class="o">=</span> <span class="n">total_least_squares</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||||
</span><span id="L-950"><a href="#L-950"><span class="linenos"> 950</span></a> <span class="k">return</span> <span class="n">out</span><span class="o">.</span><span class="n">fit_parameters</span>
|
||||
</span><span id="L-951"><a href="#L-951"><span class="linenos"> 951</span></a> <span class="k">elif</span> <span class="nb">all</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="nb">float</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="nb">int</span><span class="p">)</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">x</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">):</span>
|
||||
</span><span id="L-952"><a href="#L-952"><span class="linenos"> 952</span></a> <span class="n">out</span> <span class="o">=</span> <span class="n">least_squares</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||||
</span><span id="L-953"><a href="#L-953"><span class="linenos"> 953</span></a> <span class="k">return</span> <span class="n">out</span><span class="o">.</span><span class="n">fit_parameters</span>
|
||||
</span><span id="L-954"><a href="#L-954"><span class="linenos"> 954</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="L-955"><a href="#L-955"><span class="linenos"> 955</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">'Unsupported types for x'</span><span class="p">)</span>
|
||||
</span><span id="L-956"><a href="#L-956"><span class="linenos"> 956</span></a>
|
||||
</span><span id="L-957"><a href="#L-957"><span class="linenos"> 957</span></a>
|
||||
</span><span id="L-958"><a href="#L-958"><span class="linenos"> 958</span></a><span class="k">def</span> <span class="nf">qqplot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">o_y</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">p</span><span class="p">):</span>
|
||||
</span><span id="L-959"><a href="#L-959"><span class="linenos"> 959</span></a><span class="w"> </span><span class="sd">"""Generates a quantile-quantile plot of the fit result which can be used to</span>
|
||||
</span><span id="L-960"><a href="#L-960"><span class="linenos"> 960</span></a><span class="sd"> check if the residuals of the fit are gaussian distributed.</span>
|
||||
</span><span id="L-961"><a href="#L-961"><span class="linenos"> 961</span></a>
|
||||
</span><span id="L-962"><a href="#L-962"><span class="linenos"> 962</span></a><span class="sd"> Returns</span>
|
||||
</span><span id="L-963"><a href="#L-963"><span class="linenos"> 963</span></a><span class="sd"> -------</span>
|
||||
</span><span id="L-964"><a href="#L-964"><span class="linenos"> 964</span></a><span class="sd"> None</span>
|
||||
</span><span id="L-965"><a href="#L-965"><span class="linenos"> 965</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-966"><a href="#L-966"><span class="linenos"> 966</span></a>
|
||||
</span><span id="L-967"><a href="#L-967"><span class="linenos"> 967</span></a> <span class="n">residuals</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
</span><span id="L-968"><a href="#L-968"><span class="linenos"> 968</span></a> <span class="k">for</span> <span class="n">i_x</span><span class="p">,</span> <span class="n">i_y</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">o_y</span><span class="p">):</span>
|
||||
</span><span id="L-969"><a href="#L-969"><span class="linenos"> 969</span></a> <span class="n">residuals</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">i_y</span> <span class="o">-</span> <span class="n">func</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">i_x</span><span class="p">))</span> <span class="o">/</span> <span class="n">i_y</span><span class="o">.</span><span class="n">dvalue</span><span class="p">)</span>
|
||||
</span><span id="L-970"><a href="#L-970"><span class="linenos"> 970</span></a> <span class="n">residuals</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">residuals</span><span class="p">)</span>
|
||||
</span><span id="L-971"><a href="#L-971"><span class="linenos"> 971</span></a> <span class="n">my_y</span> <span class="o">=</span> <span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">residuals</span><span class="p">]</span>
|
||||
</span><span id="L-972"><a href="#L-972"><span class="linenos"> 972</span></a> <span class="n">probplot</span> <span class="o">=</span> <span class="n">scipy</span><span class="o">.</span><span class="n">stats</span><span class="o">.</span><span class="n">probplot</span><span class="p">(</span><span class="n">my_y</span><span class="p">)</span>
|
||||
</span><span id="L-973"><a href="#L-973"><span class="linenos"> 973</span></a> <span class="n">my_x</span> <span class="o">=</span> <span class="n">probplot</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||||
</span><span id="L-974"><a href="#L-974"><span class="linenos"> 974</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mi">8</span> <span class="o">/</span> <span class="mf">1.618</span><span class="p">))</span>
|
||||
</span><span id="L-975"><a href="#L-975"><span class="linenos"> 975</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">errorbar</span><span class="p">(</span><span class="n">my_x</span><span class="p">,</span> <span class="n">my_y</span><span class="p">,</span> <span class="n">fmt</span><span class="o">=</span><span class="s1">'o'</span><span class="p">)</span>
|
||||
</span><span id="L-976"><a href="#L-976"><span class="linenos"> 976</span></a> <span class="n">fit_start</span> <span class="o">=</span> <span class="n">my_x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
</span><span id="L-977"><a href="#L-977"><span class="linenos"> 977</span></a> <span class="n">fit_stop</span> <span class="o">=</span> <span class="n">my_x</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
||||
</span><span id="L-978"><a href="#L-978"><span class="linenos"> 978</span></a> <span class="n">samples</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">fit_start</span><span class="p">,</span> <span class="n">fit_stop</span><span class="p">,</span> <span class="mf">0.01</span><span class="p">)</span>
|
||||
</span><span id="L-979"><a href="#L-979"><span class="linenos"> 979</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">samples</span><span class="p">,</span> <span class="n">samples</span><span class="p">,</span> <span class="s1">'k--'</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">11</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'Standard normal distribution'</span><span class="p">)</span>
|
||||
</span><span id="L-980"><a href="#L-980"><span class="linenos"> 980</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">samples</span><span class="p">,</span> <span class="n">probplot</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="n">samples</span> <span class="o">+</span> <span class="n">probplot</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">],</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'Least squares fit, r='</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">around</span><span class="p">(</span><span class="n">probplot</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">2</span><span class="p">],</span> <span class="mi">3</span><span class="p">)),</span> <span class="n">marker</span><span class="o">=</span><span class="s1">''</span><span class="p">,</span> <span class="n">ls</span><span class="o">=</span><span class="s1">'-'</span><span class="p">)</span>
|
||||
</span><span id="L-981"><a href="#L-981"><span class="linenos"> 981</span></a>
|
||||
</span><span id="L-982"><a href="#L-982"><span class="linenos"> 982</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'Theoretical quantiles'</span><span class="p">)</span>
|
||||
</span><span id="L-983"><a href="#L-983"><span class="linenos"> 983</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'Ordered Values'</span><span class="p">)</span>
|
||||
</span><span id="L-984"><a href="#L-984"><span class="linenos"> 984</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">()</span>
|
||||
</span><span id="L-985"><a href="#L-985"><span class="linenos"> 985</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">draw</span><span class="p">()</span>
|
||||
</span><span id="L-986"><a href="#L-986"><span class="linenos"> 986</span></a>
|
||||
</span><span id="L-987"><a href="#L-987"><span class="linenos"> 987</span></a>
|
||||
</span><span id="L-988"><a href="#L-988"><span class="linenos"> 988</span></a> <span class="n">deriv</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
</span><span id="L-989"><a href="#L-989"><span class="linenos"> 989</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">item</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
|
||||
</span><span id="L-990"><a href="#L-990"><span class="linenos"> 990</span></a> <span class="n">deriv</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">egrad</span><span class="p">(</span><span class="n">func</span><span class="p">)([</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">beta</span><span class="p">],</span> <span class="n">item</span><span class="p">)))</span>
|
||||
</span><span id="L-991"><a href="#L-991"><span class="linenos"> 991</span></a>
|
||||
</span><span id="L-992"><a href="#L-992"><span class="linenos"> 992</span></a> <span class="n">err</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
</span><span id="L-993"><a href="#L-993"><span class="linenos"> 993</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">item</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
|
||||
</span><span id="L-994"><a href="#L-994"><span class="linenos"> 994</span></a> <span class="n">err</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">deriv</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">@</span> <span class="n">cov</span> <span class="o">@</span> <span class="n">deriv</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span>
|
||||
</span><span id="L-995"><a href="#L-995"><span class="linenos"> 995</span></a> <span class="n">err</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">err</span><span class="p">)</span>
|
||||
</span><span id="L-996"><a href="#L-996"><span class="linenos"> 996</span></a>
|
||||
</span><span id="L-997"><a href="#L-997"><span class="linenos"> 997</span></a> <span class="k">return</span> <span class="n">err</span>
|
||||
</span><span id="L-998"><a href="#L-998"><span class="linenos"> 998</span></a>
|
||||
</span><span id="L-988"><a href="#L-988"><span class="linenos"> 988</span></a><span class="k">def</span> <span class="nf">residual_plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">fit_res</span><span class="p">):</span>
|
||||
</span><span id="L-989"><a href="#L-989"><span class="linenos"> 989</span></a><span class="w"> </span><span class="sd">"""Generates a plot which compares the fit to the data and displays the corresponding residuals</span>
|
||||
</span><span id="L-990"><a href="#L-990"><span class="linenos"> 990</span></a>
|
||||
</span><span id="L-991"><a href="#L-991"><span class="linenos"> 991</span></a><span class="sd"> Returns</span>
|
||||
</span><span id="L-992"><a href="#L-992"><span class="linenos"> 992</span></a><span class="sd"> -------</span>
|
||||
</span><span id="L-993"><a href="#L-993"><span class="linenos"> 993</span></a><span class="sd"> None</span>
|
||||
</span><span id="L-994"><a href="#L-994"><span class="linenos"> 994</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-995"><a href="#L-995"><span class="linenos"> 995</span></a> <span class="n">sorted_x</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
|
||||
</span><span id="L-996"><a href="#L-996"><span class="linenos"> 996</span></a> <span class="n">xstart</span> <span class="o">=</span> <span class="n">sorted_x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="p">(</span><span class="n">sorted_x</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">sorted_x</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||
</span><span id="L-997"><a href="#L-997"><span class="linenos"> 997</span></a> <span class="n">xstop</span> <span class="o">=</span> <span class="n">sorted_x</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="p">(</span><span class="n">sorted_x</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">sorted_x</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">])</span>
|
||||
</span><span id="L-998"><a href="#L-998"><span class="linenos"> 998</span></a> <span class="n">x_samples</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">xstart</span><span class="p">,</span> <span class="n">xstop</span> <span class="o">+</span> <span class="mf">0.01</span><span class="p">,</span> <span class="mf">0.01</span><span class="p">)</span>
|
||||
</span><span id="L-999"><a href="#L-999"><span class="linenos"> 999</span></a>
|
||||
</span><span id="L-1000"><a href="#L-1000"><span class="linenos">1000</span></a><span class="k">def</span> <span class="nf">ks_test</span><span class="p">(</span><span class="n">objects</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
</span><span id="L-1001"><a href="#L-1001"><span class="linenos">1001</span></a><span class="w"> </span><span class="sd">"""Performs a Kolmogorov–Smirnov test for the p-values of all fit object.</span>
|
||||
</span><span id="L-1002"><a href="#L-1002"><span class="linenos">1002</span></a>
|
||||
</span><span id="L-1003"><a href="#L-1003"><span class="linenos">1003</span></a><span class="sd"> Parameters</span>
|
||||
</span><span id="L-1004"><a href="#L-1004"><span class="linenos">1004</span></a><span class="sd"> ----------</span>
|
||||
</span><span id="L-1005"><a href="#L-1005"><span class="linenos">1005</span></a><span class="sd"> objects : list</span>
|
||||
</span><span id="L-1006"><a href="#L-1006"><span class="linenos">1006</span></a><span class="sd"> List of fit results to include in the analysis (optional).</span>
|
||||
</span><span id="L-1007"><a href="#L-1007"><span class="linenos">1007</span></a>
|
||||
</span><span id="L-1008"><a href="#L-1008"><span class="linenos">1008</span></a><span class="sd"> Returns</span>
|
||||
</span><span id="L-1009"><a href="#L-1009"><span class="linenos">1009</span></a><span class="sd"> -------</span>
|
||||
</span><span id="L-1010"><a href="#L-1010"><span class="linenos">1010</span></a><span class="sd"> None</span>
|
||||
</span><span id="L-1011"><a href="#L-1011"><span class="linenos">1011</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-1012"><a href="#L-1012"><span class="linenos">1012</span></a>
|
||||
</span><span id="L-1013"><a href="#L-1013"><span class="linenos">1013</span></a> <span class="k">if</span> <span class="n">objects</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
</span><span id="L-1014"><a href="#L-1014"><span class="linenos">1014</span></a> <span class="n">obs_list</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
</span><span id="L-1015"><a href="#L-1015"><span class="linenos">1015</span></a> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">gc</span><span class="o">.</span><span class="n">get_objects</span><span class="p">():</span>
|
||||
</span><span id="L-1016"><a href="#L-1016"><span class="linenos">1016</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">Fit_result</span><span class="p">):</span>
|
||||
</span><span id="L-1017"><a href="#L-1017"><span class="linenos">1017</span></a> <span class="n">obs_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
|
||||
</span><span id="L-1018"><a href="#L-1018"><span class="linenos">1018</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="L-1019"><a href="#L-1019"><span class="linenos">1019</span></a> <span class="n">obs_list</span> <span class="o">=</span> <span class="n">objects</span>
|
||||
</span><span id="L-1020"><a href="#L-1020"><span class="linenos">1020</span></a>
|
||||
</span><span id="L-1021"><a href="#L-1021"><span class="linenos">1021</span></a> <span class="n">p_values</span> <span class="o">=</span> <span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">p_value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">obs_list</span><span class="p">]</span>
|
||||
</span><span id="L-1000"><a href="#L-1000"><span class="linenos">1000</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mi">8</span> <span class="o">/</span> <span class="mf">1.618</span><span class="p">))</span>
|
||||
</span><span id="L-1001"><a href="#L-1001"><span class="linenos">1001</span></a> <span class="n">gs</span> <span class="o">=</span> <span class="n">gridspec</span><span class="o">.</span><span class="n">GridSpec</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">height_ratios</span><span class="o">=</span><span class="p">[</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> <span class="n">wspace</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">hspace</span><span class="o">=</span><span class="mf">0.0</span><span class="p">)</span>
|
||||
</span><span id="L-1002"><a href="#L-1002"><span class="linenos">1002</span></a> <span class="n">ax0</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||
</span><span id="L-1003"><a href="#L-1003"><span class="linenos">1003</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">errorbar</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y</span><span class="p">],</span> <span class="n">yerr</span><span class="o">=</span><span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">dvalue</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y</span><span class="p">],</span> <span class="n">ls</span><span class="o">=</span><span class="s1">'none'</span><span class="p">,</span> <span class="n">fmt</span><span class="o">=</span><span class="s1">'o'</span><span class="p">,</span> <span class="n">capsize</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">markersize</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'Data'</span><span class="p">)</span>
|
||||
</span><span id="L-1004"><a href="#L-1004"><span class="linenos">1004</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x_samples</span><span class="p">,</span> <span class="n">func</span><span class="p">([</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">fit_res</span><span class="p">],</span> <span class="n">x_samples</span><span class="p">),</span> <span class="n">label</span><span class="o">=</span><span class="s1">'Fit'</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">ls</span><span class="o">=</span><span class="s1">'-'</span><span class="p">,</span> <span class="n">ms</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
|
||||
</span><span id="L-1005"><a href="#L-1005"><span class="linenos">1005</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">set_xticklabels</span><span class="p">([])</span>
|
||||
</span><span id="L-1006"><a href="#L-1006"><span class="linenos">1006</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">([</span><span class="n">xstart</span><span class="p">,</span> <span class="n">xstop</span><span class="p">])</span>
|
||||
</span><span id="L-1007"><a href="#L-1007"><span class="linenos">1007</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">set_xticklabels</span><span class="p">([])</span>
|
||||
</span><span id="L-1008"><a href="#L-1008"><span class="linenos">1008</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">legend</span><span class="p">()</span>
|
||||
</span><span id="L-1009"><a href="#L-1009"><span class="linenos">1009</span></a>
|
||||
</span><span id="L-1010"><a href="#L-1010"><span class="linenos">1010</span></a> <span class="n">residuals</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">([</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y</span><span class="p">])</span> <span class="o">-</span> <span class="n">func</span><span class="p">([</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">fit_res</span><span class="p">],</span> <span class="n">x</span><span class="p">))</span> <span class="o">/</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">([</span><span class="n">o</span><span class="o">.</span><span class="n">dvalue</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y</span><span class="p">])</span>
|
||||
</span><span id="L-1011"><a href="#L-1011"><span class="linenos">1011</span></a> <span class="n">ax1</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
|
||||
</span><span id="L-1012"><a href="#L-1012"><span class="linenos">1012</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">residuals</span><span class="p">,</span> <span class="s1">'ko'</span><span class="p">,</span> <span class="n">ls</span><span class="o">=</span><span class="s1">'none'</span><span class="p">,</span> <span class="n">markersize</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span>
|
||||
</span><span id="L-1013"><a href="#L-1013"><span class="linenos">1013</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">direction</span><span class="o">=</span><span class="s1">'out'</span><span class="p">)</span>
|
||||
</span><span id="L-1014"><a href="#L-1014"><span class="linenos">1014</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">"x"</span><span class="p">,</span> <span class="n">bottom</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">top</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">labelbottom</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
</span><span id="L-1015"><a href="#L-1015"><span class="linenos">1015</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">axhline</span><span class="p">(</span><span class="n">y</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">ls</span><span class="o">=</span><span class="s1">'--'</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">'k'</span><span class="p">,</span> <span class="n">marker</span><span class="o">=</span><span class="s2">" "</span><span class="p">)</span>
|
||||
</span><span id="L-1016"><a href="#L-1016"><span class="linenos">1016</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">fill_between</span><span class="p">(</span><span class="n">x_samples</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">facecolor</span><span class="o">=</span><span class="s1">'k'</span><span class="p">)</span>
|
||||
</span><span id="L-1017"><a href="#L-1017"><span class="linenos">1017</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">([</span><span class="n">xstart</span><span class="p">,</span> <span class="n">xstop</span><span class="p">])</span>
|
||||
</span><span id="L-1018"><a href="#L-1018"><span class="linenos">1018</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">'Residuals'</span><span class="p">)</span>
|
||||
</span><span id="L-1019"><a href="#L-1019"><span class="linenos">1019</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">subplots_adjust</span><span class="p">(</span><span class="n">wspace</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">hspace</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
|
||||
</span><span id="L-1020"><a href="#L-1020"><span class="linenos">1020</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">draw</span><span class="p">()</span>
|
||||
</span><span id="L-1021"><a href="#L-1021"><span class="linenos">1021</span></a>
|
||||
</span><span id="L-1022"><a href="#L-1022"><span class="linenos">1022</span></a>
|
||||
</span><span id="L-1023"><a href="#L-1023"><span class="linenos">1023</span></a> <span class="n">bins</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">p_values</span><span class="p">)</span>
|
||||
</span><span id="L-1024"><a href="#L-1024"><span class="linenos">1024</span></a> <span class="n">x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mf">1.001</span><span class="p">,</span> <span class="mf">0.001</span><span class="p">)</span>
|
||||
</span><span id="L-1025"><a href="#L-1025"><span class="linenos">1025</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="s1">'k'</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
||||
</span><span id="L-1026"><a href="#L-1026"><span class="linenos">1026</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">xlim</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
||||
</span><span id="L-1027"><a href="#L-1027"><span class="linenos">1027</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">ylim</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
||||
</span><span id="L-1028"><a href="#L-1028"><span class="linenos">1028</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'p-value'</span><span class="p">)</span>
|
||||
</span><span id="L-1029"><a href="#L-1029"><span class="linenos">1029</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'Cumulative probability'</span><span class="p">)</span>
|
||||
</span><span id="L-1030"><a href="#L-1030"><span class="linenos">1030</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">bins</span><span class="p">)</span> <span class="o">+</span> <span class="s1">' p-values'</span><span class="p">)</span>
|
||||
</span><span id="L-1031"><a href="#L-1031"><span class="linenos">1031</span></a>
|
||||
</span><span id="L-1032"><a href="#L-1032"><span class="linenos">1032</span></a> <span class="n">n</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">bins</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">(</span><span class="n">bins</span><span class="p">)</span>
|
||||
</span><span id="L-1033"><a href="#L-1033"><span class="linenos">1033</span></a> <span class="n">Xs</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">p_values</span><span class="p">)</span>
|
||||
</span><span id="L-1034"><a href="#L-1034"><span class="linenos">1034</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">step</span><span class="p">(</span><span class="n">Xs</span><span class="p">,</span> <span class="n">n</span><span class="p">)</span>
|
||||
</span><span id="L-1035"><a href="#L-1035"><span class="linenos">1035</span></a> <span class="n">diffs</span> <span class="o">=</span> <span class="n">n</span> <span class="o">-</span> <span class="n">Xs</span>
|
||||
</span><span id="L-1036"><a href="#L-1036"><span class="linenos">1036</span></a> <span class="n">loc_max_diff</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">argmax</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">diffs</span><span class="p">))</span>
|
||||
</span><span id="L-1037"><a href="#L-1037"><span class="linenos">1037</span></a> <span class="n">loc</span> <span class="o">=</span> <span class="n">Xs</span><span class="p">[</span><span class="n">loc_max_diff</span><span class="p">]</span>
|
||||
</span><span id="L-1038"><a href="#L-1038"><span class="linenos">1038</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="s1">''</span><span class="p">,</span> <span class="n">xy</span><span class="o">=</span><span class="p">(</span><span class="n">loc</span><span class="p">,</span> <span class="n">loc</span><span class="p">),</span> <span class="n">xytext</span><span class="o">=</span><span class="p">(</span><span class="n">loc</span><span class="p">,</span> <span class="n">loc</span> <span class="o">+</span> <span class="n">diffs</span><span class="p">[</span><span class="n">loc_max_diff</span><span class="p">]),</span> <span class="n">arrowprops</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">arrowstyle</span><span class="o">=</span><span class="s1">'<->'</span><span class="p">,</span> <span class="n">shrinkA</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">shrinkB</span><span class="o">=</span><span class="mi">0</span><span class="p">))</span>
|
||||
</span><span id="L-1039"><a href="#L-1039"><span class="linenos">1039</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">draw</span><span class="p">()</span>
|
||||
</span><span id="L-1040"><a href="#L-1040"><span class="linenos">1040</span></a>
|
||||
</span><span id="L-1041"><a href="#L-1041"><span class="linenos">1041</span></a> <span class="nb">print</span><span class="p">(</span><span class="n">scipy</span><span class="o">.</span><span class="n">stats</span><span class="o">.</span><span class="n">kstest</span><span class="p">(</span><span class="n">p_values</span><span class="p">,</span> <span class="s1">'uniform'</span><span class="p">))</span>
|
||||
</span><span id="L-1023"><a href="#L-1023"><span class="linenos">1023</span></a><span class="k">def</span> <span class="nf">error_band</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">beta</span><span class="p">):</span>
|
||||
</span><span id="L-1024"><a href="#L-1024"><span class="linenos">1024</span></a><span class="w"> </span><span class="sd">"""Calculate the error band for an array of sample values x, for given fit function func with optimized parameters beta.</span>
|
||||
</span><span id="L-1025"><a href="#L-1025"><span class="linenos">1025</span></a>
|
||||
</span><span id="L-1026"><a href="#L-1026"><span class="linenos">1026</span></a><span class="sd"> Returns</span>
|
||||
</span><span id="L-1027"><a href="#L-1027"><span class="linenos">1027</span></a><span class="sd"> -------</span>
|
||||
</span><span id="L-1028"><a href="#L-1028"><span class="linenos">1028</span></a><span class="sd"> err : np.array(Obs)</span>
|
||||
</span><span id="L-1029"><a href="#L-1029"><span class="linenos">1029</span></a><span class="sd"> Error band for an array of sample values x</span>
|
||||
</span><span id="L-1030"><a href="#L-1030"><span class="linenos">1030</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-1031"><a href="#L-1031"><span class="linenos">1031</span></a> <span class="n">cov</span> <span class="o">=</span> <span class="n">covariance</span><span class="p">(</span><span class="n">beta</span><span class="p">)</span>
|
||||
</span><span id="L-1032"><a href="#L-1032"><span class="linenos">1032</span></a> <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">any</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">cov</span> <span class="o">-</span> <span class="n">cov</span><span class="o">.</span><span class="n">T</span><span class="p">)</span> <span class="o">></span> <span class="mi">1000</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">finfo</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span><span class="o">.</span><span class="n">eps</span><span class="p">):</span>
|
||||
</span><span id="L-1033"><a href="#L-1033"><span class="linenos">1033</span></a> <span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s2">"Covariance matrix is not symmetric within floating point precision"</span><span class="p">,</span> <span class="ne">RuntimeWarning</span><span class="p">)</span>
|
||||
</span><span id="L-1034"><a href="#L-1034"><span class="linenos">1034</span></a>
|
||||
</span><span id="L-1035"><a href="#L-1035"><span class="linenos">1035</span></a> <span class="n">deriv</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
</span><span id="L-1036"><a href="#L-1036"><span class="linenos">1036</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">item</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
|
||||
</span><span id="L-1037"><a href="#L-1037"><span class="linenos">1037</span></a> <span class="n">deriv</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">egrad</span><span class="p">(</span><span class="n">func</span><span class="p">)([</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">beta</span><span class="p">],</span> <span class="n">item</span><span class="p">)))</span>
|
||||
</span><span id="L-1038"><a href="#L-1038"><span class="linenos">1038</span></a>
|
||||
</span><span id="L-1039"><a href="#L-1039"><span class="linenos">1039</span></a> <span class="n">err</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
</span><span id="L-1040"><a href="#L-1040"><span class="linenos">1040</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">item</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
|
||||
</span><span id="L-1041"><a href="#L-1041"><span class="linenos">1041</span></a> <span class="n">err</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">deriv</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">@</span> <span class="n">cov</span> <span class="o">@</span> <span class="n">deriv</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span>
|
||||
</span><span id="L-1042"><a href="#L-1042"><span class="linenos">1042</span></a> <span class="n">err</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">err</span><span class="p">)</span>
|
||||
</span><span id="L-1043"><a href="#L-1043"><span class="linenos">1043</span></a>
|
||||
</span><span id="L-1044"><a href="#L-1044"><span class="linenos">1044</span></a> <span class="k">return</span> <span class="n">err</span>
|
||||
</span><span id="L-1045"><a href="#L-1045"><span class="linenos">1045</span></a>
|
||||
</span><span id="L-1046"><a href="#L-1046"><span class="linenos">1046</span></a>
|
||||
</span><span id="L-1047"><a href="#L-1047"><span class="linenos">1047</span></a><span class="k">def</span> <span class="nf">ks_test</span><span class="p">(</span><span class="n">objects</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
</span><span id="L-1048"><a href="#L-1048"><span class="linenos">1048</span></a><span class="w"> </span><span class="sd">"""Performs a Kolmogorov–Smirnov test for the p-values of all fit object.</span>
|
||||
</span><span id="L-1049"><a href="#L-1049"><span class="linenos">1049</span></a>
|
||||
</span><span id="L-1050"><a href="#L-1050"><span class="linenos">1050</span></a><span class="sd"> Parameters</span>
|
||||
</span><span id="L-1051"><a href="#L-1051"><span class="linenos">1051</span></a><span class="sd"> ----------</span>
|
||||
</span><span id="L-1052"><a href="#L-1052"><span class="linenos">1052</span></a><span class="sd"> objects : list</span>
|
||||
</span><span id="L-1053"><a href="#L-1053"><span class="linenos">1053</span></a><span class="sd"> List of fit results to include in the analysis (optional).</span>
|
||||
</span><span id="L-1054"><a href="#L-1054"><span class="linenos">1054</span></a>
|
||||
</span><span id="L-1055"><a href="#L-1055"><span class="linenos">1055</span></a><span class="sd"> Returns</span>
|
||||
</span><span id="L-1056"><a href="#L-1056"><span class="linenos">1056</span></a><span class="sd"> -------</span>
|
||||
</span><span id="L-1057"><a href="#L-1057"><span class="linenos">1057</span></a><span class="sd"> None</span>
|
||||
</span><span id="L-1058"><a href="#L-1058"><span class="linenos">1058</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-1059"><a href="#L-1059"><span class="linenos">1059</span></a>
|
||||
</span><span id="L-1060"><a href="#L-1060"><span class="linenos">1060</span></a> <span class="k">if</span> <span class="n">objects</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
</span><span id="L-1061"><a href="#L-1061"><span class="linenos">1061</span></a> <span class="n">obs_list</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
</span><span id="L-1062"><a href="#L-1062"><span class="linenos">1062</span></a> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">gc</span><span class="o">.</span><span class="n">get_objects</span><span class="p">():</span>
|
||||
</span><span id="L-1063"><a href="#L-1063"><span class="linenos">1063</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">Fit_result</span><span class="p">):</span>
|
||||
</span><span id="L-1064"><a href="#L-1064"><span class="linenos">1064</span></a> <span class="n">obs_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
|
||||
</span><span id="L-1065"><a href="#L-1065"><span class="linenos">1065</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="L-1066"><a href="#L-1066"><span class="linenos">1066</span></a> <span class="n">obs_list</span> <span class="o">=</span> <span class="n">objects</span>
|
||||
</span><span id="L-1067"><a href="#L-1067"><span class="linenos">1067</span></a>
|
||||
</span><span id="L-1068"><a href="#L-1068"><span class="linenos">1068</span></a> <span class="n">p_values</span> <span class="o">=</span> <span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">p_value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">obs_list</span><span class="p">]</span>
|
||||
</span><span id="L-1069"><a href="#L-1069"><span class="linenos">1069</span></a>
|
||||
</span><span id="L-1070"><a href="#L-1070"><span class="linenos">1070</span></a> <span class="n">bins</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">p_values</span><span class="p">)</span>
|
||||
</span><span id="L-1071"><a href="#L-1071"><span class="linenos">1071</span></a> <span class="n">x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mf">1.001</span><span class="p">,</span> <span class="mf">0.001</span><span class="p">)</span>
|
||||
</span><span id="L-1072"><a href="#L-1072"><span class="linenos">1072</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="s1">'k'</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
||||
</span><span id="L-1073"><a href="#L-1073"><span class="linenos">1073</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">xlim</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
||||
</span><span id="L-1074"><a href="#L-1074"><span class="linenos">1074</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">ylim</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
||||
</span><span id="L-1075"><a href="#L-1075"><span class="linenos">1075</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'p-value'</span><span class="p">)</span>
|
||||
</span><span id="L-1076"><a href="#L-1076"><span class="linenos">1076</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'Cumulative probability'</span><span class="p">)</span>
|
||||
</span><span id="L-1077"><a href="#L-1077"><span class="linenos">1077</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">bins</span><span class="p">)</span> <span class="o">+</span> <span class="s1">' p-values'</span><span class="p">)</span>
|
||||
</span><span id="L-1078"><a href="#L-1078"><span class="linenos">1078</span></a>
|
||||
</span><span id="L-1079"><a href="#L-1079"><span class="linenos">1079</span></a> <span class="n">n</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">bins</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">(</span><span class="n">bins</span><span class="p">)</span>
|
||||
</span><span id="L-1080"><a href="#L-1080"><span class="linenos">1080</span></a> <span class="n">Xs</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">p_values</span><span class="p">)</span>
|
||||
</span><span id="L-1081"><a href="#L-1081"><span class="linenos">1081</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">step</span><span class="p">(</span><span class="n">Xs</span><span class="p">,</span> <span class="n">n</span><span class="p">)</span>
|
||||
</span><span id="L-1082"><a href="#L-1082"><span class="linenos">1082</span></a> <span class="n">diffs</span> <span class="o">=</span> <span class="n">n</span> <span class="o">-</span> <span class="n">Xs</span>
|
||||
</span><span id="L-1083"><a href="#L-1083"><span class="linenos">1083</span></a> <span class="n">loc_max_diff</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">argmax</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">diffs</span><span class="p">))</span>
|
||||
</span><span id="L-1084"><a href="#L-1084"><span class="linenos">1084</span></a> <span class="n">loc</span> <span class="o">=</span> <span class="n">Xs</span><span class="p">[</span><span class="n">loc_max_diff</span><span class="p">]</span>
|
||||
</span><span id="L-1085"><a href="#L-1085"><span class="linenos">1085</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="s1">''</span><span class="p">,</span> <span class="n">xy</span><span class="o">=</span><span class="p">(</span><span class="n">loc</span><span class="p">,</span> <span class="n">loc</span><span class="p">),</span> <span class="n">xytext</span><span class="o">=</span><span class="p">(</span><span class="n">loc</span><span class="p">,</span> <span class="n">loc</span> <span class="o">+</span> <span class="n">diffs</span><span class="p">[</span><span class="n">loc_max_diff</span><span class="p">]),</span> <span class="n">arrowprops</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">arrowstyle</span><span class="o">=</span><span class="s1">'<->'</span><span class="p">,</span> <span class="n">shrinkA</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">shrinkB</span><span class="o">=</span><span class="mi">0</span><span class="p">))</span>
|
||||
</span><span id="L-1086"><a href="#L-1086"><span class="linenos">1086</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">draw</span><span class="p">()</span>
|
||||
</span><span id="L-1087"><a href="#L-1087"><span class="linenos">1087</span></a>
|
||||
</span><span id="L-1088"><a href="#L-1088"><span class="linenos">1088</span></a> <span class="nb">print</span><span class="p">(</span><span class="n">scipy</span><span class="o">.</span><span class="n">stats</span><span class="o">.</span><span class="n">kstest</span><span class="p">(</span><span class="n">p_values</span><span class="p">,</span> <span class="s1">'uniform'</span><span class="p">))</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
@ -1816,35 +1863,35 @@ Parameters and information on the fitted result.</li>
|
|||
|
||||
</div>
|
||||
<a class="headerlink" href="#fit_lin"></a>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="fit_lin-881"><a href="#fit_lin-881"><span class="linenos">881</span></a><span class="k">def</span> <span class="nf">fit_lin</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
</span><span id="fit_lin-882"><a href="#fit_lin-882"><span class="linenos">882</span></a><span class="w"> </span><span class="sd">"""Performs a linear fit to y = n + m * x and returns two Obs n, m.</span>
|
||||
</span><span id="fit_lin-883"><a href="#fit_lin-883"><span class="linenos">883</span></a>
|
||||
</span><span id="fit_lin-884"><a href="#fit_lin-884"><span class="linenos">884</span></a><span class="sd"> Parameters</span>
|
||||
</span><span id="fit_lin-885"><a href="#fit_lin-885"><span class="linenos">885</span></a><span class="sd"> ----------</span>
|
||||
</span><span id="fit_lin-886"><a href="#fit_lin-886"><span class="linenos">886</span></a><span class="sd"> x : list</span>
|
||||
</span><span id="fit_lin-887"><a href="#fit_lin-887"><span class="linenos">887</span></a><span class="sd"> Can either be a list of floats in which case no xerror is assumed, or</span>
|
||||
</span><span id="fit_lin-888"><a href="#fit_lin-888"><span class="linenos">888</span></a><span class="sd"> a list of Obs, where the dvalues of the Obs are used as xerror for the fit.</span>
|
||||
</span><span id="fit_lin-889"><a href="#fit_lin-889"><span class="linenos">889</span></a><span class="sd"> y : list</span>
|
||||
</span><span id="fit_lin-890"><a href="#fit_lin-890"><span class="linenos">890</span></a><span class="sd"> List of Obs, the dvalues of the Obs are used as yerror for the fit.</span>
|
||||
</span><span id="fit_lin-891"><a href="#fit_lin-891"><span class="linenos">891</span></a>
|
||||
</span><span id="fit_lin-892"><a href="#fit_lin-892"><span class="linenos">892</span></a><span class="sd"> Returns</span>
|
||||
</span><span id="fit_lin-893"><a href="#fit_lin-893"><span class="linenos">893</span></a><span class="sd"> -------</span>
|
||||
</span><span id="fit_lin-894"><a href="#fit_lin-894"><span class="linenos">894</span></a><span class="sd"> fit_parameters : list[Obs]</span>
|
||||
</span><span id="fit_lin-895"><a href="#fit_lin-895"><span class="linenos">895</span></a><span class="sd"> LIist of fitted observables.</span>
|
||||
</span><span id="fit_lin-896"><a href="#fit_lin-896"><span class="linenos">896</span></a><span class="sd"> """</span>
|
||||
</span><span id="fit_lin-897"><a href="#fit_lin-897"><span class="linenos">897</span></a>
|
||||
</span><span id="fit_lin-898"><a href="#fit_lin-898"><span class="linenos">898</span></a> <span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
|
||||
</span><span id="fit_lin-899"><a href="#fit_lin-899"><span class="linenos">899</span></a> <span class="n">y</span> <span class="o">=</span> <span class="n">a</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">a</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="n">x</span>
|
||||
</span><span id="fit_lin-900"><a href="#fit_lin-900"><span class="linenos">900</span></a> <span class="k">return</span> <span class="n">y</span>
|
||||
</span><span id="fit_lin-901"><a href="#fit_lin-901"><span class="linenos">901</span></a>
|
||||
</span><span id="fit_lin-902"><a href="#fit_lin-902"><span class="linenos">902</span></a> <span class="k">if</span> <span class="nb">all</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">Obs</span><span class="p">)</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">x</span><span class="p">):</span>
|
||||
</span><span id="fit_lin-903"><a href="#fit_lin-903"><span class="linenos">903</span></a> <span class="n">out</span> <span class="o">=</span> <span class="n">total_least_squares</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||||
</span><span id="fit_lin-904"><a href="#fit_lin-904"><span class="linenos">904</span></a> <span class="k">return</span> <span class="n">out</span><span class="o">.</span><span class="n">fit_parameters</span>
|
||||
</span><span id="fit_lin-905"><a href="#fit_lin-905"><span class="linenos">905</span></a> <span class="k">elif</span> <span class="nb">all</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="nb">float</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="nb">int</span><span class="p">)</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">x</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">):</span>
|
||||
</span><span id="fit_lin-906"><a href="#fit_lin-906"><span class="linenos">906</span></a> <span class="n">out</span> <span class="o">=</span> <span class="n">least_squares</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||||
</span><span id="fit_lin-907"><a href="#fit_lin-907"><span class="linenos">907</span></a> <span class="k">return</span> <span class="n">out</span><span class="o">.</span><span class="n">fit_parameters</span>
|
||||
</span><span id="fit_lin-908"><a href="#fit_lin-908"><span class="linenos">908</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="fit_lin-909"><a href="#fit_lin-909"><span class="linenos">909</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">'Unsupported types for x'</span><span class="p">)</span>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="fit_lin-928"><a href="#fit_lin-928"><span class="linenos">928</span></a><span class="k">def</span> <span class="nf">fit_lin</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
</span><span id="fit_lin-929"><a href="#fit_lin-929"><span class="linenos">929</span></a><span class="w"> </span><span class="sd">"""Performs a linear fit to y = n + m * x and returns two Obs n, m.</span>
|
||||
</span><span id="fit_lin-930"><a href="#fit_lin-930"><span class="linenos">930</span></a>
|
||||
</span><span id="fit_lin-931"><a href="#fit_lin-931"><span class="linenos">931</span></a><span class="sd"> Parameters</span>
|
||||
</span><span id="fit_lin-932"><a href="#fit_lin-932"><span class="linenos">932</span></a><span class="sd"> ----------</span>
|
||||
</span><span id="fit_lin-933"><a href="#fit_lin-933"><span class="linenos">933</span></a><span class="sd"> x : list</span>
|
||||
</span><span id="fit_lin-934"><a href="#fit_lin-934"><span class="linenos">934</span></a><span class="sd"> Can either be a list of floats in which case no xerror is assumed, or</span>
|
||||
</span><span id="fit_lin-935"><a href="#fit_lin-935"><span class="linenos">935</span></a><span class="sd"> a list of Obs, where the dvalues of the Obs are used as xerror for the fit.</span>
|
||||
</span><span id="fit_lin-936"><a href="#fit_lin-936"><span class="linenos">936</span></a><span class="sd"> y : list</span>
|
||||
</span><span id="fit_lin-937"><a href="#fit_lin-937"><span class="linenos">937</span></a><span class="sd"> List of Obs, the dvalues of the Obs are used as yerror for the fit.</span>
|
||||
</span><span id="fit_lin-938"><a href="#fit_lin-938"><span class="linenos">938</span></a>
|
||||
</span><span id="fit_lin-939"><a href="#fit_lin-939"><span class="linenos">939</span></a><span class="sd"> Returns</span>
|
||||
</span><span id="fit_lin-940"><a href="#fit_lin-940"><span class="linenos">940</span></a><span class="sd"> -------</span>
|
||||
</span><span id="fit_lin-941"><a href="#fit_lin-941"><span class="linenos">941</span></a><span class="sd"> fit_parameters : list[Obs]</span>
|
||||
</span><span id="fit_lin-942"><a href="#fit_lin-942"><span class="linenos">942</span></a><span class="sd"> LIist of fitted observables.</span>
|
||||
</span><span id="fit_lin-943"><a href="#fit_lin-943"><span class="linenos">943</span></a><span class="sd"> """</span>
|
||||
</span><span id="fit_lin-944"><a href="#fit_lin-944"><span class="linenos">944</span></a>
|
||||
</span><span id="fit_lin-945"><a href="#fit_lin-945"><span class="linenos">945</span></a> <span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
|
||||
</span><span id="fit_lin-946"><a href="#fit_lin-946"><span class="linenos">946</span></a> <span class="n">y</span> <span class="o">=</span> <span class="n">a</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">a</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="n">x</span>
|
||||
</span><span id="fit_lin-947"><a href="#fit_lin-947"><span class="linenos">947</span></a> <span class="k">return</span> <span class="n">y</span>
|
||||
</span><span id="fit_lin-948"><a href="#fit_lin-948"><span class="linenos">948</span></a>
|
||||
</span><span id="fit_lin-949"><a href="#fit_lin-949"><span class="linenos">949</span></a> <span class="k">if</span> <span class="nb">all</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">Obs</span><span class="p">)</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">x</span><span class="p">):</span>
|
||||
</span><span id="fit_lin-950"><a href="#fit_lin-950"><span class="linenos">950</span></a> <span class="n">out</span> <span class="o">=</span> <span class="n">total_least_squares</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||||
</span><span id="fit_lin-951"><a href="#fit_lin-951"><span class="linenos">951</span></a> <span class="k">return</span> <span class="n">out</span><span class="o">.</span><span class="n">fit_parameters</span>
|
||||
</span><span id="fit_lin-952"><a href="#fit_lin-952"><span class="linenos">952</span></a> <span class="k">elif</span> <span class="nb">all</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="nb">float</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="nb">int</span><span class="p">)</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">x</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">):</span>
|
||||
</span><span id="fit_lin-953"><a href="#fit_lin-953"><span class="linenos">953</span></a> <span class="n">out</span> <span class="o">=</span> <span class="n">least_squares</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||||
</span><span id="fit_lin-954"><a href="#fit_lin-954"><span class="linenos">954</span></a> <span class="k">return</span> <span class="n">out</span><span class="o">.</span><span class="n">fit_parameters</span>
|
||||
</span><span id="fit_lin-955"><a href="#fit_lin-955"><span class="linenos">955</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="fit_lin-956"><a href="#fit_lin-956"><span class="linenos">956</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">'Unsupported types for x'</span><span class="p">)</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
@ -1881,34 +1928,34 @@ LIist of fitted observables.</li>
|
|||
|
||||
</div>
|
||||
<a class="headerlink" href="#qqplot"></a>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="qqplot-912"><a href="#qqplot-912"><span class="linenos">912</span></a><span class="k">def</span> <span class="nf">qqplot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">o_y</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">p</span><span class="p">):</span>
|
||||
</span><span id="qqplot-913"><a href="#qqplot-913"><span class="linenos">913</span></a><span class="w"> </span><span class="sd">"""Generates a quantile-quantile plot of the fit result which can be used to</span>
|
||||
</span><span id="qqplot-914"><a href="#qqplot-914"><span class="linenos">914</span></a><span class="sd"> check if the residuals of the fit are gaussian distributed.</span>
|
||||
</span><span id="qqplot-915"><a href="#qqplot-915"><span class="linenos">915</span></a>
|
||||
</span><span id="qqplot-916"><a href="#qqplot-916"><span class="linenos">916</span></a><span class="sd"> Returns</span>
|
||||
</span><span id="qqplot-917"><a href="#qqplot-917"><span class="linenos">917</span></a><span class="sd"> -------</span>
|
||||
</span><span id="qqplot-918"><a href="#qqplot-918"><span class="linenos">918</span></a><span class="sd"> None</span>
|
||||
</span><span id="qqplot-919"><a href="#qqplot-919"><span class="linenos">919</span></a><span class="sd"> """</span>
|
||||
</span><span id="qqplot-920"><a href="#qqplot-920"><span class="linenos">920</span></a>
|
||||
</span><span id="qqplot-921"><a href="#qqplot-921"><span class="linenos">921</span></a> <span class="n">residuals</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
</span><span id="qqplot-922"><a href="#qqplot-922"><span class="linenos">922</span></a> <span class="k">for</span> <span class="n">i_x</span><span class="p">,</span> <span class="n">i_y</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">o_y</span><span class="p">):</span>
|
||||
</span><span id="qqplot-923"><a href="#qqplot-923"><span class="linenos">923</span></a> <span class="n">residuals</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">i_y</span> <span class="o">-</span> <span class="n">func</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">i_x</span><span class="p">))</span> <span class="o">/</span> <span class="n">i_y</span><span class="o">.</span><span class="n">dvalue</span><span class="p">)</span>
|
||||
</span><span id="qqplot-924"><a href="#qqplot-924"><span class="linenos">924</span></a> <span class="n">residuals</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">residuals</span><span class="p">)</span>
|
||||
</span><span id="qqplot-925"><a href="#qqplot-925"><span class="linenos">925</span></a> <span class="n">my_y</span> <span class="o">=</span> <span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">residuals</span><span class="p">]</span>
|
||||
</span><span id="qqplot-926"><a href="#qqplot-926"><span class="linenos">926</span></a> <span class="n">probplot</span> <span class="o">=</span> <span class="n">scipy</span><span class="o">.</span><span class="n">stats</span><span class="o">.</span><span class="n">probplot</span><span class="p">(</span><span class="n">my_y</span><span class="p">)</span>
|
||||
</span><span id="qqplot-927"><a href="#qqplot-927"><span class="linenos">927</span></a> <span class="n">my_x</span> <span class="o">=</span> <span class="n">probplot</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||||
</span><span id="qqplot-928"><a href="#qqplot-928"><span class="linenos">928</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mi">8</span> <span class="o">/</span> <span class="mf">1.618</span><span class="p">))</span>
|
||||
</span><span id="qqplot-929"><a href="#qqplot-929"><span class="linenos">929</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">errorbar</span><span class="p">(</span><span class="n">my_x</span><span class="p">,</span> <span class="n">my_y</span><span class="p">,</span> <span class="n">fmt</span><span class="o">=</span><span class="s1">'o'</span><span class="p">)</span>
|
||||
</span><span id="qqplot-930"><a href="#qqplot-930"><span class="linenos">930</span></a> <span class="n">fit_start</span> <span class="o">=</span> <span class="n">my_x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
</span><span id="qqplot-931"><a href="#qqplot-931"><span class="linenos">931</span></a> <span class="n">fit_stop</span> <span class="o">=</span> <span class="n">my_x</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
||||
</span><span id="qqplot-932"><a href="#qqplot-932"><span class="linenos">932</span></a> <span class="n">samples</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">fit_start</span><span class="p">,</span> <span class="n">fit_stop</span><span class="p">,</span> <span class="mf">0.01</span><span class="p">)</span>
|
||||
</span><span id="qqplot-933"><a href="#qqplot-933"><span class="linenos">933</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">samples</span><span class="p">,</span> <span class="n">samples</span><span class="p">,</span> <span class="s1">'k--'</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">11</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'Standard normal distribution'</span><span class="p">)</span>
|
||||
</span><span id="qqplot-934"><a href="#qqplot-934"><span class="linenos">934</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">samples</span><span class="p">,</span> <span class="n">probplot</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="n">samples</span> <span class="o">+</span> <span class="n">probplot</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">],</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'Least squares fit, r='</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">around</span><span class="p">(</span><span class="n">probplot</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">2</span><span class="p">],</span> <span class="mi">3</span><span class="p">)),</span> <span class="n">marker</span><span class="o">=</span><span class="s1">''</span><span class="p">,</span> <span class="n">ls</span><span class="o">=</span><span class="s1">'-'</span><span class="p">)</span>
|
||||
</span><span id="qqplot-935"><a href="#qqplot-935"><span class="linenos">935</span></a>
|
||||
</span><span id="qqplot-936"><a href="#qqplot-936"><span class="linenos">936</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'Theoretical quantiles'</span><span class="p">)</span>
|
||||
</span><span id="qqplot-937"><a href="#qqplot-937"><span class="linenos">937</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'Ordered Values'</span><span class="p">)</span>
|
||||
</span><span id="qqplot-938"><a href="#qqplot-938"><span class="linenos">938</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">()</span>
|
||||
</span><span id="qqplot-939"><a href="#qqplot-939"><span class="linenos">939</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">draw</span><span class="p">()</span>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="qqplot-959"><a href="#qqplot-959"><span class="linenos">959</span></a><span class="k">def</span> <span class="nf">qqplot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">o_y</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">p</span><span class="p">):</span>
|
||||
</span><span id="qqplot-960"><a href="#qqplot-960"><span class="linenos">960</span></a><span class="w"> </span><span class="sd">"""Generates a quantile-quantile plot of the fit result which can be used to</span>
|
||||
</span><span id="qqplot-961"><a href="#qqplot-961"><span class="linenos">961</span></a><span class="sd"> check if the residuals of the fit are gaussian distributed.</span>
|
||||
</span><span id="qqplot-962"><a href="#qqplot-962"><span class="linenos">962</span></a>
|
||||
</span><span id="qqplot-963"><a href="#qqplot-963"><span class="linenos">963</span></a><span class="sd"> Returns</span>
|
||||
</span><span id="qqplot-964"><a href="#qqplot-964"><span class="linenos">964</span></a><span class="sd"> -------</span>
|
||||
</span><span id="qqplot-965"><a href="#qqplot-965"><span class="linenos">965</span></a><span class="sd"> None</span>
|
||||
</span><span id="qqplot-966"><a href="#qqplot-966"><span class="linenos">966</span></a><span class="sd"> """</span>
|
||||
</span><span id="qqplot-967"><a href="#qqplot-967"><span class="linenos">967</span></a>
|
||||
</span><span id="qqplot-968"><a href="#qqplot-968"><span class="linenos">968</span></a> <span class="n">residuals</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
</span><span id="qqplot-969"><a href="#qqplot-969"><span class="linenos">969</span></a> <span class="k">for</span> <span class="n">i_x</span><span class="p">,</span> <span class="n">i_y</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">o_y</span><span class="p">):</span>
|
||||
</span><span id="qqplot-970"><a href="#qqplot-970"><span class="linenos">970</span></a> <span class="n">residuals</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">i_y</span> <span class="o">-</span> <span class="n">func</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">i_x</span><span class="p">))</span> <span class="o">/</span> <span class="n">i_y</span><span class="o">.</span><span class="n">dvalue</span><span class="p">)</span>
|
||||
</span><span id="qqplot-971"><a href="#qqplot-971"><span class="linenos">971</span></a> <span class="n">residuals</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">residuals</span><span class="p">)</span>
|
||||
</span><span id="qqplot-972"><a href="#qqplot-972"><span class="linenos">972</span></a> <span class="n">my_y</span> <span class="o">=</span> <span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">residuals</span><span class="p">]</span>
|
||||
</span><span id="qqplot-973"><a href="#qqplot-973"><span class="linenos">973</span></a> <span class="n">probplot</span> <span class="o">=</span> <span class="n">scipy</span><span class="o">.</span><span class="n">stats</span><span class="o">.</span><span class="n">probplot</span><span class="p">(</span><span class="n">my_y</span><span class="p">)</span>
|
||||
</span><span id="qqplot-974"><a href="#qqplot-974"><span class="linenos">974</span></a> <span class="n">my_x</span> <span class="o">=</span> <span class="n">probplot</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||||
</span><span id="qqplot-975"><a href="#qqplot-975"><span class="linenos">975</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mi">8</span> <span class="o">/</span> <span class="mf">1.618</span><span class="p">))</span>
|
||||
</span><span id="qqplot-976"><a href="#qqplot-976"><span class="linenos">976</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">errorbar</span><span class="p">(</span><span class="n">my_x</span><span class="p">,</span> <span class="n">my_y</span><span class="p">,</span> <span class="n">fmt</span><span class="o">=</span><span class="s1">'o'</span><span class="p">)</span>
|
||||
</span><span id="qqplot-977"><a href="#qqplot-977"><span class="linenos">977</span></a> <span class="n">fit_start</span> <span class="o">=</span> <span class="n">my_x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
</span><span id="qqplot-978"><a href="#qqplot-978"><span class="linenos">978</span></a> <span class="n">fit_stop</span> <span class="o">=</span> <span class="n">my_x</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
||||
</span><span id="qqplot-979"><a href="#qqplot-979"><span class="linenos">979</span></a> <span class="n">samples</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">fit_start</span><span class="p">,</span> <span class="n">fit_stop</span><span class="p">,</span> <span class="mf">0.01</span><span class="p">)</span>
|
||||
</span><span id="qqplot-980"><a href="#qqplot-980"><span class="linenos">980</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">samples</span><span class="p">,</span> <span class="n">samples</span><span class="p">,</span> <span class="s1">'k--'</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">11</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'Standard normal distribution'</span><span class="p">)</span>
|
||||
</span><span id="qqplot-981"><a href="#qqplot-981"><span class="linenos">981</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">samples</span><span class="p">,</span> <span class="n">probplot</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="n">samples</span> <span class="o">+</span> <span class="n">probplot</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">],</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'Least squares fit, r='</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">around</span><span class="p">(</span><span class="n">probplot</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">2</span><span class="p">],</span> <span class="mi">3</span><span class="p">)),</span> <span class="n">marker</span><span class="o">=</span><span class="s1">''</span><span class="p">,</span> <span class="n">ls</span><span class="o">=</span><span class="s1">'-'</span><span class="p">)</span>
|
||||
</span><span id="qqplot-982"><a href="#qqplot-982"><span class="linenos">982</span></a>
|
||||
</span><span id="qqplot-983"><a href="#qqplot-983"><span class="linenos">983</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'Theoretical quantiles'</span><span class="p">)</span>
|
||||
</span><span id="qqplot-984"><a href="#qqplot-984"><span class="linenos">984</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'Ordered Values'</span><span class="p">)</span>
|
||||
</span><span id="qqplot-985"><a href="#qqplot-985"><span class="linenos">985</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">()</span>
|
||||
</span><span id="qqplot-986"><a href="#qqplot-986"><span class="linenos">986</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">draw</span><span class="p">()</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
@ -1935,39 +1982,39 @@ LIist of fitted observables.</li>
|
|||
|
||||
</div>
|
||||
<a class="headerlink" href="#residual_plot"></a>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="residual_plot-942"><a href="#residual_plot-942"><span class="linenos">942</span></a><span class="k">def</span> <span class="nf">residual_plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">fit_res</span><span class="p">):</span>
|
||||
</span><span id="residual_plot-943"><a href="#residual_plot-943"><span class="linenos">943</span></a><span class="w"> </span><span class="sd">"""Generates a plot which compares the fit to the data and displays the corresponding residuals</span>
|
||||
</span><span id="residual_plot-944"><a href="#residual_plot-944"><span class="linenos">944</span></a>
|
||||
</span><span id="residual_plot-945"><a href="#residual_plot-945"><span class="linenos">945</span></a><span class="sd"> Returns</span>
|
||||
</span><span id="residual_plot-946"><a href="#residual_plot-946"><span class="linenos">946</span></a><span class="sd"> -------</span>
|
||||
</span><span id="residual_plot-947"><a href="#residual_plot-947"><span class="linenos">947</span></a><span class="sd"> None</span>
|
||||
</span><span id="residual_plot-948"><a href="#residual_plot-948"><span class="linenos">948</span></a><span class="sd"> """</span>
|
||||
</span><span id="residual_plot-949"><a href="#residual_plot-949"><span class="linenos">949</span></a> <span class="n">sorted_x</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
|
||||
</span><span id="residual_plot-950"><a href="#residual_plot-950"><span class="linenos">950</span></a> <span class="n">xstart</span> <span class="o">=</span> <span class="n">sorted_x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="p">(</span><span class="n">sorted_x</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">sorted_x</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||
</span><span id="residual_plot-951"><a href="#residual_plot-951"><span class="linenos">951</span></a> <span class="n">xstop</span> <span class="o">=</span> <span class="n">sorted_x</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="p">(</span><span class="n">sorted_x</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">sorted_x</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">])</span>
|
||||
</span><span id="residual_plot-952"><a href="#residual_plot-952"><span class="linenos">952</span></a> <span class="n">x_samples</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">xstart</span><span class="p">,</span> <span class="n">xstop</span> <span class="o">+</span> <span class="mf">0.01</span><span class="p">,</span> <span class="mf">0.01</span><span class="p">)</span>
|
||||
</span><span id="residual_plot-953"><a href="#residual_plot-953"><span class="linenos">953</span></a>
|
||||
</span><span id="residual_plot-954"><a href="#residual_plot-954"><span class="linenos">954</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mi">8</span> <span class="o">/</span> <span class="mf">1.618</span><span class="p">))</span>
|
||||
</span><span id="residual_plot-955"><a href="#residual_plot-955"><span class="linenos">955</span></a> <span class="n">gs</span> <span class="o">=</span> <span class="n">gridspec</span><span class="o">.</span><span class="n">GridSpec</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">height_ratios</span><span class="o">=</span><span class="p">[</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> <span class="n">wspace</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">hspace</span><span class="o">=</span><span class="mf">0.0</span><span class="p">)</span>
|
||||
</span><span id="residual_plot-956"><a href="#residual_plot-956"><span class="linenos">956</span></a> <span class="n">ax0</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||
</span><span id="residual_plot-957"><a href="#residual_plot-957"><span class="linenos">957</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">errorbar</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y</span><span class="p">],</span> <span class="n">yerr</span><span class="o">=</span><span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">dvalue</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y</span><span class="p">],</span> <span class="n">ls</span><span class="o">=</span><span class="s1">'none'</span><span class="p">,</span> <span class="n">fmt</span><span class="o">=</span><span class="s1">'o'</span><span class="p">,</span> <span class="n">capsize</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">markersize</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'Data'</span><span class="p">)</span>
|
||||
</span><span id="residual_plot-958"><a href="#residual_plot-958"><span class="linenos">958</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x_samples</span><span class="p">,</span> <span class="n">func</span><span class="p">([</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">fit_res</span><span class="p">],</span> <span class="n">x_samples</span><span class="p">),</span> <span class="n">label</span><span class="o">=</span><span class="s1">'Fit'</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">ls</span><span class="o">=</span><span class="s1">'-'</span><span class="p">,</span> <span class="n">ms</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
|
||||
</span><span id="residual_plot-959"><a href="#residual_plot-959"><span class="linenos">959</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">set_xticklabels</span><span class="p">([])</span>
|
||||
</span><span id="residual_plot-960"><a href="#residual_plot-960"><span class="linenos">960</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">([</span><span class="n">xstart</span><span class="p">,</span> <span class="n">xstop</span><span class="p">])</span>
|
||||
</span><span id="residual_plot-961"><a href="#residual_plot-961"><span class="linenos">961</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">set_xticklabels</span><span class="p">([])</span>
|
||||
</span><span id="residual_plot-962"><a href="#residual_plot-962"><span class="linenos">962</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">legend</span><span class="p">()</span>
|
||||
</span><span id="residual_plot-963"><a href="#residual_plot-963"><span class="linenos">963</span></a>
|
||||
</span><span id="residual_plot-964"><a href="#residual_plot-964"><span class="linenos">964</span></a> <span class="n">residuals</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">([</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y</span><span class="p">])</span> <span class="o">-</span> <span class="n">func</span><span class="p">([</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">fit_res</span><span class="p">],</span> <span class="n">x</span><span class="p">))</span> <span class="o">/</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">([</span><span class="n">o</span><span class="o">.</span><span class="n">dvalue</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y</span><span class="p">])</span>
|
||||
</span><span id="residual_plot-965"><a href="#residual_plot-965"><span class="linenos">965</span></a> <span class="n">ax1</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
|
||||
</span><span id="residual_plot-966"><a href="#residual_plot-966"><span class="linenos">966</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">residuals</span><span class="p">,</span> <span class="s1">'ko'</span><span class="p">,</span> <span class="n">ls</span><span class="o">=</span><span class="s1">'none'</span><span class="p">,</span> <span class="n">markersize</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span>
|
||||
</span><span id="residual_plot-967"><a href="#residual_plot-967"><span class="linenos">967</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">direction</span><span class="o">=</span><span class="s1">'out'</span><span class="p">)</span>
|
||||
</span><span id="residual_plot-968"><a href="#residual_plot-968"><span class="linenos">968</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">"x"</span><span class="p">,</span> <span class="n">bottom</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">top</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">labelbottom</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
</span><span id="residual_plot-969"><a href="#residual_plot-969"><span class="linenos">969</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">axhline</span><span class="p">(</span><span class="n">y</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">ls</span><span class="o">=</span><span class="s1">'--'</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">'k'</span><span class="p">,</span> <span class="n">marker</span><span class="o">=</span><span class="s2">" "</span><span class="p">)</span>
|
||||
</span><span id="residual_plot-970"><a href="#residual_plot-970"><span class="linenos">970</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">fill_between</span><span class="p">(</span><span class="n">x_samples</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">facecolor</span><span class="o">=</span><span class="s1">'k'</span><span class="p">)</span>
|
||||
</span><span id="residual_plot-971"><a href="#residual_plot-971"><span class="linenos">971</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">([</span><span class="n">xstart</span><span class="p">,</span> <span class="n">xstop</span><span class="p">])</span>
|
||||
</span><span id="residual_plot-972"><a href="#residual_plot-972"><span class="linenos">972</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">'Residuals'</span><span class="p">)</span>
|
||||
</span><span id="residual_plot-973"><a href="#residual_plot-973"><span class="linenos">973</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">subplots_adjust</span><span class="p">(</span><span class="n">wspace</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">hspace</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
|
||||
</span><span id="residual_plot-974"><a href="#residual_plot-974"><span class="linenos">974</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">draw</span><span class="p">()</span>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="residual_plot-989"><a href="#residual_plot-989"><span class="linenos"> 989</span></a><span class="k">def</span> <span class="nf">residual_plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">fit_res</span><span class="p">):</span>
|
||||
</span><span id="residual_plot-990"><a href="#residual_plot-990"><span class="linenos"> 990</span></a><span class="w"> </span><span class="sd">"""Generates a plot which compares the fit to the data and displays the corresponding residuals</span>
|
||||
</span><span id="residual_plot-991"><a href="#residual_plot-991"><span class="linenos"> 991</span></a>
|
||||
</span><span id="residual_plot-992"><a href="#residual_plot-992"><span class="linenos"> 992</span></a><span class="sd"> Returns</span>
|
||||
</span><span id="residual_plot-993"><a href="#residual_plot-993"><span class="linenos"> 993</span></a><span class="sd"> -------</span>
|
||||
</span><span id="residual_plot-994"><a href="#residual_plot-994"><span class="linenos"> 994</span></a><span class="sd"> None</span>
|
||||
</span><span id="residual_plot-995"><a href="#residual_plot-995"><span class="linenos"> 995</span></a><span class="sd"> """</span>
|
||||
</span><span id="residual_plot-996"><a href="#residual_plot-996"><span class="linenos"> 996</span></a> <span class="n">sorted_x</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
|
||||
</span><span id="residual_plot-997"><a href="#residual_plot-997"><span class="linenos"> 997</span></a> <span class="n">xstart</span> <span class="o">=</span> <span class="n">sorted_x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="p">(</span><span class="n">sorted_x</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">sorted_x</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||
</span><span id="residual_plot-998"><a href="#residual_plot-998"><span class="linenos"> 998</span></a> <span class="n">xstop</span> <span class="o">=</span> <span class="n">sorted_x</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="p">(</span><span class="n">sorted_x</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">sorted_x</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">])</span>
|
||||
</span><span id="residual_plot-999"><a href="#residual_plot-999"><span class="linenos"> 999</span></a> <span class="n">x_samples</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">xstart</span><span class="p">,</span> <span class="n">xstop</span> <span class="o">+</span> <span class="mf">0.01</span><span class="p">,</span> <span class="mf">0.01</span><span class="p">)</span>
|
||||
</span><span id="residual_plot-1000"><a href="#residual_plot-1000"><span class="linenos">1000</span></a>
|
||||
</span><span id="residual_plot-1001"><a href="#residual_plot-1001"><span class="linenos">1001</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mi">8</span> <span class="o">/</span> <span class="mf">1.618</span><span class="p">))</span>
|
||||
</span><span id="residual_plot-1002"><a href="#residual_plot-1002"><span class="linenos">1002</span></a> <span class="n">gs</span> <span class="o">=</span> <span class="n">gridspec</span><span class="o">.</span><span class="n">GridSpec</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">height_ratios</span><span class="o">=</span><span class="p">[</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> <span class="n">wspace</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">hspace</span><span class="o">=</span><span class="mf">0.0</span><span class="p">)</span>
|
||||
</span><span id="residual_plot-1003"><a href="#residual_plot-1003"><span class="linenos">1003</span></a> <span class="n">ax0</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||
</span><span id="residual_plot-1004"><a href="#residual_plot-1004"><span class="linenos">1004</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">errorbar</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y</span><span class="p">],</span> <span class="n">yerr</span><span class="o">=</span><span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">dvalue</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y</span><span class="p">],</span> <span class="n">ls</span><span class="o">=</span><span class="s1">'none'</span><span class="p">,</span> <span class="n">fmt</span><span class="o">=</span><span class="s1">'o'</span><span class="p">,</span> <span class="n">capsize</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">markersize</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'Data'</span><span class="p">)</span>
|
||||
</span><span id="residual_plot-1005"><a href="#residual_plot-1005"><span class="linenos">1005</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x_samples</span><span class="p">,</span> <span class="n">func</span><span class="p">([</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">fit_res</span><span class="p">],</span> <span class="n">x_samples</span><span class="p">),</span> <span class="n">label</span><span class="o">=</span><span class="s1">'Fit'</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">ls</span><span class="o">=</span><span class="s1">'-'</span><span class="p">,</span> <span class="n">ms</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
|
||||
</span><span id="residual_plot-1006"><a href="#residual_plot-1006"><span class="linenos">1006</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">set_xticklabels</span><span class="p">([])</span>
|
||||
</span><span id="residual_plot-1007"><a href="#residual_plot-1007"><span class="linenos">1007</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">([</span><span class="n">xstart</span><span class="p">,</span> <span class="n">xstop</span><span class="p">])</span>
|
||||
</span><span id="residual_plot-1008"><a href="#residual_plot-1008"><span class="linenos">1008</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">set_xticklabels</span><span class="p">([])</span>
|
||||
</span><span id="residual_plot-1009"><a href="#residual_plot-1009"><span class="linenos">1009</span></a> <span class="n">ax0</span><span class="o">.</span><span class="n">legend</span><span class="p">()</span>
|
||||
</span><span id="residual_plot-1010"><a href="#residual_plot-1010"><span class="linenos">1010</span></a>
|
||||
</span><span id="residual_plot-1011"><a href="#residual_plot-1011"><span class="linenos">1011</span></a> <span class="n">residuals</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">([</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y</span><span class="p">])</span> <span class="o">-</span> <span class="n">func</span><span class="p">([</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">fit_res</span><span class="p">],</span> <span class="n">x</span><span class="p">))</span> <span class="o">/</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">([</span><span class="n">o</span><span class="o">.</span><span class="n">dvalue</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">y</span><span class="p">])</span>
|
||||
</span><span id="residual_plot-1012"><a href="#residual_plot-1012"><span class="linenos">1012</span></a> <span class="n">ax1</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="n">gs</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
|
||||
</span><span id="residual_plot-1013"><a href="#residual_plot-1013"><span class="linenos">1013</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">residuals</span><span class="p">,</span> <span class="s1">'ko'</span><span class="p">,</span> <span class="n">ls</span><span class="o">=</span><span class="s1">'none'</span><span class="p">,</span> <span class="n">markersize</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span>
|
||||
</span><span id="residual_plot-1014"><a href="#residual_plot-1014"><span class="linenos">1014</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">direction</span><span class="o">=</span><span class="s1">'out'</span><span class="p">)</span>
|
||||
</span><span id="residual_plot-1015"><a href="#residual_plot-1015"><span class="linenos">1015</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">"x"</span><span class="p">,</span> <span class="n">bottom</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">top</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">labelbottom</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
</span><span id="residual_plot-1016"><a href="#residual_plot-1016"><span class="linenos">1016</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">axhline</span><span class="p">(</span><span class="n">y</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">ls</span><span class="o">=</span><span class="s1">'--'</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">'k'</span><span class="p">,</span> <span class="n">marker</span><span class="o">=</span><span class="s2">" "</span><span class="p">)</span>
|
||||
</span><span id="residual_plot-1017"><a href="#residual_plot-1017"><span class="linenos">1017</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">fill_between</span><span class="p">(</span><span class="n">x_samples</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">facecolor</span><span class="o">=</span><span class="s1">'k'</span><span class="p">)</span>
|
||||
</span><span id="residual_plot-1018"><a href="#residual_plot-1018"><span class="linenos">1018</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">([</span><span class="n">xstart</span><span class="p">,</span> <span class="n">xstop</span><span class="p">])</span>
|
||||
</span><span id="residual_plot-1019"><a href="#residual_plot-1019"><span class="linenos">1019</span></a> <span class="n">ax1</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">'Residuals'</span><span class="p">)</span>
|
||||
</span><span id="residual_plot-1020"><a href="#residual_plot-1020"><span class="linenos">1020</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">subplots_adjust</span><span class="p">(</span><span class="n">wspace</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">hspace</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
|
||||
</span><span id="residual_plot-1021"><a href="#residual_plot-1021"><span class="linenos">1021</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">draw</span><span class="p">()</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
@ -1993,28 +2040,28 @@ LIist of fitted observables.</li>
|
|||
|
||||
</div>
|
||||
<a class="headerlink" href="#error_band"></a>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="error_band-977"><a href="#error_band-977"><span class="linenos">977</span></a><span class="k">def</span> <span class="nf">error_band</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">beta</span><span class="p">):</span>
|
||||
</span><span id="error_band-978"><a href="#error_band-978"><span class="linenos">978</span></a><span class="w"> </span><span class="sd">"""Calculate the error band for an array of sample values x, for given fit function func with optimized parameters beta.</span>
|
||||
</span><span id="error_band-979"><a href="#error_band-979"><span class="linenos">979</span></a>
|
||||
</span><span id="error_band-980"><a href="#error_band-980"><span class="linenos">980</span></a><span class="sd"> Returns</span>
|
||||
</span><span id="error_band-981"><a href="#error_band-981"><span class="linenos">981</span></a><span class="sd"> -------</span>
|
||||
</span><span id="error_band-982"><a href="#error_band-982"><span class="linenos">982</span></a><span class="sd"> err : np.array(Obs)</span>
|
||||
</span><span id="error_band-983"><a href="#error_band-983"><span class="linenos">983</span></a><span class="sd"> Error band for an array of sample values x</span>
|
||||
</span><span id="error_band-984"><a href="#error_band-984"><span class="linenos">984</span></a><span class="sd"> """</span>
|
||||
</span><span id="error_band-985"><a href="#error_band-985"><span class="linenos">985</span></a> <span class="n">cov</span> <span class="o">=</span> <span class="n">covariance</span><span class="p">(</span><span class="n">beta</span><span class="p">)</span>
|
||||
</span><span id="error_band-986"><a href="#error_band-986"><span class="linenos">986</span></a> <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">any</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">cov</span> <span class="o">-</span> <span class="n">cov</span><span class="o">.</span><span class="n">T</span><span class="p">)</span> <span class="o">></span> <span class="mi">1000</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">finfo</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span><span class="o">.</span><span class="n">eps</span><span class="p">):</span>
|
||||
</span><span id="error_band-987"><a href="#error_band-987"><span class="linenos">987</span></a> <span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s2">"Covariance matrix is not symmetric within floating point precision"</span><span class="p">,</span> <span class="ne">RuntimeWarning</span><span class="p">)</span>
|
||||
</span><span id="error_band-988"><a href="#error_band-988"><span class="linenos">988</span></a>
|
||||
</span><span id="error_band-989"><a href="#error_band-989"><span class="linenos">989</span></a> <span class="n">deriv</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
</span><span id="error_band-990"><a href="#error_band-990"><span class="linenos">990</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">item</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
|
||||
</span><span id="error_band-991"><a href="#error_band-991"><span class="linenos">991</span></a> <span class="n">deriv</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">egrad</span><span class="p">(</span><span class="n">func</span><span class="p">)([</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">beta</span><span class="p">],</span> <span class="n">item</span><span class="p">)))</span>
|
||||
</span><span id="error_band-992"><a href="#error_band-992"><span class="linenos">992</span></a>
|
||||
</span><span id="error_band-993"><a href="#error_band-993"><span class="linenos">993</span></a> <span class="n">err</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
</span><span id="error_band-994"><a href="#error_band-994"><span class="linenos">994</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">item</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
|
||||
</span><span id="error_band-995"><a href="#error_band-995"><span class="linenos">995</span></a> <span class="n">err</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">deriv</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">@</span> <span class="n">cov</span> <span class="o">@</span> <span class="n">deriv</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span>
|
||||
</span><span id="error_band-996"><a href="#error_band-996"><span class="linenos">996</span></a> <span class="n">err</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">err</span><span class="p">)</span>
|
||||
</span><span id="error_band-997"><a href="#error_band-997"><span class="linenos">997</span></a>
|
||||
</span><span id="error_band-998"><a href="#error_band-998"><span class="linenos">998</span></a> <span class="k">return</span> <span class="n">err</span>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="error_band-1024"><a href="#error_band-1024"><span class="linenos">1024</span></a><span class="k">def</span> <span class="nf">error_band</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">beta</span><span class="p">):</span>
|
||||
</span><span id="error_band-1025"><a href="#error_band-1025"><span class="linenos">1025</span></a><span class="w"> </span><span class="sd">"""Calculate the error band for an array of sample values x, for given fit function func with optimized parameters beta.</span>
|
||||
</span><span id="error_band-1026"><a href="#error_band-1026"><span class="linenos">1026</span></a>
|
||||
</span><span id="error_band-1027"><a href="#error_band-1027"><span class="linenos">1027</span></a><span class="sd"> Returns</span>
|
||||
</span><span id="error_band-1028"><a href="#error_band-1028"><span class="linenos">1028</span></a><span class="sd"> -------</span>
|
||||
</span><span id="error_band-1029"><a href="#error_band-1029"><span class="linenos">1029</span></a><span class="sd"> err : np.array(Obs)</span>
|
||||
</span><span id="error_band-1030"><a href="#error_band-1030"><span class="linenos">1030</span></a><span class="sd"> Error band for an array of sample values x</span>
|
||||
</span><span id="error_band-1031"><a href="#error_band-1031"><span class="linenos">1031</span></a><span class="sd"> """</span>
|
||||
</span><span id="error_band-1032"><a href="#error_band-1032"><span class="linenos">1032</span></a> <span class="n">cov</span> <span class="o">=</span> <span class="n">covariance</span><span class="p">(</span><span class="n">beta</span><span class="p">)</span>
|
||||
</span><span id="error_band-1033"><a href="#error_band-1033"><span class="linenos">1033</span></a> <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">any</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">cov</span> <span class="o">-</span> <span class="n">cov</span><span class="o">.</span><span class="n">T</span><span class="p">)</span> <span class="o">></span> <span class="mi">1000</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">finfo</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span><span class="o">.</span><span class="n">eps</span><span class="p">):</span>
|
||||
</span><span id="error_band-1034"><a href="#error_band-1034"><span class="linenos">1034</span></a> <span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s2">"Covariance matrix is not symmetric within floating point precision"</span><span class="p">,</span> <span class="ne">RuntimeWarning</span><span class="p">)</span>
|
||||
</span><span id="error_band-1035"><a href="#error_band-1035"><span class="linenos">1035</span></a>
|
||||
</span><span id="error_band-1036"><a href="#error_band-1036"><span class="linenos">1036</span></a> <span class="n">deriv</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
</span><span id="error_band-1037"><a href="#error_band-1037"><span class="linenos">1037</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">item</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
|
||||
</span><span id="error_band-1038"><a href="#error_band-1038"><span class="linenos">1038</span></a> <span class="n">deriv</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">egrad</span><span class="p">(</span><span class="n">func</span><span class="p">)([</span><span class="n">o</span><span class="o">.</span><span class="n">value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">beta</span><span class="p">],</span> <span class="n">item</span><span class="p">)))</span>
|
||||
</span><span id="error_band-1039"><a href="#error_band-1039"><span class="linenos">1039</span></a>
|
||||
</span><span id="error_band-1040"><a href="#error_band-1040"><span class="linenos">1040</span></a> <span class="n">err</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
</span><span id="error_band-1041"><a href="#error_band-1041"><span class="linenos">1041</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">item</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
|
||||
</span><span id="error_band-1042"><a href="#error_band-1042"><span class="linenos">1042</span></a> <span class="n">err</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">deriv</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">@</span> <span class="n">cov</span> <span class="o">@</span> <span class="n">deriv</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span>
|
||||
</span><span id="error_band-1043"><a href="#error_band-1043"><span class="linenos">1043</span></a> <span class="n">err</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">err</span><span class="p">)</span>
|
||||
</span><span id="error_band-1044"><a href="#error_band-1044"><span class="linenos">1044</span></a>
|
||||
</span><span id="error_band-1045"><a href="#error_band-1045"><span class="linenos">1045</span></a> <span class="k">return</span> <span class="n">err</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
@ -2041,48 +2088,48 @@ Error band for an array of sample values x</li>
|
|||
|
||||
</div>
|
||||
<a class="headerlink" href="#ks_test"></a>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="ks_test-1001"><a href="#ks_test-1001"><span class="linenos">1001</span></a><span class="k">def</span> <span class="nf">ks_test</span><span class="p">(</span><span class="n">objects</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
</span><span id="ks_test-1002"><a href="#ks_test-1002"><span class="linenos">1002</span></a><span class="w"> </span><span class="sd">"""Performs a Kolmogorov–Smirnov test for the p-values of all fit object.</span>
|
||||
</span><span id="ks_test-1003"><a href="#ks_test-1003"><span class="linenos">1003</span></a>
|
||||
</span><span id="ks_test-1004"><a href="#ks_test-1004"><span class="linenos">1004</span></a><span class="sd"> Parameters</span>
|
||||
</span><span id="ks_test-1005"><a href="#ks_test-1005"><span class="linenos">1005</span></a><span class="sd"> ----------</span>
|
||||
</span><span id="ks_test-1006"><a href="#ks_test-1006"><span class="linenos">1006</span></a><span class="sd"> objects : list</span>
|
||||
</span><span id="ks_test-1007"><a href="#ks_test-1007"><span class="linenos">1007</span></a><span class="sd"> List of fit results to include in the analysis (optional).</span>
|
||||
</span><span id="ks_test-1008"><a href="#ks_test-1008"><span class="linenos">1008</span></a>
|
||||
</span><span id="ks_test-1009"><a href="#ks_test-1009"><span class="linenos">1009</span></a><span class="sd"> Returns</span>
|
||||
</span><span id="ks_test-1010"><a href="#ks_test-1010"><span class="linenos">1010</span></a><span class="sd"> -------</span>
|
||||
</span><span id="ks_test-1011"><a href="#ks_test-1011"><span class="linenos">1011</span></a><span class="sd"> None</span>
|
||||
</span><span id="ks_test-1012"><a href="#ks_test-1012"><span class="linenos">1012</span></a><span class="sd"> """</span>
|
||||
</span><span id="ks_test-1013"><a href="#ks_test-1013"><span class="linenos">1013</span></a>
|
||||
</span><span id="ks_test-1014"><a href="#ks_test-1014"><span class="linenos">1014</span></a> <span class="k">if</span> <span class="n">objects</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
</span><span id="ks_test-1015"><a href="#ks_test-1015"><span class="linenos">1015</span></a> <span class="n">obs_list</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
</span><span id="ks_test-1016"><a href="#ks_test-1016"><span class="linenos">1016</span></a> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">gc</span><span class="o">.</span><span class="n">get_objects</span><span class="p">():</span>
|
||||
</span><span id="ks_test-1017"><a href="#ks_test-1017"><span class="linenos">1017</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">Fit_result</span><span class="p">):</span>
|
||||
</span><span id="ks_test-1018"><a href="#ks_test-1018"><span class="linenos">1018</span></a> <span class="n">obs_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
|
||||
</span><span id="ks_test-1019"><a href="#ks_test-1019"><span class="linenos">1019</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="ks_test-1020"><a href="#ks_test-1020"><span class="linenos">1020</span></a> <span class="n">obs_list</span> <span class="o">=</span> <span class="n">objects</span>
|
||||
</span><span id="ks_test-1021"><a href="#ks_test-1021"><span class="linenos">1021</span></a>
|
||||
</span><span id="ks_test-1022"><a href="#ks_test-1022"><span class="linenos">1022</span></a> <span class="n">p_values</span> <span class="o">=</span> <span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">p_value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">obs_list</span><span class="p">]</span>
|
||||
</span><span id="ks_test-1023"><a href="#ks_test-1023"><span class="linenos">1023</span></a>
|
||||
</span><span id="ks_test-1024"><a href="#ks_test-1024"><span class="linenos">1024</span></a> <span class="n">bins</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">p_values</span><span class="p">)</span>
|
||||
</span><span id="ks_test-1025"><a href="#ks_test-1025"><span class="linenos">1025</span></a> <span class="n">x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mf">1.001</span><span class="p">,</span> <span class="mf">0.001</span><span class="p">)</span>
|
||||
</span><span id="ks_test-1026"><a href="#ks_test-1026"><span class="linenos">1026</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="s1">'k'</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
||||
</span><span id="ks_test-1027"><a href="#ks_test-1027"><span class="linenos">1027</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">xlim</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
||||
</span><span id="ks_test-1028"><a href="#ks_test-1028"><span class="linenos">1028</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">ylim</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
||||
</span><span id="ks_test-1029"><a href="#ks_test-1029"><span class="linenos">1029</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'p-value'</span><span class="p">)</span>
|
||||
</span><span id="ks_test-1030"><a href="#ks_test-1030"><span class="linenos">1030</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'Cumulative probability'</span><span class="p">)</span>
|
||||
</span><span id="ks_test-1031"><a href="#ks_test-1031"><span class="linenos">1031</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">bins</span><span class="p">)</span> <span class="o">+</span> <span class="s1">' p-values'</span><span class="p">)</span>
|
||||
</span><span id="ks_test-1032"><a href="#ks_test-1032"><span class="linenos">1032</span></a>
|
||||
</span><span id="ks_test-1033"><a href="#ks_test-1033"><span class="linenos">1033</span></a> <span class="n">n</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">bins</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">(</span><span class="n">bins</span><span class="p">)</span>
|
||||
</span><span id="ks_test-1034"><a href="#ks_test-1034"><span class="linenos">1034</span></a> <span class="n">Xs</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">p_values</span><span class="p">)</span>
|
||||
</span><span id="ks_test-1035"><a href="#ks_test-1035"><span class="linenos">1035</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">step</span><span class="p">(</span><span class="n">Xs</span><span class="p">,</span> <span class="n">n</span><span class="p">)</span>
|
||||
</span><span id="ks_test-1036"><a href="#ks_test-1036"><span class="linenos">1036</span></a> <span class="n">diffs</span> <span class="o">=</span> <span class="n">n</span> <span class="o">-</span> <span class="n">Xs</span>
|
||||
</span><span id="ks_test-1037"><a href="#ks_test-1037"><span class="linenos">1037</span></a> <span class="n">loc_max_diff</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">argmax</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">diffs</span><span class="p">))</span>
|
||||
</span><span id="ks_test-1038"><a href="#ks_test-1038"><span class="linenos">1038</span></a> <span class="n">loc</span> <span class="o">=</span> <span class="n">Xs</span><span class="p">[</span><span class="n">loc_max_diff</span><span class="p">]</span>
|
||||
</span><span id="ks_test-1039"><a href="#ks_test-1039"><span class="linenos">1039</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="s1">''</span><span class="p">,</span> <span class="n">xy</span><span class="o">=</span><span class="p">(</span><span class="n">loc</span><span class="p">,</span> <span class="n">loc</span><span class="p">),</span> <span class="n">xytext</span><span class="o">=</span><span class="p">(</span><span class="n">loc</span><span class="p">,</span> <span class="n">loc</span> <span class="o">+</span> <span class="n">diffs</span><span class="p">[</span><span class="n">loc_max_diff</span><span class="p">]),</span> <span class="n">arrowprops</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">arrowstyle</span><span class="o">=</span><span class="s1">'<->'</span><span class="p">,</span> <span class="n">shrinkA</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">shrinkB</span><span class="o">=</span><span class="mi">0</span><span class="p">))</span>
|
||||
</span><span id="ks_test-1040"><a href="#ks_test-1040"><span class="linenos">1040</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">draw</span><span class="p">()</span>
|
||||
</span><span id="ks_test-1041"><a href="#ks_test-1041"><span class="linenos">1041</span></a>
|
||||
</span><span id="ks_test-1042"><a href="#ks_test-1042"><span class="linenos">1042</span></a> <span class="nb">print</span><span class="p">(</span><span class="n">scipy</span><span class="o">.</span><span class="n">stats</span><span class="o">.</span><span class="n">kstest</span><span class="p">(</span><span class="n">p_values</span><span class="p">,</span> <span class="s1">'uniform'</span><span class="p">))</span>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="ks_test-1048"><a href="#ks_test-1048"><span class="linenos">1048</span></a><span class="k">def</span> <span class="nf">ks_test</span><span class="p">(</span><span class="n">objects</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
</span><span id="ks_test-1049"><a href="#ks_test-1049"><span class="linenos">1049</span></a><span class="w"> </span><span class="sd">"""Performs a Kolmogorov–Smirnov test for the p-values of all fit object.</span>
|
||||
</span><span id="ks_test-1050"><a href="#ks_test-1050"><span class="linenos">1050</span></a>
|
||||
</span><span id="ks_test-1051"><a href="#ks_test-1051"><span class="linenos">1051</span></a><span class="sd"> Parameters</span>
|
||||
</span><span id="ks_test-1052"><a href="#ks_test-1052"><span class="linenos">1052</span></a><span class="sd"> ----------</span>
|
||||
</span><span id="ks_test-1053"><a href="#ks_test-1053"><span class="linenos">1053</span></a><span class="sd"> objects : list</span>
|
||||
</span><span id="ks_test-1054"><a href="#ks_test-1054"><span class="linenos">1054</span></a><span class="sd"> List of fit results to include in the analysis (optional).</span>
|
||||
</span><span id="ks_test-1055"><a href="#ks_test-1055"><span class="linenos">1055</span></a>
|
||||
</span><span id="ks_test-1056"><a href="#ks_test-1056"><span class="linenos">1056</span></a><span class="sd"> Returns</span>
|
||||
</span><span id="ks_test-1057"><a href="#ks_test-1057"><span class="linenos">1057</span></a><span class="sd"> -------</span>
|
||||
</span><span id="ks_test-1058"><a href="#ks_test-1058"><span class="linenos">1058</span></a><span class="sd"> None</span>
|
||||
</span><span id="ks_test-1059"><a href="#ks_test-1059"><span class="linenos">1059</span></a><span class="sd"> """</span>
|
||||
</span><span id="ks_test-1060"><a href="#ks_test-1060"><span class="linenos">1060</span></a>
|
||||
</span><span id="ks_test-1061"><a href="#ks_test-1061"><span class="linenos">1061</span></a> <span class="k">if</span> <span class="n">objects</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
</span><span id="ks_test-1062"><a href="#ks_test-1062"><span class="linenos">1062</span></a> <span class="n">obs_list</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
</span><span id="ks_test-1063"><a href="#ks_test-1063"><span class="linenos">1063</span></a> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">gc</span><span class="o">.</span><span class="n">get_objects</span><span class="p">():</span>
|
||||
</span><span id="ks_test-1064"><a href="#ks_test-1064"><span class="linenos">1064</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">Fit_result</span><span class="p">):</span>
|
||||
</span><span id="ks_test-1065"><a href="#ks_test-1065"><span class="linenos">1065</span></a> <span class="n">obs_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
|
||||
</span><span id="ks_test-1066"><a href="#ks_test-1066"><span class="linenos">1066</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="ks_test-1067"><a href="#ks_test-1067"><span class="linenos">1067</span></a> <span class="n">obs_list</span> <span class="o">=</span> <span class="n">objects</span>
|
||||
</span><span id="ks_test-1068"><a href="#ks_test-1068"><span class="linenos">1068</span></a>
|
||||
</span><span id="ks_test-1069"><a href="#ks_test-1069"><span class="linenos">1069</span></a> <span class="n">p_values</span> <span class="o">=</span> <span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">p_value</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">obs_list</span><span class="p">]</span>
|
||||
</span><span id="ks_test-1070"><a href="#ks_test-1070"><span class="linenos">1070</span></a>
|
||||
</span><span id="ks_test-1071"><a href="#ks_test-1071"><span class="linenos">1071</span></a> <span class="n">bins</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">p_values</span><span class="p">)</span>
|
||||
</span><span id="ks_test-1072"><a href="#ks_test-1072"><span class="linenos">1072</span></a> <span class="n">x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mf">1.001</span><span class="p">,</span> <span class="mf">0.001</span><span class="p">)</span>
|
||||
</span><span id="ks_test-1073"><a href="#ks_test-1073"><span class="linenos">1073</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="s1">'k'</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
||||
</span><span id="ks_test-1074"><a href="#ks_test-1074"><span class="linenos">1074</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">xlim</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
||||
</span><span id="ks_test-1075"><a href="#ks_test-1075"><span class="linenos">1075</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">ylim</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
||||
</span><span id="ks_test-1076"><a href="#ks_test-1076"><span class="linenos">1076</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'p-value'</span><span class="p">)</span>
|
||||
</span><span id="ks_test-1077"><a href="#ks_test-1077"><span class="linenos">1077</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'Cumulative probability'</span><span class="p">)</span>
|
||||
</span><span id="ks_test-1078"><a href="#ks_test-1078"><span class="linenos">1078</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">bins</span><span class="p">)</span> <span class="o">+</span> <span class="s1">' p-values'</span><span class="p">)</span>
|
||||
</span><span id="ks_test-1079"><a href="#ks_test-1079"><span class="linenos">1079</span></a>
|
||||
</span><span id="ks_test-1080"><a href="#ks_test-1080"><span class="linenos">1080</span></a> <span class="n">n</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">bins</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">(</span><span class="n">bins</span><span class="p">)</span>
|
||||
</span><span id="ks_test-1081"><a href="#ks_test-1081"><span class="linenos">1081</span></a> <span class="n">Xs</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">p_values</span><span class="p">)</span>
|
||||
</span><span id="ks_test-1082"><a href="#ks_test-1082"><span class="linenos">1082</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">step</span><span class="p">(</span><span class="n">Xs</span><span class="p">,</span> <span class="n">n</span><span class="p">)</span>
|
||||
</span><span id="ks_test-1083"><a href="#ks_test-1083"><span class="linenos">1083</span></a> <span class="n">diffs</span> <span class="o">=</span> <span class="n">n</span> <span class="o">-</span> <span class="n">Xs</span>
|
||||
</span><span id="ks_test-1084"><a href="#ks_test-1084"><span class="linenos">1084</span></a> <span class="n">loc_max_diff</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">argmax</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">diffs</span><span class="p">))</span>
|
||||
</span><span id="ks_test-1085"><a href="#ks_test-1085"><span class="linenos">1085</span></a> <span class="n">loc</span> <span class="o">=</span> <span class="n">Xs</span><span class="p">[</span><span class="n">loc_max_diff</span><span class="p">]</span>
|
||||
</span><span id="ks_test-1086"><a href="#ks_test-1086"><span class="linenos">1086</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="s1">''</span><span class="p">,</span> <span class="n">xy</span><span class="o">=</span><span class="p">(</span><span class="n">loc</span><span class="p">,</span> <span class="n">loc</span><span class="p">),</span> <span class="n">xytext</span><span class="o">=</span><span class="p">(</span><span class="n">loc</span><span class="p">,</span> <span class="n">loc</span> <span class="o">+</span> <span class="n">diffs</span><span class="p">[</span><span class="n">loc_max_diff</span><span class="p">]),</span> <span class="n">arrowprops</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">arrowstyle</span><span class="o">=</span><span class="s1">'<->'</span><span class="p">,</span> <span class="n">shrinkA</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">shrinkB</span><span class="o">=</span><span class="mi">0</span><span class="p">))</span>
|
||||
</span><span id="ks_test-1087"><a href="#ks_test-1087"><span class="linenos">1087</span></a> <span class="n">plt</span><span class="o">.</span><span class="n">draw</span><span class="p">()</span>
|
||||
</span><span id="ks_test-1088"><a href="#ks_test-1088"><span class="linenos">1088</span></a>
|
||||
</span><span id="ks_test-1089"><a href="#ks_test-1089"><span class="linenos">1089</span></a> <span class="nb">print</span><span class="p">(</span><span class="n">scipy</span><span class="o">.</span><span class="n">stats</span><span class="o">.</span><span class="n">kstest</span><span class="p">(</span><span class="n">p_values</span><span class="p">,</span> <span class="s1">'uniform'</span><span class="p">))</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue