问题描述
以下代码可用于获取我运行的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秒钟。