Prediction (out of sample)
==========================


.. _predict_notebook:

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

.. raw:: html

   
   <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">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">statsmodels.api</span> <span class="kn">as</span> <span class="nn">sm</span>
   </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="artificial-data">Artificial data</h2>
   </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">nsample</span> <span class="o">=</span> <span class="mi">50</span>
   <span class="n">sig</span> <span class="o">=</span> <span class="mf">0.25</span>
   <span class="n">x1</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">20</span><span class="p">,</span> <span class="n">nsample</span><span class="p">)</span>
   <span class="n">X</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">column_stack</span><span class="p">((</span><span class="n">x1</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">x1</span><span class="p">),</span> <span class="p">(</span><span class="n">x1</span><span class="o">-</span><span class="mi">5</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span><span class="p">))</span>
   <span class="n">X</span> <span class="o">=</span> <span class="n">sm</span><span class="o">.</span><span class="n">add_constant</span><span class="p">(</span><span class="n">X</span><span class="p">)</span>
   <span class="n">beta</span> <span class="o">=</span> <span class="p">[</span><span class="mf">5.</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">,</span> <span class="o">-</span><span class="mf">0.02</span><span class="p">]</span>
   <span class="n">y_true</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">beta</span><span class="p">)</span>
   <span class="n">y</span> <span class="o">=</span> <span class="n">y_true</span> <span class="o">+</span> <span class="n">sig</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">normal</span><span class="p">(</span><span class="n">size</span><span class="o">=</span><span class="n">nsample</span><span class="p">)</span>
   </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="estimation">Estimation</h2>
   </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">olsmod</span> <span class="o">=</span> <span class="n">sm</span><span class="o">.</span><span class="n">OLS</span><span class="p">(</span><span class="n">y</span><span class="p">,</span> <span class="n">X</span><span class="p">)</span>
   <span class="n">olsres</span> <span class="o">=</span> <span class="n">olsmod</span><span class="o">.</span><span class="n">fit</span><span class="p">()</span>
   <span class="k">print</span><span class="p">(</span><span class="n">olsres</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:                      y   R-squared:                       0.983
   Model:                            OLS   Adj. R-squared:                  0.981
   Method:                 Least Squares   F-statistic:                     867.5
   Date:                Mon, 04 Apr 2016   Prob (F-statistic):           1.78e-40
   Time:                        22:56:11   Log-Likelihood:                 1.0243
   No. Observations:                  50   AIC:                             5.951
   Df Residuals:                      46   BIC:                             13.60
   Df Model:                           3                                         
   Covariance Type:            nonrobust                                         
   ==============================================================================
                    coef    std err          t      P&gt;|t|      [95.0% Conf. Int.]
   ------------------------------------------------------------------------------
   const          5.0830      0.084     60.339      0.000         4.913     5.253
   x1             0.4953      0.013     38.125      0.000         0.469     0.521
   x2             0.4219      0.051      8.260      0.000         0.319     0.525
   x3            -0.0208      0.001    -18.221      0.000        -0.023    -0.018
   ==============================================================================
   Omnibus:                        1.746   Durbin-Watson:                   1.889
   Prob(Omnibus):                  0.418   Jarque-Bera (JB):                0.934
   Skew:                          -0.255   Prob(JB):                        0.627
   Kurtosis:                       3.435   Cond. No.                         221.
   ==============================================================================
   
   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="in-sample-prediction">In-sample prediction</h2>
   </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="n">ypred</span> <span class="o">=</span> <span class="n">olsres</span><span class="o">.</span><span class="n">predict</span><span class="p">(</span><span class="n">X</span><span class="p">)</span>
   <span class="k">print</span><span class="p">(</span><span class="n">ypred</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>
   [  4.5634   5.0144   5.431    5.7901   6.0771   6.288    6.4302   6.5212
      6.5858   6.6521   6.7465   6.8901   7.0943   7.3597   7.6756   8.0219
      8.3724   8.699    8.9764   9.1863   9.3203   9.3814   9.3833   9.3484
      9.3041   9.2779   9.2936   9.3666   9.5019   9.6933   9.9239  10.1695
     10.4022  10.595   10.7265  10.7841  10.7662  10.6825  10.5525  10.4018
     10.2588  10.149   10.0916  10.0959  10.1601  10.2712  10.4075  10.542
     10.6469  10.698 ]
   
   </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="create-a-new-sample-of-explanatory-variables-xnew-predict-and-plot">Create a new sample of explanatory variables Xnew, predict and plot</h2>
   </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="n">x1n</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="mf">20.5</span><span class="p">,</span><span class="mi">25</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
   <span class="n">Xnew</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">column_stack</span><span class="p">((</span><span class="n">x1n</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">x1n</span><span class="p">),</span> <span class="p">(</span><span class="n">x1n</span><span class="o">-</span><span class="mi">5</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span><span class="p">))</span>
   <span class="n">Xnew</span> <span class="o">=</span> <span class="n">sm</span><span class="o">.</span><span class="n">add_constant</span><span class="p">(</span><span class="n">Xnew</span><span class="p">)</span>
   <span class="n">ynewpred</span> <span class="o">=</span>  <span class="n">olsres</span><span class="o">.</span><span class="n">predict</span><span class="p">(</span><span class="n">Xnew</span><span class="p">)</span> <span class="c1"># predict out of sample</span>
   <span class="k">print</span><span class="p">(</span><span class="n">ynewpred</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>
   [ 10.6641  10.5168  10.2727   9.9695   9.6569   9.3841   9.1884   9.0854
      9.0655   9.0963]
   
   </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="plot-comparison">Plot comparison</h2>
   </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="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="kn">as</span> <span class="nn">plt</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">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x1</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="s1">&#39;o&#39;</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Data&quot;</span><span class="p">)</span>
   <span class="n">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x1</span><span class="p">,</span> <span class="n">y_true</span><span class="p">,</span> <span class="s1">&#39;b-&#39;</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;True&quot;</span><span class="p">)</span>
   <span class="n">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">hstack</span><span class="p">((</span><span class="n">x1</span><span class="p">,</span> <span class="n">x1n</span><span class="p">)),</span> <span class="n">np</span><span class="o">.</span><span class="n">hstack</span><span class="p">((</span><span class="n">ypred</span><span class="p">,</span> <span class="n">ynewpred</span><span class="p">)),</span> <span class="s1">&#39;r&#39;</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;OLS prediction&quot;</span><span class="p">)</span>
   <span class="n">ax</span><span class="o">.</span><span class="n">legend</span><span class="p">(</span><span class="n">loc</span><span class="o">=</span><span class="s2">&quot;best&quot;</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 0xa9a01090&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">
   <h2 id="Predicting-with-Formulas">Predicting with Formulas<a class="anchor-link" href="#Predicting-with-Formulas">&#182;</a></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>Using formulas can make both estimation and prediction a lot easier</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="kn">from</span> <span class="nn">statsmodels.formula.api</span> <span class="kn">import</span> <span class="n">ols</span>
   
   <span class="n">data</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;x1&quot;</span> <span class="p">:</span> <span class="n">x1</span><span class="p">,</span> <span class="s2">&quot;y&quot;</span> <span class="p">:</span> <span class="n">y</span><span class="p">}</span>
   
   <span class="n">res</span> <span class="o">=</span> <span class="n">ols</span><span class="p">(</span><span class="s2">&quot;y ~ x1 + np.sin(x1) + I((x1-5)**2)&quot;</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">data</span><span class="p">)</span><span class="o">.</span><span class="n">fit</span><span class="p">()</span>
   </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>We use the <code>I</code> to indicate use of the Identity transform. Ie., we don&#39;t want any expansion magic from using <code>**2</code></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">res</span><span class="o">.</span><span class="n">params</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>
   Intercept           5.083036
   x1                  0.495320
   np.sin(x1)          0.421859
   I((x1 - 5) ** 2)   -0.020785
   dtype: float64
   </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>Now we only have to pass the single variable and we get the transformed right-hand side variables automatically</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">res</span><span class="o">.</span><span class="n">predict</span><span class="p">(</span><span class="n">exog</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">x1</span><span class="o">=</span><span class="n">x1n</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>
   array([ 10.6641,  10.5168,  10.2727,   9.9695,   9.6569,   9.3841,
            9.1884,   9.0854,   9.0655,   9.0963])
   </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>