这里有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---------------------------------
如何将许多回归结果整合到这样的摘要中?
答案 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)
关于第二个问题,结果摘要并未总结完整滚动回归,只是数据框本身中最后一个可用窗口。