2016-08-23 165 views
0

2個問題在這裏:滾動時間序列AR(1)Python數據框和MovingOLS中的迴歸估計?

首先。我有這樣一個數據幀:

  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行,我跑的AR(1)的迴歸Y使用第1行至第100行,並估計第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

您想嘗試將樣品與方程模型?這個方程有很多參數(稱爲估計量)。估算器的值將根據用於計算的訓練數據而變化。當您使用數據交叉驗證來估計這些模型參數時,這意味着您將獲得每個參數的分佈。基本上Coef將是估計量的平均值,而Std Err將是其標準偏差。其他數字告訴你關於你的估計量的這些統計數據是否正確的信心。

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) 

關於你提到的第二個問題,結果總結不總結全滾動迴歸,只是在數據幀本身最後可用的窗口。