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.984
   Model:                            OLS   Adj. R-squared:                  0.983
   Method:                 Least Squares   F-statistic:                     938.7
   Date:                Wed, 27 Apr 2016   Prob (F-statistic):           2.99e-41
   Time:                        23:30:31   Log-Likelihood:               0.038368
   No. Observations:                  50   AIC:                             7.923
   Df Residuals:                      46   BIC:                             15.57
   Df Model:                           3                                         
   Covariance Type:            nonrobust                                         
   ==============================================================================
                    coef    std err          t      P&gt;|t|      [95.0% Conf. Int.]
   ------------------------------------------------------------------------------
   const          4.9134      0.086     57.186      0.000         4.740     5.086
   x1             0.5095      0.013     38.447      0.000         0.483     0.536
   x2             0.5669      0.052     10.884      0.000         0.462     0.672
   x3            -0.0201      0.001    -17.285      0.000        -0.022    -0.018
   ==============================================================================
   Omnibus:                        3.454   Durbin-Watson:                   2.483
   Prob(Omnibus):                  0.178   Jarque-Bera (JB):                2.998
   Skew:                           0.599   Prob(JB):                        0.223
   Kurtosis:                       2.948   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.4105969    4.92230799   5.39034571   5.78381187   6.08295931
      6.28243624   6.39216554   6.43571448   6.44642265   6.4619244
      6.51796559   6.64253064   6.85124481   7.14480699   7.50887485
      7.9164213    8.33217491   8.71841494   9.04116874   9.27579335
      9.4110243    9.45082628   9.41374181   9.32984471   9.23579909
      9.16883551   9.16063412   9.23211973   9.39002385   9.6257788
      9.91692531  10.23080251  10.52991406  10.77808866  10.94642288
     11.01802996  10.99081421  10.87781535  10.7050661   10.50731511
     10.32231784  10.18463342  10.11994674  10.14084841  10.24476626
     10.41438787  10.62050495  10.82681222  10.99587226  11.09526632]
   
   </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>
   [ 11.09086874  10.93804732  10.65903562  10.3045011    9.94113997
      9.63534761   9.4369627    9.36706496   9.41281406   9.53059344]
   
   </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_png output_subarea ">
   <img src="data:image/png;base64,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
   SUVORK5CYII=
   "
   >
   </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           4.913360
   x1                  0.509459
   np.sin(x1)          0.566948
   I((x1 - 5) ** 2)   -0.020111
   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([ 11.09086874,  10.93804732,  10.65903562,  10.3045011 ,
            9.94113997,   9.63534761,   9.4369627 ,   9.36706496,
            9.41281406,   9.53059344])
   </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>