Проблема в том, что, поскольку я выполняю скользящую оконную регрессию для данных временных рядов, мне приходится выполнять регрессию N × M × T, что составляет более миллиона OLS. Хотя каждый OLS работает очень быстро, на моем слабом ноутбуке его запуск занимает несколько часов.
В настоящее время я использую statsmodels.OLS.fit() как способ получить мои параметры для каждого y против линейной регрессии xi как таковой. Z_matrix — это матрица данных, а i представляет ith столбец, который нужно срезать для регрессии. Количество строк составляет около 100, а размер z_matrix — примерно 100 × 500.
Код: Выделить всё
ols_model = sm.OLS(endog=endog, exog=self.z_matrix[:, i][..., None]).fit()
return ols_model.params, ols_model.ssr, ols_model.fittedvalues[..., None]
Код: Выделить всё
# slower: 40sec vs 30sec for statsmodel for 100 repeated runs of 150 linear regressions
params = np.linalg.pinv(self.z_matrix[:, [i]]).dot(endog)
y_hat = self.z_matrix[:, [i]]@params
ssr = sum((y_hat-endog)**2)
return params, ssr, y_hat
Подробнее здесь: https://stackoverflow.com/questions/625 ... th-1-exoge