title: Missing intercepts of OLS Regression models in Python statsmodels
body: <p>I am running a rolling for example of 100 window <code>OLS regression estimation</code> of the dataset found in <a href="https://drive.google.com/open?id=0B2Iv8dfU4fTUMVFyYTEtWXlzYkk" rel="nofollow noreferrer">this link</a> (<a href="https://drive.google.com/drive/folders/0B2Iv8dfU4fTUMVFyYTEtWXlzYkk" rel="nofollow noreferrer">https://drive.google.com/drive/folders/0B2Iv8dfU4fTUMVFyYTEtWXlzYkk</a>) as in the following format. </p>
  
  <pre><code> time     X   Y
  0.000543  0  10
  0.000575  0  10
  0.041324  1  10
  0.041331  2  10
  0.041336  3  10
  0.04134   4  10
    ...
  9.987735  55 239
  9.987739  56 239
  9.987744  57 239
  9.987749  58 239
  9.987938  59 239
  </code></pre>
  
  <p>The third column (Y) in my dataset is my true value - that's what I wanted to predict (estimate). I want to do a prediction of <code>Y</code> (i.e. predict the current value of <code>Y</code> according to the previous 3 rolling values of <code>X</code>. For this, I have the following <code>python</code> script work using <code>statsmodels</code>. </p>
  
  <pre><code># /usr/bin/python -tt
  import pandas as pd
  import numpy as np
  import statsmodels.api as sm
  
  
  df=pd.read_csv('estimated_pred.csv')    
  df=df.dropna() # to drop nans in case there are any
  window = 100
  #print(df.index) # to print index
  df['a']=None #constant
  df['b1']=None #beta1
  df['b2']=None #beta2
  for i in range(window,len(df)):
      temp=df.iloc[i-window:i,:]
      RollOLS=sm.OLS(temp.loc[:,'Y'],sm.add_constant(temp.loc[:,['time','X']], has_constant = 'add')).fit()
      df.iloc[i,df.columns.get_loc('a')]=RollOLS.params[0]
      df.iloc[i,df.columns.get_loc('b1')]=RollOLS.params[1]
      df.iloc[i,df.columns.get_loc('b2')]=RollOLS.params[2]
  
  # Predicted values in a row
   df['predicted']=df['a'].shift(1)+df['b1'].shift(1)*df['time']+df['b2'].shift(1)*df['X']
  
  #print(df['predicted'])
  
  print(temp)
  </code></pre>
  
  <p>Which gives me a sample output of the following format. </p>
  
  <pre><code>         time   X   Y        a           b1           b2  predicted
  0    0.000543   0  10     None         None         None       NaN
  1    0.000575   0  10     None         None         None       NaN
  2    0.041324   1  10     None         None         None       NaN
  3    0.041331   2  10     None         None         None       NaN
  4    0.041336   3  10     None         None         None       NaN
  ..        ...  ..  ..      ...          ...          ...       ...
  50    0.041340   4  10       10            0  1.55431e-15       NaN
  51    0.041345   5  10       10   1.7053e-13  7.77156e-16        10
  52    0.041350   6  10       10  1.74623e-09 -7.99361e-15        10
  53    0.041354   7  10       10  6.98492e-10 -6.21725e-15        10
  ..        ...  ..  ..      ...          ...          ...       ...
  509  0.160835  38  20       20  4.88944e-09 -1.15463e-14        20
  510  0.160839  39  20       20  1.86265e-09  5.32907e-15        20
  ..        ...  ..  ..      ...          ...          ...       ...
  </code></pre>
  
  <p>Finally, I want to include the mean squared error (<code>MSE</code>) for all the prediction (a summary of the <code>OLS</code> regression analysis) values. For example, if we look at row 5, the value of <code>X</code> is 2 and the value of <code>Y</code> is 10. Let's say the prediction value of <code>y</code> at the current row is 6 and therefore the <code>mse</code> will be <code>(10-6)^2</code>. The <code>sm.OLS</code> returns an instance of this class <code>&lt;class 'statsmodels.regression.linear_model.OLS'&gt;</code> when we do <code>print (RollOLS.summary())</code>. </p>
  
  <pre><code>OLS Regression Results                            
  ==============================================================================
  Dep. Variable:                      Y   R-squared:                        -inf
  Model:                            OLS   Adj. R-squared:                   -inf
  Method:                 Least Squares   F-statistic:                    -48.50
  Date:                Tue, 04 Jul 2017   Prob (F-statistic):               1.00
  Time:                        22:19:18   Log-Likelihood:                 2359.7
  No. Observations:                 100   AIC:                            -4713.
  Df Residuals:                      97   BIC:                            -4706.
  Df Model:                           2                                         
  Covariance Type:            nonrobust                                         
  ==============================================================================
                   coef    std err          t      P&gt;|t|      [95.0% Conf. Int.]
  ------------------------------------------------------------------------------
  const        239.0000   2.58e-09   9.26e+10      0.000       239.000   239.000
  time        4.547e-13   2.58e-10      0.002      0.999     -5.12e-10  5.13e-10
  X          -3.886e-16    1.1e-13     -0.004      0.997     -2.19e-13  2.19e-13
  ==============================================================================
  Omnibus:                       44.322   Durbin-Watson:                   0.000
  Prob(Omnibus):                  0.000   Jarque-Bera (JB):               86.471
  Skew:                          -1.886   Prob(JB):                     1.67e-19
  Kurtosis:                       5.556   Cond. No.                     9.72e+04
  ==============================================================================
  </code></pre>
  
  <p>But the value of <code>rsquared</code>(<code>print (RollOLS.rsquared))</code>, for example, should have been between <code>0</code> and <code>1</code> instead of <code>-inf</code> and this seems to be the issue with <code>missing intercepts</code>. If we want to print the <code>mse</code>, we do <code>print (RollOLS.mse_model)</code>... etc as per the <a href="http://www.statsmodels.org/dev/generated/statsmodels.regression.linear_model.RegressionResults.html" rel="nofollow noreferrer">documentation</a>. How can we add the <code>intercepts</code> and print the regression statistics with the correct values as we do for the predicted values? What am I doing wrong in here? Or is there another way of doing this using <code>scikit-learn</code>libraries? </p>