我得到了很好的利用了大熊猫的MovingOLS
类(来源这里不推荐使用内)stats/ols
模块.不幸的是,完全被大熊猫0.20摧毁了.
关于如何以有效的方式运行滚动OLS回归的问题已被多次询问(例如,这里),但在我看来,有点广泛地表达并没有得到很好的答案.
这是我的问题:
我怎样才能最好地模仿大熊猫的基本框架MovingOLS
?这个类最吸引人的特点是能够将多个方法/属性视为单独的时间序列 - 即系数,r平方,t-统计等,而无需重新运行回归.例如,您可以创建类似model = pd.MovingOLS(y, x)
,然后调用.t_stat
,.rmse
,.std_err
,等.在下面的示例中,相反,我没有看到被迫分别计算每个统计信息的方法.有没有一种方法不涉及创建滑动/滚动"块"(步幅)和运行回归/使用线性代数来获取每个模型参数?
更广泛地说,大熊猫在幕后发生了什么使得rolling.apply
无法采用更复杂的功能?*当你.rolling
用外行的术语创建一个对象时,内部发生了什么 - 它与循环每个窗口和创建一个根本不同我正在做下面的高维数组?
*即func
传递给.apply
:
必须从ndarray输入生成单个值*args和**kwargs传递给函数
以下是我目前处理的一些样本数据,回归贸易加权美元对利率差价和铜价的百分比变化.(这没有多大意义;只是随机选择它们.)我已经从基于类的实现中取出它并尝试将其剥离为更简单的脚本.
from datetime import date
from pandas_datareader.data import DataReader
import statsmodels.formula.api as smf
syms = {'TWEXBMTH' : 'usd',
'T10Y2YM' : 'term_spread',
'PCOPPUSDM' : 'copper'
}
start = date(2000, 1, 1)
data = (DataReader(syms.keys(), 'fred', start)
.pct_change()
.dropna())
data = data.rename(columns …
Run Code Online (Sandbox Code Playgroud)