【问题标题】:Need Help Implementing a Rolling window | IndexError: Index 52 is out of bounds for axis 0 with size 14需要帮助实施滚动窗口 | IndexError:索引 52 超出轴 0 的范围,大小为 14
【发布时间】:2022-06-23 12:42:21
【问题描述】:

在尝试为我的数据回归结果实现滚动窗口时,我遇到了索引错误。

例如,我试图从第 1-52 周、第 2-53 周、第 3-54 周、第 4-55 周...等运行滚动回归。

这是我到目前为止的代码。 对于data=rolling_window.iloc[y:x],如何在循环中将 y 和 x 都增加 +1 直到数据结束?即 [2:53], [3:54]... 我尝试使用两个 x,y for 循环,但它不起作用。

这是错误

index 52 is out of bounds for axis 0 with size 14

这是代码。

df = pd.read_excel(\"dataset\\Special_Proj.xlsx\") 
df[\'Date\'] = pd.to_datetime(df[\'Date\'], format=\'%m/%d/%y\')


def rolling_regression_stats():
    tickers = df[[\'FDX\', \'BRK\', \'MSFT\', \'NVDA\', \'INTC\', \'AMD\', \'JPM\', \'T\', \'AAPL\', \'AMZN\', \'GS\']]

    rolling_window = df
    for y in range(1, 1161):
        for x in range(52, 1161):
            for t in tickers:
                model = smf.ols(f\'{t} ~ SP50\', data=rolling_window.iloc[y,x]).fit()
                coef_and_intercept = model.params.set_axis([f\'{t} Alpha\', f\'{t} Beta\']).to_string()
                std_error = model.bse.set_axis([f\'{t} Alpha STD Err \', f\'{t} Beta STD Err\']).to_string()
                print(coef_and_intercept)
                print(std_error, \'\\n\\n\')

rolling_regression_stats()

这是没有 x, y for 循环的代码输出。这只是数据框的回归。

FDX Alpha    10.285265
FDX Beta      2.332717
FDX Alpha STD Err     4.826221
FDX Beta STD Err      0.035187


BRK Alpha   -58.007537
BRK Beta      2.916011
BRK Alpha STD Err     3.007438
BRK Beta STD Err      0.021927


MSFT Alpha   -113.047496
MSFT Beta       1.794111
MSFT Alpha STD Err     2.559493
MSFT Beta STD Err      0.018661

这是 df 的外观以供参考。

        Date        SP50         FDX         BRK        MSFT        NVDA        INTC         AMD         JPM           T        AAPL        AMZN          GS    
0 1999-12-31  100.000000  100.000000  100.000000  100.000000  100.000000  100.000000  100.000000  100.000000  100.000000  100.000000  100.000000  100.000000 NaN
1 2000-01-07   98.109239  116.030534  100.713012   95.449679   89.214380   99.620349  112.311015   93.644406   90.512812   96.778115   91.379310   87.657598 NaN
2 2000-01-14   99.720946  113.740458   93.048128   96.145610   93.608522  125.208808  139.524838   95.092516   86.025639   97.689969   84.400657   90.909091 NaN
3 2000-01-21   98.101753  101.984733   94.295900   88.865096   95.339553  118.982536  131.317495   93.885758   88.205127  108.267481   81.527094   90.975448 NaN
4 2000-01-28   92.575123   94.198473   93.226381   84.154176   79.627162  114.198937  121.814255   98.712789   80.512815   98.844983   81.034485   92.368945 NaN

    标签: python pandas dataframe statistics statsmodels


    【解决方案1】:

    这是执行滚动回归的代码。

    def rolling_regression_stats():
        tickers = df[['FDX', 'BRK', 'MSFT', 'NVDA', 'INTC', 'AMD', 'JPM', 'T', 'AAPL', 'AMZN', 'GS']]
    
        rolling_window = df
        iterable = zip(range(1110), range(52,1162))
        for y, x in iterable:
            for t in tickers:
                model = smf.ols(f'{t} ~ SP50', data= rolling_window.iloc[y:x]).fit()
                coef_and_intercept = model.params.set_axis([f'{t} Alpha', f'{t} Beta']).to_string()
                std_error = model.bse.set_axis([f'{t} Alpha STD Err ', f'{t} Beta STD Err']).to_string()
                print(coef_and_intercept)
                print(std_error, '\n\n')
    
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-16
      • 2020-04-24
      • 2016-07-29
      • 2021-07-17
      • 2021-05-24
      • 2018-07-23
      • 2019-03-01
      • 2021-08-23
      相关资源
      最近更新 更多