回归大熊猫的时间序列三角洲

时间:2014-04-17 20:08:15

标签: python pandas regression linear-regression

假设我有这样的时间序列

    A   B
0   a   b
1   c   d
2   e   f 
3   g   h

0,1,2,3是次,a,c,e,g是一个时间序列,b,d,f,h是另一个时间序列。

我需要的是增量的回归,意思是

       dA     dB
0    (a-c)  (b-d)
1    (c-e)  (d-f)
2    (e-g)  (f-h)

我要回归dB = X dA + Y

如果我有一个像上面这样的pandas数据框,那么最好的方法就是这样做。 另外,接下来我想做一个移动窗口回归。

1 个答案:

答案 0 :(得分:4)

pandasstatsmodel可以很好地协同工作,看看这个例子:

In [16]:

import statsmodels.formula.api as smf
In [17]:

df=pd.DataFrame(np.random.random((10,2)), columns=['A','B'])
In [18]:

df.index=pd.date_range('1/1/2014', periods=10)
In [19]:

dfd=df.diff().dropna()
In [20]:

print df
                   A         B
2014-01-01  0.455924  0.375653
2014-01-02  0.585738  0.864693
2014-01-03  0.201121  0.640144
2014-01-04  0.685951  0.256225
2014-01-05  0.203623  0.007993
2014-01-06  0.626527  0.719438
2014-01-07  0.327197  0.324088
2014-01-08  0.115016  0.635999
2014-01-09  0.660070  0.246438
2014-01-10  0.141730  0.125918

[10 rows x 2 columns]
In [21]:

print dfd
                   A         B
2014-01-02  0.129814  0.489041
2014-01-03 -0.384617 -0.224549
2014-01-04  0.484830 -0.383919
2014-01-05 -0.482328 -0.248233
2014-01-06  0.422905  0.711446
2014-01-07 -0.299330 -0.395351
2014-01-08 -0.212182  0.311911
2014-01-09  0.545054 -0.389561
2014-01-10 -0.518340 -0.120520

[9 rows x 2 columns]
In [22]:

mod1 = smf.ols('A ~ B', data=dfd).fit()
In [23]:

print mod1.summary()
                            OLS Regression Results                            
==============================================================================
Dep. Variable:                      A   R-squared:                       0.036
Model:                            OLS   Adj. R-squared:                 -0.101
Method:                 Least Squares   F-statistic:                    0.2637
Date:                Fri, 18 Apr 2014   Prob (F-statistic):              0.623
Time:                        13:54:27   Log-Likelihood:                -4.5434
No. Observations:                   9   AIC:                             13.09
Df Residuals:                       7   BIC:                             13.48
Df Model:                           1                                         
==============================================================================
                 coef    std err          t      P>|t|      [95.0% Conf. Int.]
------------------------------------------------------------------------------
Intercept     -0.0295      0.152     -0.194      0.852        -0.389     0.330
B              0.1960      0.382      0.513      0.623        -0.707     1.099
==============================================================================
Omnibus:                        1.832   Durbin-Watson:                   3.290
Prob(Omnibus):                  0.400   Jarque-Bera (JB):                1.006
Skew:                           0.506   Prob(JB):                        0.605
Kurtosis:                       1.711   Cond. No.                         2.52
==============================================================================

对于第二个问题,您必须提供更多详细信息或打开单独的问题。有许多不同类型的滑动窗口,您需要更具体。

修改

您刚才描述的简单线性回归,如果您只想存储两个系数,可以按如下方式实现:

win_size=5
win_step=2
coef_ls=[]
for i in range(0,len(dfd)-win_size,2):
    coef_ls.append(smf.ols('A ~ B', data=dfd.ix[i:i+win_size]).fit().params)
pd.concat(coef_ls, axis=1).T # The resulting DataFrame of coefficients.