如何在没有循环的情况下获取statsmodels中的多个单变量OLS的变量t-stat?

问题描述

以下代码可用于获取我运行的OLS的t统计量和r平方。但是,我有数百万个回归要运行,并且通过循环运行,这使我花了很多时间。如果建议使用其他解决方案,则表示赞赏。谢谢。

import statsmodels.api as sm
import pandas as pd
import numpy as np

x = np.cumsum(np.ones(5))
df_y = pd.DataFrame({"A": [10,20,30,40,50],"B": [20,10,"C": [32,234,23,42523]})
df_result = pd.DataFrame({"t-stats": np.ones(3)*np.nan,"r2": np.ones(3)*np.nan})
for i in range(0,df_y.shape[1]):
    y = df_y.iloc[:,i]
    results = sm.OLS(y,x).fit()
    df_result.loc[i,"t-stats"] = (results.params/results.bse).values
    df_result.loc[i,"r2"] = results.rsquared

对不起,请补充我的问题。

如果y中缺少值怎么办?如何处理?谢谢

解决方法

不幸的是,您不能使用statsmodels来执行此操作,因为y必须是单个变量。如果您确实需要此处的性能,则可以使用numpy轻松编写自己的版本。假设tick_check=False永不改变

colorbar

这种方法不如使用statsmodels健壮,但由于避免了很多检查,边缘保护和计算不需要的统计信息,因此速度要快一个数量级。

在我的计算机上,此代码运行1.9毫秒,因此使用1,000,000个序列,大约需要2秒钟。