Pandas rodando OLS en desuso

Cuando ejecuto un código antiguo, aparece la siguiente advertencia: “el módulo pandas.stats.ols está en desuso y se eliminará en una versión futura. Nos referimos a paquetes externos como statsmodels”. No podría entender si hay un módulo OLS rodante fácil de usar en statsmodel. Lo bueno del módulo pandas.stats.ols era que se podía indicar fácilmente si se necesitaba o no una intersección, el tipo de ventana (enrollar, expandir) y la longitud de la ventana. ¿Hay algún módulo que haga exactamente lo mismo?

Por ejemplo:

YY = DataFrame(np.log(np.linspace(1,10,10)),columns=['Y']) XX = DataFrame(np.transpose([np.linspace(1,10,10),np.linspace(‌​2,10,10)]),columns=[‌​'XX1','XX2']) from pandas.stats.ols import MovingOLS MovingOLS( y=YY['Y'], x=XX, intercept=True, window_type='rolling', window=5).resid 

Me gustaría un ejemplo de cómo obtener el resultado de la última línea (el residuo de los elementos móviles) utilizando statsmodel o cualquier otro módulo.

Gracias

MovingOLS un módulo MovingOLS diseñado para imitar los MovingOLS obsoletos de los MovingOLS ; esta aqui

Tiene tres clases principales:

  • OLS : regresión de mínimos cuadrados ordinaria estática (ventana única). Las salidas son matrices NumPy.
  • RollingOLS : regresión de mínimos cuadrados ordinarios (ventana múltiple). Los resultados son matrices NumPy de dimensión superior.
  • PandasRollingOLS : envuelve los resultados de RollingOLS en pandas Series & DataFrames. Diseñado para imitar el aspecto del módulo de pandas en desuso.

Tenga en cuenta que el módulo es parte de un paquete (que actualmente estoy en proceso de cargar a PyPi) y requiere una importación entre paquetes.

Las dos primeras clases anteriores se implementan completamente en NumPy y utilizan principalmente el álgebra matricial. RollingOLS aprovecha la difusión ampliamente también. Los atributos imitan en gran medida los statsmodels OLS RegressionResultsWrapper .

Un ejemplo:

 # Pull some data from fred.stlouisfed.org from pandas_datareader.data import DataReader syms = {'TWEXBMTH' : 'usd', 'T10Y2YM' : 'term_spread', 'PCOPPUSDM' : 'copper' } data = (DataReader(syms.keys(), 'fred', start='2000-01-01') .pct_change() .dropna()) data = data.rename(columns=syms) print(data.head()) # usd term_spread copper # DATE # 2000-02-01 0.01260 -1.40909 -0.01997 # 2000-03-01 -0.00012 2.00000 -0.03720 # 2000-04-01 0.00564 0.51852 -0.03328 # 2000-05-01 0.02204 -0.09756 0.06135 # 2000-06-01 -0.01012 0.02703 -0.01850 # Rolling regressions from pyfinance.ols import OLS, RollingOLS, PandasRollingOLS y = data.usd x = data.drop('usd', axis=1) window = 12 # months model = PandasRollingOLS(y=y, x=x, window=window) # Here `.resids` will be a stacked, MultiIndex'd DataFrame. Each outer # index is a "period ending" and each inner index block are the # subperiods for that rolling window. print(model.resids) # end subperiod # 2001-01-01 2000-02-01 0.00834 # 2000-03-01 -0.00375 # 2000-04-01 0.00194 # 2000-05-01 0.01312 # 2000-06-01 -0.01460 # 2000-07-01 -0.00462 # 2000-08-01 -0.00032 # 2000-09-01 0.00299 # 2000-10-01 0.01103 # 2000-11-01 0.00556 # 2000-12-01 -0.01544 # 2001-01-01 -0.00425 # 2017-06-01 2016-07-01 0.01098 # 2016-08-01 -0.00725 # 2016-09-01 0.00447 # 2016-10-01 0.00422 # 2016-11-01 -0.00213 # 2016-12-01 0.00558 # 2017-01-01 0.00166 # 2017-02-01 -0.01554 # 2017-03-01 -0.00021 # 2017-04-01 0.00057 # 2017-05-01 0.00085 # 2017-06-01 -0.00320 # Name: resids, dtype: float64