首页 > 解决方案 > 每日 OLS 回归的 for 循环日期

问题描述

我正在尝试每天针对 Y 对 X 运行 OLS 回归,如下所示。这段时间在 2008 年 1 月至 2011 年 12 月之间。我们的想法是获取每日参数,从中推断出波动率。第一天我设法进行了回归,但其他日子似乎从第一天开始就开始了价值。由于每天的观察结果不一样,因为我是这里的新手,所以很难。

请帮我纠正下面的代码。

import statsmodels.api as sm`
from statsmodels.formula.api import ols`

##groupby by index date to enable recursive regressions by day

Kempf_etal2015_model = np.zeros((1,5))`
intercept = np.zeros((1,1))`
betas = np.zeros((1,4))`
for idx, day in df_fp.groupby(df_fp.index.date):`
#     for i in   (day):
    for i in range(len(day)) :

        for j in range(len(df_fp)):
            spreadlag1 = df_fp['relative_spread'].shift(-1)
            c_spreeeed = df_fp['relative_spread'] - df_fp['relative_spread'].shift(-1)
            c_spreeeed_lag1 = df_fp['relative_spread'] - df_fp['relative_spread'].shift(-2)
            c_spreeeed_lag2 = df_fp['relative_spread'] - df_fp['relative_spread'].shift(-3)
            c_spreeeed_lag3 = df_fp['relative_spread'] - df_fp['relative_spread'].shift(-4)
    
            Kempf_etal2015_model = ols('c_spreeeed ~spreadlag1+c_spreeeed_lag1+c_spreeeed_lag2+c_spreeeed_lag3', df_fp).fit()
            intercept =Kempf_etal2015_model.params[:0]
            betas = Kempf_etal2015_model.params[1:]
            print(Kempf_etal2015_model.params)

我最终得到以下结果

Intercept          0.000102
spreadlag1        -0.104292
c_spreeeed_lag1    0.430733
c_spreeeed_lag2    0.020808
c_spreeeed_lag3    0.072575
dtype: float64
Intercept          0.000102
spreadlag1        -0.104292
c_spreeeed_lag1    0.430733
c_spreeeed_lag2    0.020808
c_spreeeed_lag3    0.072575
dtype: float64

标签: pythondataframeloops

解决方案


推荐阅读