使用 Pandas 中数据框的最后一列单独回归每一列

Regress each column individually with the last column of a dataframe in Pandas

returns = df.pct_change(1) * 100

returns 是以日期为索引的数据框,我想用数据框的最后一列(^BSESN)单独回归每一列。由于有 700 多列,我想遍历这些列。我还想在每次回归后存储残差。 我使用了以下各种版本,但不断出现相同的错误。我需要在每个单独的回归过程中删除具有 NaN 值的行(而不是删除具有任何具有 nan 值的列的行)。

residuals = {}
for column in returns.columns[:-1]:
  selected = returns[['^BSESN', column]].dropna()
  reg = sm.OLS(selected[column], returns['^BSESN']).fit()
  residuals[column] = reg.residuals

但我不断收到以下错误:

MissingDataError: exog contains inf or nans

如何消除错误?任何有关执行此操作的最佳方法的指导将不胜感激。

将 OLS 调用更改为

reg = sm.OLS(selected[column], selected['^BSESN']).fit()

看到 returns['^BSESN'] 与您原来的 post 一样,没有删除任何缺失值。

由于某些列没有任何与 ^BSESN 匹配的行,您可以添加一个 if 来忽略这些列:

residuals = {}
for column in returns.columns[:-1]:
  selected = returns[['^BSESN', column]].dropna()
  if selected.shape[0] > 0:
    reg = sm.OLS(selected[column], selected['^BSESN']).fit()
    residuals[column] = reg.residuals