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.986
   Model:                            OLS   Adj. R-squared:                  0.985
   Method:                 Least Squares   F-statistic:                     1059.
   Date:                Sun, 22 Mar 2015   Prob (F-statistic):           1.94e-42
   Time:                        14:58:40   Log-Likelihood:                 4.1650
   No. Observations:                  50   AIC:                           -0.3299
   Df Residuals:                      46   BIC:                             7.318
   Df Model:                           3                                         
   Covariance Type:            nonrobust                                         
   ==============================================================================
                    coef    std err          t      P&gt;|t|      [95.0% Conf. Int.]
   ------------------------------------------------------------------------------
   const          4.9818      0.079     62.970      0.000         4.823     5.141
   x1             0.4867      0.012     39.889      0.000         0.462     0.511
   x2             0.4739      0.048      9.880      0.000         0.377     0.570
   x3            -0.0183      0.001    -17.044      0.000        -0.020    -0.016
   ==============================================================================
   Omnibus:                        0.796   Durbin-Watson:                   2.483
   Prob(Omnibus):                  0.672   Jarque-Bera (JB):                0.293
   Skew:                          -0.157   Prob(JB):                        0.864
   Kurtosis:                       3.205   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.52528468   4.98350894   5.40474642   5.76317138   6.04227847
      6.23759447   6.35741327   6.4214332    6.45752062   6.4971316
      6.57014375   6.6999474    6.89960269   7.16969375   7.4982328
      7.86262966   8.23340326   8.57902534   8.87110038   9.08903097
      9.22340188   9.27752693   9.26690458   9.21667158   9.15747301
      9.12042747   9.1320143    9.20972315   9.35918048   9.5732251
      9.8330848   10.11146052  10.37701153  10.59950462  10.75478133
     10.82872712  10.81959035  10.73827005  10.60652527  10.45340012
     10.31045187  10.20656625  10.16321155  10.19091144  10.28751601
     10.43855494  10.61961496  10.80035087  10.9494712   11.03987926]
   
   </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="c"># 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.04452589  10.9243899   10.69805486  10.40787036  10.10958335
      9.85868939   9.69684531   9.64167027   9.6824319    9.78267398]
   
   </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="s">&#39;o&#39;</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s">&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="s">&#39;b-&#39;</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s">&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="s">&#39;r&#39;</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s">&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="s">&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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
   "
   >
   </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="s">&quot;x1&quot;</span> <span class="p">:</span> <span class="n">x1</span><span class="p">,</span> <span class="s">&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="s">&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.981756
   x1                  0.486687
   np.sin(x1)          0.473874
   I((x1 - 5) ** 2)   -0.018259
   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.04452589,  10.9243899 ,  10.69805486,  10.40787036,
           10.10958335,   9.85868939,   9.69684531,   9.64167027,
            9.6824319 ,   9.78267398])
   </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>