微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为因变量集计算滚动窗口多元线性回归的有效方法?

如何解决为因变量集计算滚动窗口多元线性回归的有效方法?

我有一个从1926年至今的相对大量的公司(〜25k,每个由PERMNO代表)的财务数据(月收益)数据框。

dependent variables: dataframe of monthly return

我的目标是使用每个回归的60个月回报期,对三个独立变量进行回归,即市场回报率(Mkt-RF)和两个因子投资组合回报率(SMB&HML)。

independent variables

据我了解,我可以使用statsmodel的RollingOLS为每家公司实现这一目标。但是,这意味着将遍历所有25,000家公司,这似乎不是很有效。例如,对一家公司进行回归需要约250毫秒,即对于所有25k而言,这将> 1.5小时。实际上,时间仍然会增加,因为除了计算系数外,我还需要进行其他操作,例如回归残差。

timing example

我的第一个想法是将自变量与因变量匹配,以构造以下df:

df of all firms

然后使用类似的

df.rolling(window=60,min_periods=24).apply(lambda x: myreg(x['RET'],x[['Mkt-RF','SMB','HML']])

和矩阵代数计算回归系数

def myreg(x,y):
   Y = y.values.reshape(-1,1)
   X = np.concatenate((np.ones(shape=Y.shape),x.values),1)
   coeffs = inv(X.transpose().dot(X)).dot(X.transpose()).dot(Y)

   return coeffs

我知道至少两个问题,为什么这不起作用:

  1. 对于一家新公司,.rolling不会“从0开始”,即在回归中会混合来自不同公司的数据。
  2. rolling().apply()分别适用于每个输入数据框的列(see here),即我没有找到一种方法来应用计算回归系数的函数

尽管我很确定我不是第一个遇到此问题的人,但在以前有关类似主题的讨论中我找不到一个有用的答案。

我认为有一个解决方案,可以避免效率低下/代价高昂的循环并保存中间结果,但是我不知道该怎么做。 关于如何实现我的有效计算回归系数的目标的任何建议,或者关于如何解决上述问题的任何建议?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。