【问题标题】:Puzzles with rolling windows for statsmodels RollingOLS用于 statsmodels RollingOLS 的带有滚动窗口的谜题
【发布时间】:2021-09-20 00:14:06
【问题描述】:

我对@9​​87654323@ 的滚动窗口感到很困惑,这在RollingOLS example page 中有描述。 它提到了

对齐估计值,以便使用数据点 t、(t+1)、...、(t + windows) 估计的模型存储在位置 (t + windows) 中。

我有一些问题:

Q1:假设我们在第t行,如果我设置RollingOLS(endog, exog, window=60),它使用来自[t - 60, t]的数据估计模型(即(t - 60),(t - 59), ..., t) 有 61 个观测值,对吗?但这是一个 61 天的窗口。

Q2:如果我们使用model.params提取估计的系数,第t行的系数是使用来自[t - 60, t]的数据的OLS结果(即(t - 60) , (t - 59), ..., t),我说的对吗?

Q3:如果我在 Q2 的猜测是正确的,我们如何解决 here 提到的滚动问题?那是

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

首先对于第 101 行,我使用第 1 到第 100 行对 Y-X1、X2、X3 进行回归,并估计第 101 行的 Y;

然后对于第 102 行,我使用第 2 到第 101 行对 Y-X1、X2、X3 进行回归,并估计第 102 行的 Y;

然后对于第 103 行,我使用第 2 到第 101 行对 Y-X1、X2、X3 进行回归,并估计第 103 行的 Y;

直到最后一行。

【问题讨论】:

    标签: python statsmodels rolling-computation


    【解决方案1】:

    示例中有一个小错字。当windown 时,计算的第一个值使用0,1,...,n-1 观测值并出现在res.params[n-1] 中。这就是实际执行窗口大小的方式。你可以在这里看到这个

    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    import pandas_datareader as pdr
    import seaborn
    
    import statsmodels.api as sm
    from statsmodels.regression.rolling import RollingOLS
    
    factors = pdr.get_data_famafrench("F-F_Research_Data_Factors", start="1-1-1926")[0]
    industries = pdr.get_data_famafrench("10_Industry_Portfolios", start="1-1-1926")[0]
    
    endog = industries.HiTec - factors.RF.values
    exog = sm.add_constant(factors["Mkt-RF"])
    rols = RollingOLS(endog, exog, window=60)
    rres = rols.fit()
    params = rres.params.copy()
    params.index = np.arange(1, params.shape[0] + 1)
    params.iloc[57:62]
    

    请注意,这里的索引是 1、2、...,因此第一个位于 60 位,表示用于计算第一个估计值的 60 个观测值。

           const    Mkt-RF
    58       NaN       NaN
    59       NaN       NaN
    60  0.876155  1.399240
    61  0.879936  1.406578
    62  0.953169  1.408826
    

    要使用直到并包括任何点 t 的数据来获得估计值,请使用 res.params[t]

    shift

    如果您希望观测值与“样本外”对齐,以便使用观测值的参数估计值,包括观测值tt+1 对齐,您可以使用shift

    params.shift(1).iloc[57:62]
    

    您会看到之前为 60 的参数值现在为 61。

    【讨论】:

    • 谢谢,凯文。我发现示例页面已被修改。现在我的问题解决了。
    猜你喜欢
    • 2019-06-06
    • 1970-01-01
    • 2018-07-22
    • 2013-01-21
    • 1970-01-01
    • 2020-07-12
    • 2021-12-03
    • 2020-08-14
    • 1970-01-01
    相关资源
    最近更新 更多