Regression diagnostics
======================


.. _regression_diagnostics_notebook:

`Link to Notebook GitHub <https://github.com/statsmodels/statsmodels/blob/master/examples/notebooks/regression_diagnostics.ipynb>`_

.. raw:: html

   
   <div class="cell border-box-sizing text_cell rendered">
   <div class="prompt input_prompt">
   </div>
   <div class="inner_cell">
   <div class="text_cell_render border-box-sizing rendered_html">
   <p>This example file shows how to use a few of the <code>statsmodels</code> regression diagnostic tests in a real-life context. You can learn about more tests and find out more information abou the tests here on the <a href="http://statsmodels.sourceforge.net/stable/diagnostic.html">Regression Diagnostics page.</a> </p>
   <p>Note that most of the tests described here only return a tuple of numbers, without any annotation. A full description of outputs is always included in the docstring and in the online <code>statsmodels</code> documentation. For presentation purposes, we use the <code>zip(name,test)</code> construct to pretty-print short descriptions in the examples below.</p>
   </div>
   </div>
   </div>
   <div class="cell border-box-sizing text_cell rendered">
   <div class="prompt input_prompt">
   </div>
   <div class="inner_cell">
   <div class="text_cell_render border-box-sizing rendered_html">
   <h2 id="estimate-a-regression-model">Estimate a regression model</h2>
   </div>
   </div>
   </div>
   <div class="cell border-box-sizing code_cell rendered">
   <div class="input">
   <div class="prompt input_prompt">In&nbsp;[1]:</div>
   <div class="inner_cell">
       <div class="input_area">
   <div class="highlight"><pre><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
   <span class="kn">from</span> <span class="nn">statsmodels.compat</span> <span class="kn">import</span> <span class="n">lzip</span>
   <span class="kn">import</span> <span class="nn">statsmodels</span>
   <span class="kn">import</span> <span class="nn">numpy</span> <span class="kn">as</span> <span class="nn">np</span>
   <span class="kn">import</span> <span class="nn">pandas</span> <span class="kn">as</span> <span class="nn">pd</span>
   <span class="kn">import</span> <span class="nn">statsmodels.formula.api</span> <span class="kn">as</span> <span class="nn">smf</span>
   <span class="kn">import</span> <span class="nn">statsmodels.stats.api</span> <span class="kn">as</span> <span class="nn">sms</span>
   <span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="kn">as</span> <span class="nn">plt</span>
   
   <span class="c1"># Load data</span>
   <span class="n">url</span> <span class="o">=</span> <span class="s1">&#39;http://vincentarelbundock.github.io/Rdatasets/csv/HistData/Guerry.csv&#39;</span>
   <span class="n">dat</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">url</span><span class="p">)</span>
   
   <span class="c1"># Fit regression model (using the natural log of one of the regressaors)</span>
   <span class="n">results</span> <span class="o">=</span> <span class="n">smf</span><span class="o">.</span><span class="n">ols</span><span class="p">(</span><span class="s1">&#39;Lottery ~ Literacy + np.log(Pop1831)&#39;</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">dat</span><span class="p">)</span><span class="o">.</span><span class="n">fit</span><span class="p">()</span>
   
   <span class="c1"># Inspect the results</span>
   <span class="k">print</span><span class="p">(</span><span class="n">results</span><span class="o">.</span><span class="n">summary</span><span class="p">())</span>
   </pre></div>
   
   </div>
   </div>
   </div>
   
   <div class="output_wrapper">
   <div class="output">
   
   
   <div class="output_area"><div class="prompt"></div>
   <div class="output_subarea output_stream output_stdout output_text">
   <pre>
                               OLS Regression Results                            
   ==============================================================================
   Dep. Variable:                Lottery   R-squared:                       0.348
   Model:                            OLS   Adj. R-squared:                  0.333
   Method:                 Least Squares   F-statistic:                     22.20
   Date:                Mon, 04 Apr 2016   Prob (F-statistic):           1.90e-08
   Time:                        23:01:32   Log-Likelihood:                -379.82
   No. Observations:                  86   AIC:                             765.6
   Df Residuals:                      83   BIC:                             773.0
   Df Model:                           2                                         
   Covariance Type:            nonrobust                                         
   ===================================================================================
                         coef    std err          t      P&gt;|t|      [95.0% Conf. Int.]
   -----------------------------------------------------------------------------------
   Intercept         246.4341     35.233      6.995      0.000       176.358   316.510
   Literacy           -0.4889      0.128     -3.832      0.000        -0.743    -0.235
   np.log(Pop1831)   -31.3114      5.977     -5.239      0.000       -43.199   -19.424
   ==============================================================================
   Omnibus:                        3.713   Durbin-Watson:                   2.019
   Prob(Omnibus):                  0.156   Jarque-Bera (JB):                3.394
   Skew:                          -0.487   Prob(JB):                        0.183
   Kurtosis:                       3.003   Cond. No.                         702.
   ==============================================================================
   
   Warnings:
   [1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
   
   </pre>
   </div>
   </div>
   
   </div>
   </div>
   
   </div>
   <div class="cell border-box-sizing text_cell rendered">
   <div class="prompt input_prompt">
   </div>
   <div class="inner_cell">
   <div class="text_cell_render border-box-sizing rendered_html">
   <h2 id="normality-of-the-residuals">Normality of the residuals</h2>
   </div>
   </div>
   </div>
   <div class="cell border-box-sizing text_cell rendered">
   <div class="prompt input_prompt">
   </div>
   <div class="inner_cell">
   <div class="text_cell_render border-box-sizing rendered_html">
   <p>Jarque-Bera test:</p>
   </div>
   </div>
   </div>
   <div class="cell border-box-sizing code_cell rendered">
   <div class="input">
   <div class="prompt input_prompt">In&nbsp;[2]:</div>
   <div class="inner_cell">
       <div class="input_area">
   <div class="highlight"><pre><span class="n">name</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;Jarque-Bera&#39;</span><span class="p">,</span> <span class="s1">&#39;Chi^2 two-tail prob.&#39;</span><span class="p">,</span> <span class="s1">&#39;Skew&#39;</span><span class="p">,</span> <span class="s1">&#39;Kurtosis&#39;</span><span class="p">]</span>
   <span class="n">test</span> <span class="o">=</span> <span class="n">sms</span><span class="o">.</span><span class="n">jarque_bera</span><span class="p">(</span><span class="n">results</span><span class="o">.</span><span class="n">resid</span><span class="p">)</span>
   <span class="n">lzip</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">test</span><span class="p">)</span>
   </pre></div>
   
   </div>
   </div>
   </div>
   
   <div class="output_wrapper">
   <div class="output">
   
   
   <div class="output_area"><div class="prompt output_prompt">Out[2]:</div>
   
   
   <div class="output_text output_subarea output_pyout">
   <pre>
   [(&apos;Jarque-Bera&apos;, 3.3936080248431755),
    (&apos;Chi^2 two-tail prob.&apos;, 0.18326831231663288),
    (&apos;Skew&apos;, -0.48658034311223436),
    (&apos;Kurtosis&apos;, 3.0034177578816346)]
   </pre>
   </div>
   
   </div>
   
   </div>
   </div>
   
   </div>
   <div class="cell border-box-sizing text_cell rendered">
   <div class="prompt input_prompt">
   </div>
   <div class="inner_cell">
   <div class="text_cell_render border-box-sizing rendered_html">
   <p>Omni test:</p>
   </div>
   </div>
   </div>
   <div class="cell border-box-sizing code_cell rendered">
   <div class="input">
   <div class="prompt input_prompt">In&nbsp;[3]:</div>
   <div class="inner_cell">
       <div class="input_area">
   <div class="highlight"><pre><span class="n">name</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;Chi^2&#39;</span><span class="p">,</span> <span class="s1">&#39;Two-tail probability&#39;</span><span class="p">]</span>
   <span class="n">test</span> <span class="o">=</span> <span class="n">sms</span><span class="o">.</span><span class="n">omni_normtest</span><span class="p">(</span><span class="n">results</span><span class="o">.</span><span class="n">resid</span><span class="p">)</span>
   <span class="n">lzip</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">test</span><span class="p">)</span>
   </pre></div>
   
   </div>
   </div>
   </div>
   
   <div class="output_wrapper">
   <div class="output">
   
   
   <div class="output_area"><div class="prompt output_prompt">Out[3]:</div>
   
   
   <div class="output_text output_subarea output_pyout">
   <pre>
   [(&apos;Chi^2&apos;, 3.7134378115971938), (&apos;Two-tail probability&apos;, 0.15618424580304724)]
   </pre>
   </div>
   
   </div>
   
   </div>
   </div>
   
   </div>
   <div class="cell border-box-sizing text_cell rendered">
   <div class="prompt input_prompt">
   </div>
   <div class="inner_cell">
   <div class="text_cell_render border-box-sizing rendered_html">
   <h2 id="influence-tests">Influence tests</h2>
   <p>Once created, an object of class <code>OLSInfluence</code> holds attributes and methods that allow users to assess the influence of each observation. For example, we can compute and extract the first few rows of DFbetas by:</p>
   </div>
   </div>
   </div>
   <div class="cell border-box-sizing code_cell rendered">
   <div class="input">
   <div class="prompt input_prompt">In&nbsp;[4]:</div>
   <div class="inner_cell">
       <div class="input_area">
   <div class="highlight"><pre><span class="kn">from</span> <span class="nn">statsmodels.stats.outliers_influence</span> <span class="kn">import</span> <span class="n">OLSInfluence</span>
   <span class="n">test_class</span> <span class="o">=</span> <span class="n">OLSInfluence</span><span class="p">(</span><span class="n">results</span><span class="p">)</span>
   <span class="n">test_class</span><span class="o">.</span><span class="n">dfbetas</span><span class="p">[:</span><span class="mi">5</span><span class="p">,:]</span>
   </pre></div>
   
   </div>
   </div>
   </div>
   
   <div class="output_wrapper">
   <div class="output">
   
   
   <div class="output_area"><div class="prompt output_prompt">Out[4]:</div>
   
   
   <div class="output_text output_subarea output_pyout">
   <pre>
   array([[-0.003 ,  0.0029,  0.0012],
          [-0.0643,  0.0404,  0.0628],
          [ 0.0155, -0.0356, -0.0091],
          [ 0.179 ,  0.041 , -0.1806],
          [ 0.2968,  0.2125, -0.3214]])
   </pre>
   </div>
   
   </div>
   
   </div>
   </div>
   
   </div>
   <div class="cell border-box-sizing text_cell rendered">
   <div class="prompt input_prompt">
   </div>
   <div class="inner_cell">
   <div class="text_cell_render border-box-sizing rendered_html">
   <p>Explore other options by typing <code>dir(influence_test)</code></p>
   <p>Useful information on leverage can also be plotted:</p>
   </div>
   </div>
   </div>
   <div class="cell border-box-sizing code_cell rendered">
   <div class="input">
   <div class="prompt input_prompt">In&nbsp;[5]:</div>
   <div class="inner_cell">
       <div class="input_area">
   <div class="highlight"><pre><span class="kn">from</span> <span class="nn">statsmodels.graphics.regressionplots</span> <span class="kn">import</span> <span class="n">plot_leverage_resid2</span>
   <span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</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">6</span><span class="p">))</span>
   <span class="n">fig</span> <span class="o">=</span> <span class="n">plot_leverage_resid2</span><span class="p">(</span><span class="n">results</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">ax</span><span class="p">)</span>
   </pre></div>
   
   </div>
   </div>
   </div>
   
   <div class="output_wrapper">
   <div class="output">
   
   
   <div class="output_area"><div class="prompt"></div>
   <div class="output_subarea output_stream output_stdout output_text">
   <pre>
   Error in callback &lt;function post_execute at 0xb082b2b0&gt; (for post_execute):
   
   </pre>
   </div>
   </div>
   
   <div class="output_area"><div class="prompt"></div>
   <div class="output_subarea output_text output_pyerr">
   <pre>
   <span class="ansired">---------------------------------------------------------------------------</span>
   <span class="ansired">RuntimeError</span>                              Traceback (most recent call last)
   <span class="ansigreen">/usr/lib/python2.7/dist-packages/matplotlib/pyplot.pyc</span> in <span class="ansicyan">post_execute</span><span class="ansiblue">()</span>
   <span class="ansigreen">    145</span>             <span class="ansigreen">def</span> post_execute<span class="ansiblue">(</span><span class="ansiblue">)</span><span class="ansiblue">:</span><span class="ansiblue"></span>
   <span class="ansigreen">    146</span>                 <span class="ansigreen">if</span> matplotlib<span class="ansiblue">.</span>is_interactive<span class="ansiblue">(</span><span class="ansiblue">)</span><span class="ansiblue">:</span><span class="ansiblue"></span>
   <span class="ansigreen">--&gt; 147</span><span class="ansired">                     </span>draw_all<span class="ansiblue">(</span><span class="ansiblue">)</span><span class="ansiblue"></span>
   <span class="ansigreen">    148</span> <span class="ansiblue"></span>
   <span class="ansigreen">    149</span>             <span class="ansired"># IPython &gt;= 2</span><span class="ansiblue"></span><span class="ansiblue"></span>
   
   <span class="ansigreen">/usr/lib/python2.7/dist-packages/matplotlib/_pylab_helpers.pyc</span> in <span class="ansicyan">draw_all</span><span class="ansiblue">(cls, force)</span>
   <span class="ansigreen">    148</span>         <span class="ansigreen">for</span> f_mgr <span class="ansigreen">in</span> cls<span class="ansiblue">.</span>get_all_fig_managers<span class="ansiblue">(</span><span class="ansiblue">)</span><span class="ansiblue">:</span><span class="ansiblue"></span>
   <span class="ansigreen">    149</span>             <span class="ansigreen">if</span> force <span class="ansigreen">or</span> f_mgr<span class="ansiblue">.</span>canvas<span class="ansiblue">.</span>figure<span class="ansiblue">.</span>stale<span class="ansiblue">:</span><span class="ansiblue"></span>
   <span class="ansigreen">--&gt; 150</span><span class="ansired">                 </span>f_mgr<span class="ansiblue">.</span>canvas<span class="ansiblue">.</span>draw_idle<span class="ansiblue">(</span><span class="ansiblue">)</span><span class="ansiblue"></span>
   <span class="ansigreen">    151</span> <span class="ansiblue"></span>
   <span class="ansigreen">    152</span> atexit<span class="ansiblue">.</span>register<span class="ansiblue">(</span>Gcf<span class="ansiblue">.</span>destroy_all<span class="ansiblue">)</span><span class="ansiblue"></span>
   
   <span class="ansigreen">/usr/lib/python2.7/dist-packages/matplotlib/backend_bases.pyc</span> in <span class="ansicyan">draw_idle</span><span class="ansiblue">(self, *args, **kwargs)</span>
   <span class="ansigreen">   2024</span>         <span class="ansigreen">if</span> <span class="ansigreen">not</span> self<span class="ansiblue">.</span>_is_idle_drawing<span class="ansiblue">:</span><span class="ansiblue"></span>
   <span class="ansigreen">   2025</span>             <span class="ansigreen">with</span> self<span class="ansiblue">.</span>_idle_draw_cntx<span class="ansiblue">(</span><span class="ansiblue">)</span><span class="ansiblue">:</span><span class="ansiblue"></span>
   <span class="ansigreen">-&gt; 2026</span><span class="ansired">                 </span>self<span class="ansiblue">.</span>draw<span class="ansiblue">(</span><span class="ansiblue">*</span>args<span class="ansiblue">,</span> <span class="ansiblue">**</span>kwargs<span class="ansiblue">)</span><span class="ansiblue"></span>
   <span class="ansigreen">   2027</span> <span class="ansiblue"></span>
   <span class="ansigreen">   2028</span>     <span class="ansigreen">def</span> draw_cursor<span class="ansiblue">(</span>self<span class="ansiblue">,</span> event<span class="ansiblue">)</span><span class="ansiblue">:</span><span class="ansiblue"></span>
   
   <span class="ansigreen">/usr/lib/python2.7/dist-packages/matplotlib/backends/backend_agg.pyc</span> in <span class="ansicyan">draw</span><span class="ansiblue">(self)</span>
   <span class="ansigreen">    472</span> <span class="ansiblue"></span>
   <span class="ansigreen">    473</span>         <span class="ansigreen">try</span><span class="ansiblue">:</span><span class="ansiblue"></span>
   <span class="ansigreen">--&gt; 474</span><span class="ansired">             </span>self<span class="ansiblue">.</span>figure<span class="ansiblue">.</span>draw<span class="ansiblue">(</span>self<span class="ansiblue">.</span>renderer<span class="ansiblue">)</span><span class="ansiblue"></span>
   <span class="ansigreen">    475</span>         <span class="ansigreen">finally</span><span class="ansiblue">:</span><span class="ansiblue"></span>
   <span class="ansigreen">    476</span>             RendererAgg<span class="ansiblue">.</span>lock<span class="ansiblue">.</span>release<span class="ansiblue">(</span><span class="ansiblue">)</span><span class="ansiblue"></span>
   
   <span class="ansigreen">/usr/lib/python2.7/dist-packages/matplotlib/artist.pyc</span> in <span class="ansicyan">draw_wrapper</span><span class="ansiblue">(artist, renderer, *args, **kwargs)</span>
   <span class="ansigreen">     59</span>     <span class="ansigreen">def</span> draw_wrapper<span class="ansiblue">(</span>artist<span class="ansiblue">,</span> renderer<span class="ansiblue">,</span> <span class="ansiblue">*</span>args<span class="ansiblue">,</span> <span class="ansiblue">**</span>kwargs<span class="ansiblue">)</span><span class="ansiblue">:</span><span class="ansiblue"></span>
   <span class="ansigreen">     60</span>         before<span class="ansiblue">(</span>artist<span class="ansiblue">,</span> renderer<span class="ansiblue">)</span><span class="ansiblue"></span>
   <span class="ansigreen">---&gt; 61</span><span class="ansired">         </span>draw<span class="ansiblue">(</span>artist<span class="ansiblue">,</span> renderer<span class="ansiblue">,</span> <span class="ansiblue">*</span>args<span class="ansiblue">,</span> <span class="ansiblue">**</span>kwargs<span class="ansiblue">)</span><span class="ansiblue"></span>
   <span class="ansigreen">     62</span>         after<span class="ansiblue">(</span>artist<span class="ansiblue">,</span> renderer<span class="ansiblue">)</span><span class="ansiblue"></span>
   <span class="ansigreen">     63</span> <span class="ansiblue"></span>
   
   <span class="ansigreen">/usr/lib/python2.7/dist-packages/matplotlib/figure.pyc</span> in <span class="ansicyan">draw</span><span class="ansiblue">(self, renderer)</span>
   <span class="ansigreen">   1157</span>         dsu<span class="ansiblue">.</span>sort<span class="ansiblue">(</span>key<span class="ansiblue">=</span>itemgetter<span class="ansiblue">(</span><span class="ansicyan">0</span><span class="ansiblue">)</span><span class="ansiblue">)</span><span class="ansiblue"></span>
   <span class="ansigreen">   1158</span>         <span class="ansigreen">for</span> zorder<span class="ansiblue">,</span> a<span class="ansiblue">,</span> func<span class="ansiblue">,</span> args <span class="ansigreen">in</span> dsu<span class="ansiblue">:</span><span class="ansiblue"></span>
   <span class="ansigreen">-&gt; 1159</span><span class="ansired">             </span>func<span class="ansiblue">(</span><span class="ansiblue">*</span>args<span class="ansiblue">)</span><span class="ansiblue"></span>
   <span class="ansigreen">   1160</span> <span class="ansiblue"></span>
   <span class="ansigreen">   1161</span>         renderer<span class="ansiblue">.</span>close_group<span class="ansiblue">(</span><span class="ansiblue">&apos;figure&apos;</span><span class="ansiblue">)</span><span class="ansiblue"></span>
   
   <span class="ansigreen">/usr/lib/python2.7/dist-packages/matplotlib/artist.pyc</span> in <span class="ansicyan">draw_wrapper</span><span class="ansiblue">(artist, renderer, *args, **kwargs)</span>
   <span class="ansigreen">     59</span>     <span class="ansigreen">def</span> draw_wrapper<span class="ansiblue">(</span>artist<span class="ansiblue">,</span> renderer<span class="ansiblue">,</span> <span class="ansiblue">*</span>args<span class="ansiblue">,</span> <span class="ansiblue">**</span>kwargs<span class="ansiblue">)</span><span class="ansiblue">:</span><span class="ansiblue"></span>
   <span class="ansigreen">     60</span>         before<span class="ansiblue">(</span>artist<span class="ansiblue">,</span> renderer<span class="ansiblue">)</span><span class="ansiblue"></span>
   <span class="ansigreen">---&gt; 61</span><span class="ansired">         </span>draw<span class="ansiblue">(</span>artist<span class="ansiblue">,</span> renderer<span class="ansiblue">,</span> <span class="ansiblue">*</span>args<span class="ansiblue">,</span> <span class="ansiblue">**</span>kwargs<span class="ansiblue">)</span><span class="ansiblue"></span>
   <span class="ansigreen">     62</span>         after<span class="ansiblue">(</span>artist<span class="ansiblue">,</span> renderer<span class="ansiblue">)</span><span class="ansiblue"></span>
   <span class="ansigreen">     63</span> <span class="ansiblue"></span>
   
   <span class="ansigreen">/usr/lib/python2.7/dist-packages/matplotlib/axes/_base.pyc</span> in <span class="ansicyan">draw</span><span class="ansiblue">(self, renderer, inframe)</span>
   <span class="ansigreen">   2322</span> <span class="ansiblue"></span>
   <span class="ansigreen">   2323</span>         <span class="ansigreen">for</span> zorder<span class="ansiblue">,</span> a <span class="ansigreen">in</span> dsu<span class="ansiblue">:</span><span class="ansiblue"></span>
   <span class="ansigreen">-&gt; 2324</span><span class="ansired">             </span>a<span class="ansiblue">.</span>draw<span class="ansiblue">(</span>renderer<span class="ansiblue">)</span><span class="ansiblue"></span>
   <span class="ansigreen">   2325</span> <span class="ansiblue"></span>
   <span class="ansigreen">   2326</span>         renderer<span class="ansiblue">.</span>close_group<span class="ansiblue">(</span><span class="ansiblue">&apos;axes&apos;</span><span class="ansiblue">)</span><span class="ansiblue"></span>
   
   <span class="ansigreen">/usr/lib/python2.7/dist-packages/matplotlib/artist.pyc</span> in <span class="ansicyan">draw_wrapper</span><span class="ansiblue">(artist, renderer, *args, **kwargs)</span>
   <span class="ansigreen">     59</span>     <span class="ansigreen">def</span> draw_wrapper<span class="ansiblue">(</span>artist<span class="ansiblue">,</span> renderer<span class="ansiblue">,</span> <span class="ansiblue">*</span>args<span class="ansiblue">,</span> <span class="ansiblue">**</span>kwargs<span class="ansiblue">)</span><span class="ansiblue">:</span><span class="ansiblue"></span>
   <span class="ansigreen">     60</span>         before<span class="ansiblue">(</span>artist<span class="ansiblue">,</span> renderer<span class="ansiblue">)</span><span class="ansiblue"></span>
   <span class="ansigreen">---&gt; 61</span><span class="ansired">         </span>draw<span class="ansiblue">(</span>artist<span class="ansiblue">,</span> renderer<span class="ansiblue">,</span> <span class="ansiblue">*</span>args<span class="ansiblue">,</span> <span class="ansiblue">**</span>kwargs<span class="ansiblue">)</span><span class="ansiblue"></span>
   <span class="ansigreen">     62</span>         after<span class="ansiblue">(</span>artist<span class="ansiblue">,</span> renderer<span class="ansiblue">)</span><span class="ansiblue"></span>
   <span class="ansigreen">     63</span> <span class="ansiblue"></span>
   
   <span class="ansigreen">/usr/lib/python2.7/dist-packages/matplotlib/axis.pyc</span> in <span class="ansicyan">draw</span><span class="ansiblue">(self, renderer, *args, **kwargs)</span>
   <span class="ansigreen">   1106</span>         ticks_to_draw <span class="ansiblue">=</span> self<span class="ansiblue">.</span>_update_ticks<span class="ansiblue">(</span>renderer<span class="ansiblue">)</span><span class="ansiblue"></span>
   <span class="ansigreen">   1107</span>         ticklabelBoxes, ticklabelBoxes2 = self._get_tick_bboxes(ticks_to_draw,
   <span class="ansigreen">-&gt; 1108</span><span class="ansired">                                                                 renderer)
   </span><span class="ansigreen">   1109</span> <span class="ansiblue"></span>
   <span class="ansigreen">   1110</span>         <span class="ansigreen">for</span> tick <span class="ansigreen">in</span> ticks_to_draw<span class="ansiblue">:</span><span class="ansiblue"></span>
   
   <span class="ansigreen">/usr/lib/python2.7/dist-packages/matplotlib/axis.pyc</span> in <span class="ansicyan">_get_tick_bboxes</span><span class="ansiblue">(self, ticks, renderer)</span>
   <span class="ansigreen">   1056</span>         <span class="ansigreen">for</span> tick <span class="ansigreen">in</span> ticks<span class="ansiblue">:</span><span class="ansiblue"></span>
   <span class="ansigreen">   1057</span>             <span class="ansigreen">if</span> tick<span class="ansiblue">.</span>label1On <span class="ansigreen">and</span> tick<span class="ansiblue">.</span>label1<span class="ansiblue">.</span>get_visible<span class="ansiblue">(</span><span class="ansiblue">)</span><span class="ansiblue">:</span><span class="ansiblue"></span>
   <span class="ansigreen">-&gt; 1058</span><span class="ansired">                 </span>extent <span class="ansiblue">=</span> tick<span class="ansiblue">.</span>label1<span class="ansiblue">.</span>get_window_extent<span class="ansiblue">(</span>renderer<span class="ansiblue">)</span><span class="ansiblue"></span>
   <span class="ansigreen">   1059</span>                 ticklabelBoxes<span class="ansiblue">.</span>append<span class="ansiblue">(</span>extent<span class="ansiblue">)</span><span class="ansiblue"></span>
   <span class="ansigreen">   1060</span>             <span class="ansigreen">if</span> tick<span class="ansiblue">.</span>label2On <span class="ansigreen">and</span> tick<span class="ansiblue">.</span>label2<span class="ansiblue">.</span>get_visible<span class="ansiblue">(</span><span class="ansiblue">)</span><span class="ansiblue">:</span><span class="ansiblue"></span>
   
   <span class="ansigreen">/usr/lib/python2.7/dist-packages/matplotlib/text.pyc</span> in <span class="ansicyan">get_window_extent</span><span class="ansiblue">(self, renderer, dpi)</span>
   <span class="ansigreen">    959</span>             <span class="ansigreen">raise</span> RuntimeError<span class="ansiblue">(</span><span class="ansiblue">&apos;Cannot get window extent w/o renderer&apos;</span><span class="ansiblue">)</span><span class="ansiblue"></span>
   <span class="ansigreen">    960</span> <span class="ansiblue"></span>
   <span class="ansigreen">--&gt; 961</span><span class="ansired">         </span>bbox<span class="ansiblue">,</span> info<span class="ansiblue">,</span> descent <span class="ansiblue">=</span> self<span class="ansiblue">.</span>_get_layout<span class="ansiblue">(</span>self<span class="ansiblue">.</span>_renderer<span class="ansiblue">)</span><span class="ansiblue"></span>
   <span class="ansigreen">    962</span>         x<span class="ansiblue">,</span> y <span class="ansiblue">=</span> self<span class="ansiblue">.</span>get_unitless_position<span class="ansiblue">(</span><span class="ansiblue">)</span><span class="ansiblue"></span>
   <span class="ansigreen">    963</span>         x<span class="ansiblue">,</span> y <span class="ansiblue">=</span> self<span class="ansiblue">.</span>get_transform<span class="ansiblue">(</span><span class="ansiblue">)</span><span class="ansiblue">.</span>transform_point<span class="ansiblue">(</span><span class="ansiblue">(</span>x<span class="ansiblue">,</span> y<span class="ansiblue">)</span><span class="ansiblue">)</span><span class="ansiblue"></span>
   
   <span class="ansigreen">/usr/lib/python2.7/dist-packages/matplotlib/text.pyc</span> in <span class="ansicyan">_get_layout</span><span class="ansiblue">(self, renderer)</span>
   <span class="ansigreen">    350</span>         tmp, lp_h, lp_bl = renderer.get_text_width_height_descent(&apos;lp&apos;,
   <span class="ansigreen">    351</span>                                                          self<span class="ansiblue">.</span>_fontproperties<span class="ansiblue">,</span><span class="ansiblue"></span>
   <span class="ansigreen">--&gt; 352</span><span class="ansired">                                                          ismath=False)
   </span><span class="ansigreen">    353</span>         offsety <span class="ansiblue">=</span> <span class="ansiblue">(</span>lp_h <span class="ansiblue">-</span> lp_bl<span class="ansiblue">)</span> <span class="ansiblue">*</span> self<span class="ansiblue">.</span>_linespacing<span class="ansiblue"></span>
   <span class="ansigreen">    354</span> <span class="ansiblue"></span>
   
   <span class="ansigreen">/usr/lib/python2.7/dist-packages/matplotlib/backends/backend_agg.pyc</span> in <span class="ansicyan">get_text_width_height_descent</span><span class="ansiblue">(self, s, prop, ismath)</span>
   <span class="ansigreen">    227</span>             fontsize <span class="ansiblue">=</span> prop<span class="ansiblue">.</span>get_size_in_points<span class="ansiblue">(</span><span class="ansiblue">)</span><span class="ansiblue"></span>
   <span class="ansigreen">    228</span>             w, h, d = texmanager.get_text_width_height_descent(s, fontsize,
   <span class="ansigreen">--&gt; 229</span><span class="ansired">                                                                renderer=self)
   </span><span class="ansigreen">    230</span>             <span class="ansigreen">return</span> w<span class="ansiblue">,</span> h<span class="ansiblue">,</span> d<span class="ansiblue"></span>
   <span class="ansigreen">    231</span> <span class="ansiblue"></span>
   
   <span class="ansigreen">/usr/lib/python2.7/dist-packages/matplotlib/texmanager.pyc</span> in <span class="ansicyan">get_text_width_height_descent</span><span class="ansiblue">(self, tex, fontsize, renderer)</span>
   <span class="ansigreen">    673</span>         <span class="ansigreen">else</span><span class="ansiblue">:</span><span class="ansiblue"></span>
   <span class="ansigreen">    674</span>             <span class="ansired"># use dviread. It sometimes returns a wrong descent.</span><span class="ansiblue"></span><span class="ansiblue"></span>
   <span class="ansigreen">--&gt; 675</span><span class="ansired">             </span>dvifile <span class="ansiblue">=</span> self<span class="ansiblue">.</span>make_dvi<span class="ansiblue">(</span>tex<span class="ansiblue">,</span> fontsize<span class="ansiblue">)</span><span class="ansiblue"></span>
   <span class="ansigreen">    676</span>             dvi <span class="ansiblue">=</span> dviread<span class="ansiblue">.</span>Dvi<span class="ansiblue">(</span>dvifile<span class="ansiblue">,</span> <span class="ansicyan">72</span> <span class="ansiblue">*</span> dpi_fraction<span class="ansiblue">)</span><span class="ansiblue"></span>
   <span class="ansigreen">    677</span>             <span class="ansigreen">try</span><span class="ansiblue">:</span><span class="ansiblue"></span>
   
   <span class="ansigreen">/usr/lib/python2.7/dist-packages/matplotlib/texmanager.pyc</span> in <span class="ansicyan">make_dvi</span><span class="ansiblue">(self, tex, fontsize)</span>
   <span class="ansigreen">    420</span>                      <span class="ansiblue">&apos;string:\n%s\nHere is the full report generated by &apos;</span><span class="ansiblue"></span>
   <span class="ansigreen">    421</span>                      <span class="ansiblue">&apos;LaTeX: \n\n&apos;</span> <span class="ansiblue">%</span> repr<span class="ansiblue">(</span>tex<span class="ansiblue">.</span>encode<span class="ansiblue">(</span><span class="ansiblue">&apos;unicode_escape&apos;</span><span class="ansiblue">)</span><span class="ansiblue">)</span> <span class="ansiblue">+</span><span class="ansiblue"></span>
   <span class="ansigreen">--&gt; 422</span><span class="ansired">                      report))
   </span><span class="ansigreen">    423</span>             <span class="ansigreen">else</span><span class="ansiblue">:</span><span class="ansiblue"></span>
   <span class="ansigreen">    424</span>                 mpl<span class="ansiblue">.</span>verbose<span class="ansiblue">.</span>report<span class="ansiblue">(</span>report<span class="ansiblue">,</span> <span class="ansiblue">&apos;debug&apos;</span><span class="ansiblue">)</span><span class="ansiblue"></span>
   
   <span class="ansired">RuntimeError</span>: LaTeX was not able to process the following string:
   &apos;lp&apos;
   Here is the full report generated by LaTeX: 
   
   </pre>
   </div>
   </div>
   
   <div class="output_area"><div class="prompt"></div>
   
   
   <div class="output_text output_subarea ">
   <pre>
   &lt;matplotlib.figure.Figure at 0xa5e4bf30&gt;
   </pre>
   </div>
   
   </div>
   
   </div>
   </div>
   
   </div>
   <div class="cell border-box-sizing text_cell rendered">
   <div class="prompt input_prompt">
   </div>
   <div class="inner_cell">
   <div class="text_cell_render border-box-sizing rendered_html">
   <p>Other plotting options can be found on the <a href="http://statsmodels.sourceforge.net/stable/graphics.html">Graphics page.</a></p>
   </div>
   </div>
   </div>
   <div class="cell border-box-sizing text_cell rendered">
   <div class="prompt input_prompt">
   </div>
   <div class="inner_cell">
   <div class="text_cell_render border-box-sizing rendered_html">
   <h2 id="multicollinearity">Multicollinearity</h2>
   <p>Condition number:</p>
   </div>
   </div>
   </div>
   <div class="cell border-box-sizing code_cell rendered">
   <div class="input">
   <div class="prompt input_prompt">In&nbsp;[6]:</div>
   <div class="inner_cell">
       <div class="input_area">
   <div class="highlight"><pre><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">results</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">exog</span><span class="p">)</span>
   </pre></div>
   
   </div>
   </div>
   </div>
   
   <div class="output_wrapper">
   <div class="output">
   
   
   <div class="output_area"><div class="prompt output_prompt">Out[6]:</div>
   
   
   <div class="output_text output_subarea output_pyout">
   <pre>
   702.17921454900602
   </pre>
   </div>
   
   </div>
   
   </div>
   </div>
   
   </div>
   <div class="cell border-box-sizing text_cell rendered">
   <div class="prompt input_prompt">
   </div>
   <div class="inner_cell">
   <div class="text_cell_render border-box-sizing rendered_html">
   <h2 id="heteroskedasticity-tests">Heteroskedasticity tests</h2>
   <p>Breush-Pagan test:</p>
   </div>
   </div>
   </div>
   <div class="cell border-box-sizing code_cell rendered">
   <div class="input">
   <div class="prompt input_prompt">In&nbsp;[7]:</div>
   <div class="inner_cell">
       <div class="input_area">
   <div class="highlight"><pre><span class="n">name</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;Lagrange multiplier statistic&#39;</span><span class="p">,</span> <span class="s1">&#39;p-value&#39;</span><span class="p">,</span> 
           <span class="s1">&#39;f-value&#39;</span><span class="p">,</span> <span class="s1">&#39;f p-value&#39;</span><span class="p">]</span>
   <span class="n">test</span> <span class="o">=</span> <span class="n">sms</span><span class="o">.</span><span class="n">het_breushpagan</span><span class="p">(</span><span class="n">results</span><span class="o">.</span><span class="n">resid</span><span class="p">,</span> <span class="n">results</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">exog</span><span class="p">)</span>
   <span class="n">lzip</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">test</span><span class="p">)</span>
   </pre></div>
   
   </div>
   </div>
   </div>
   
   <div class="output_wrapper">
   <div class="output">
   
   
   <div class="output_area"><div class="prompt output_prompt">Out[7]:</div>
   
   
   <div class="output_text output_subarea output_pyout">
   <pre>
   [(&apos;Lagrange multiplier statistic&apos;, 4.8932133740939667),
    (&apos;p-value&apos;, 0.086586905023521704),
    (&apos;f-value&apos;, 2.50371594625644),
    (&apos;f p-value&apos;, 0.087940287826729857)]
   </pre>
   </div>
   
   </div>
   
   </div>
   </div>
   
   </div>
   <div class="cell border-box-sizing text_cell rendered">
   <div class="prompt input_prompt">
   </div>
   <div class="inner_cell">
   <div class="text_cell_render border-box-sizing rendered_html">
   <p>Goldfeld-Quandt test</p>
   </div>
   </div>
   </div>
   <div class="cell border-box-sizing code_cell rendered">
   <div class="input">
   <div class="prompt input_prompt">In&nbsp;[8]:</div>
   <div class="inner_cell">
       <div class="input_area">
   <div class="highlight"><pre><span class="n">name</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;F statistic&#39;</span><span class="p">,</span> <span class="s1">&#39;p-value&#39;</span><span class="p">]</span>
   <span class="n">test</span> <span class="o">=</span> <span class="n">sms</span><span class="o">.</span><span class="n">het_goldfeldquandt</span><span class="p">(</span><span class="n">results</span><span class="o">.</span><span class="n">resid</span><span class="p">,</span> <span class="n">results</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">exog</span><span class="p">)</span>
   <span class="n">lzip</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">test</span><span class="p">)</span>
   </pre></div>
   
   </div>
   </div>
   </div>
   
   <div class="output_wrapper">
   <div class="output">
   
   
   <div class="output_area"><div class="prompt output_prompt">Out[8]:</div>
   
   
   <div class="output_text output_subarea output_pyout">
   <pre>
   [(&apos;F statistic&apos;, 1.1002422436378148), (&apos;p-value&apos;, 0.3820295068692508)]
   </pre>
   </div>
   
   </div>
   
   </div>
   </div>
   
   </div>
   <div class="cell border-box-sizing text_cell rendered">
   <div class="prompt input_prompt">
   </div>
   <div class="inner_cell">
   <div class="text_cell_render border-box-sizing rendered_html">
   <h2 id="linearity">Linearity</h2>
   <p>Harvey-Collier multiplier test for Null hypothesis that the linear specification is correct:</p>
   </div>
   </div>
   </div>
   <div class="cell border-box-sizing code_cell rendered">
   <div class="input">
   <div class="prompt input_prompt">In&nbsp;[9]:</div>
   <div class="inner_cell">
       <div class="input_area">
   <div class="highlight"><pre><span class="n">name</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;t value&#39;</span><span class="p">,</span> <span class="s1">&#39;p value&#39;</span><span class="p">]</span>
   <span class="n">test</span> <span class="o">=</span> <span class="n">sms</span><span class="o">.</span><span class="n">linear_harvey_collier</span><span class="p">(</span><span class="n">results</span><span class="p">)</span>
   <span class="n">lzip</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">test</span><span class="p">)</span>
   </pre></div>
   
   </div>
   </div>
   </div>
   
   <div class="output_wrapper">
   <div class="output">
   
   
   <div class="output_area"><div class="prompt output_prompt">Out[9]:</div>
   
   
   <div class="output_text output_subarea output_pyout">
   <pre>
   [(&apos;t value&apos;, -1.0796490077783811), (&apos;p value&apos;, 0.28346392475585902)]
   </pre>
   </div>
   
   </div>
   
   </div>
   </div>
   
   </div>

   <script src="https://c328740.ssl.cf1.rackcdn.com/mathjax/latest/MathJax.js?config=TeX-AMS_HTML"type="text/javascript"></script>
   <script type="text/javascript">
   init_mathjax = function() {
       if (window.MathJax) {
           // MathJax loaded
           MathJax.Hub.Config({
               tex2jax: {
               // I'm not sure about the \( and \[ below. It messes with the
               // prompt, and I think it's an issue with the template. -SS
                   inlineMath: [ ['$','$'], ["\\(","\\)"] ],
                   displayMath: [ ['$$','$$'], ["\\[","\\]"] ]
               },
               displayAlign: 'left', // Change this to 'center' to center equations.
               "HTML-CSS": {
                   styles: {'.MathJax_Display': {"margin": 0}}
               }
           });
           MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
       }
   }
   init_mathjax();

   // since we have to load this in a ..raw:: directive we will add the css
   // after the fact
   function loadcssfile(filename){
       var fileref=document.createElement("link")
       fileref.setAttribute("rel", "stylesheet")
       fileref.setAttribute("type", "text/css")
       fileref.setAttribute("href", filename)

       document.getElementsByTagName("head")[0].appendChild(fileref)
   }
   // loadcssfile({{pathto("_static/nbviewer.pygments.css", 1) }})
   // loadcssfile({{pathto("_static/nbviewer.min.css", 1) }})
   loadcssfile("../../../_static/nbviewer.pygments.css")
   loadcssfile("../../../_static/ipython.min.css")
   </script>