2015-09-02 3 views
0

Мне нужно выполнить качающуюся линейную регрессию для X периодов за раз. У меня есть следующие панд dataframe:Роллинг-линейная регрессия

value 
0 4354 
1 7564 
2 657 
3 7876 

можно выполнить линейную регрессию по всей dataframe с помощью SciPy следующим образом:

from scipy import stats 

slope, intercept, r_value, p_value, std_err = stats.linregress(df.index, df['value']) 

А затем, чтобы получить линейной регрессии, что я делаю:

df['linreg'] = intercept + slope * df.index 

Но то, что я не мог понять, как это сделать, - это скатная линейная регрессия, например, с 20-ти рядами.

+0

Возможно, вы хотите ['roll_apply'] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.rolling_apply.html#pandas.rolling_apply) – EdChum

+0

Выберите 20 строк и вызовите linregress на них; повторите еще 20 строк. –

ответ

0

Для линейной регрессии необходимо вычислить пять сумм: Xi, Xi², Yi, Yi², Xi.Yi. Вы можете обновить их в режиме качения, добавив новые очки и вычитая старые.

Это отлично работает для целых чисел, которые не превышают точность представления машины. В противном случае вам нужно перезапускать время от времени, чтобы уменьшить количество ошибок.