【发布时间】:2017-03-10 06:51:24
【问题描述】:
我认为我对如何完成此任务有一个非常合理的想法,但我不能 100% 确定所有步骤。这个问题主要是作为一个健全性检查,以确保我以最有效的方式执行此操作,并且我的数学实际上是正确的(因为我的统计知识并不完全完美)。
无论如何,对我正在尝试做的一些解释:
我有很多时间序列数据,我想对其进行一些线性回归。特别是,我对 500 个不同的变量进行了大约 2000 次观察。对于每个变量,我需要使用两个解释变量(大约 2000 个观察值的两个附加向量)执行回归。因此,对于 500 个不同 Y 中的每一个,我需要在以下回归 Y = aX_1 + bX_2 + e 中找到 a 和 b。
到目前为止,我一直在使用 statsmodels 包中的 OLS 函数来执行我的回归。然而,据我所知,如果我想使用 statsmodels 包来解决我的问题,我将不得不调用它数百次,这似乎通常效率低下。
因此,我决定重新审视一些我很久没有真正接触过的统计数据。如果我的知识仍然正确,我可以将所有观察结果放入一个大约 2000 x 500 的大 Y 矩阵中。然后我可以将解释变量放入大约 2000 x 2 的 X 矩阵中,并得到所有结果通过计算(X'Y)/(X'X),我的 500 个回归。如果我使用基本的 numpy 东西(使用 * 的矩阵乘法和使用 matrix.I 的逆)来执行此操作,我猜它会比执行数百个 statsmodel OLS 调用要快得多。
以下是我的问题:
- 我做的 numpy 东西是否比以前多次调用 statsmodels 的方法更快?如果是这样,这是完成我想要的最快/最有效的方法吗?我假设是这样,但是如果您知道更好的方法,那么我会很高兴听到它。 (当然,我不是第一个需要以这种方式计算许多回归的人。)
- 如何处理矩阵中的缺失数据?我的时间序列数据不会很好和完整,并且偶尔会丢失值。如果我只是尝试在 numpy 中进行常规矩阵乘法,则 NA 值将传播,我最终会得到一个主要是 NA 的矩阵作为我的最终结果。如果我独立进行每个回归,我可以在执行回归之前删除包含 NA 的行,但是如果我在 2000 x 500 的大矩阵上执行此操作,我最终会从我的其他一些变量中删除实际的非 NA 数据,我显然不希望这种情况发生。
- 在我首先将时间序列数据放入矩阵之前,确保时间序列数据实际上正确排列的最有效方法是什么?我观察的开始和结束日期不一定相同,有些系列可能有其他系列没有的日子。如果我要选择一种方法来执行此操作,我会将所有观察结果放入按日期索引的 pandas 数据框中。然后 pandas 最终会为我完成所有的工作,我可以在完成后提取底层的 ndarray。这是最好的方法,还是 pandas 有某种开销,我可以通过以不同的方式进行矩阵构造来避免?
【问题讨论】:
-
缺少数据和时间序列对齐是个大问题。 Pandas 有很多文档,很多经验,很多用户;见pandas missing_data和SO pandas+missing-data和SO pandas+time-series
标签: python python-3.x numpy linear-regression