滚动时间序列AR(1)Python数据帧和MovingOLS中的回归估计?

时间:2016-08-23 00:05:05

标签: python pandas dataframe

这里有2个问题:

首先。我有这样的数据框:

           Date       Y           X1          X2          X3
22   2004-05-12  9.348158e-09  0.000081  0.000028     0.000036   
23   2004-05-13  9.285989e-09  0.000073  0.000081     0.000097   
24   2004-05-14  9.732308e-09  0.000085  0.000073     0.000096   
25   2004-05-17  2.235977e-08  0.000089  0.000085     0.000099   
26   2004-05-18  2.792661e-09  0.000034  0.000089     0.000150   
27   2004-05-19  9.745323e-09  0.000048      
1000   2004-05-20  1.835462e-09  0.000034  0.000048     0.000099   
1001   2004-05-21  3.529089e-09  0.000037  0.000034     0.000043   
1002   2004-05-24  3.453047e-09  0.000043  0.000037     0.000059   
1003   2004-05-25  2.963131e-09  0.000038  0.000043     0.000059   
1004   2004-05-26  1.390032e-09  0.000029  0.000038     0.000054   

我想运行一个滚动的100天窗口OLS回归估计,即:

首先是第101行,我使用第1行到第100行运行Y的AR(1)回归,并估算第101行的Y;

然后对于第102行,我使用第2行到第101行运行Y的AR(1)回归,并估计第102行的Y;

然后对于第103行,我使用第2行到第101行运行Y的AR(1)回归,并估计第103行的Y;

...

直到最后一行。

我现在使用以下代码进行AR(1)回归:

df = pd.DataFrame({'data':data_in['Y'],'Date':data_in['Date']})
df = df.set_index('Date')
ar = statsmodels.tsa.ar_model.AR(df)
res_ar = ar.fit(maxlag=1)

当然,可以使用任何可能的方法来实现目标。怎么做?

二。当我使用MovingOLS时,输出如下:

-------------------------Summary of Regression Analysis-------------------------

Formula: Y ~ <RV(t-1)> + <RV(t-1)*RQ(t-1)^0.5> + <RV(t-1|t-5)> + <RV(t-1|t-22)>
             + <intercept>

Number of Observations:         1420
Number of Degrees of Freedom:   5

R-squared:         0.3370
Adj R-squared:     0.3352

Rmse:              0.0001

F-stat (4, 1415):   179.8353, p-value:     0.0000

Degrees of Freedom: model 4, resid 1415

-----------------------Summary of Estimated Coefficients------------------------
Variable       Coef    Std Err     t-stat    p-value    CI 2.5%   CI 97.5%
--------------------------------------------------------------------------------
RV(t-1)     0.5031     0.0496      10.14     0.0000     0.4058     0.6003
RV(t-1)*RQ(t-1)^0.5   -55.2344    10.1137      -5.46     0.0000   -75.0573   -35.4115
RV(t-1|t-5)     0.1736     0.0542       3.20     0.0014     0.0673     0.2799
RV(t-1|t-22)     0.2381     0.0563       4.23     0.0000     0.1276     0.3485
intercept     0.0000     0.0000       2.22     0.0268     0.0000     0.0000
---------------------------------End of Summary---------------------------------

如何将许多回归结果整合到这样的摘要中?

2 个答案:

答案 0 :(得分:0)

您正尝试使用等式对样本进行建模。该等式具有许多参数(称为估计量)。估计器的值将根据用于计算它的训练数据而改变。当您使用数据交叉验证估算此类模型参数时,这意味着您将获得每个参数的分布。基本上Coef将是估算工具的平均值,Std Err将是其标准差。其他数字告诉您这些关于估算器的统计信息是否正确的信心。

答案 1 :(得分:0)

MovingOLS并不是特别有效,因此对于每个回归模型中只有一个X变量的大型数据集,有一个自定义实现是有意义的,因为速度差异可能很大。这样的例子就是这样的:

def rolling_regression(df, x_name, y_name, window):
    window_inv = 1.0 / window
    df['X_SUM'] = df[x_name].rolling(window, min_periods=window).sum()
    df['Y_SUM'] = df[y_name].rolling(window, min_periods=window).sum()
    df['XY_SUM'] = (df[x_name] * df[y_name]).rolling(window, min_periods=window).sum()
    df['XX_SUM'] = numpy.square(df[x_name]).rolling(window, min_periods=window).sum()
    df['XY_COV'] = df['XY_SUM'] - window_inv * df['X_SUM'] * df['Y_SUM']
    df['X_VAR'] = df['XX_SUM'] - window_inv * numpy.square(df['X_SUM'])
    df['BETA'] = df['XY_COV'] / df['X_VAR']
    return df[['BETA']][window - 1:]

要将此函数与现有时间序列一起使用来计算AR(1)模型,您只需将时间序列移到单独的列中。

df[x_name] = df[y_name].shift(-1)

关于第二个问题,结果摘要并未总结完整滚动回归,只是数据框本身中最后一个可用窗口。