2014-11-13 3 views
2

Я новичок в пандах здесь, искал, но не смог найти ответ, если да или нет.Революция качения многочлена в пандах

до сих пор я в состоянии вычислить прокатные коэффициенты простой регрессии (Y= coef1 * A + coef2 * B) так:

model = pd.ols(y=df['Y'],x=df[['A','B']],window_type='rolling',window=100) 

и model.beta возвращает DataFrame в coef1 и coef2 ..

в statsmodels I может сделать полиномиальную регрессию, но нет качения опции окна:

poly_2 = smf.ols(formula='Y ~ 1 + A+ I(B** 2.0)', data=df).fit() 

как я мог «смеси» на 2 и имеют прокатные коэффициенты этого полиномиальная регрессия? Я не видел в пандах способ писать формулы в стиле patsy, но, возможно, я искал плохо.

спасибо за вашу помощь

ответ

3

Полином регрессии, как показано это обычный ванильный обычный минимум квадрат регрессии, где одна из переменных имеет показатель. Единственное, что вы получаете от использования smf.ols (я думаю) - это возможность использовать формулы R-esque. Как и формула I(B**2.0). Но, к счастью, та же логика может быть построена без smf, а затем можно использовать Pandas ols.

Давайте установим некоторые примеры данных (всегда хороший первый шаг, когда задают вопросы, КСТАТИ):

n=500 
df = pd.DataFrame(randn(n), index=pd.date_range('1/1/2000', periods=n)) 
df.columns = ['A'] 
df['B'] = randn(n) 
df['Y'] = 5 + 3 * df.A + 6 * df.B **2 + randn(n) 

Таким образом, в этом примере данные Y является функцией A и B^2. Таким образом, мы можем сделать оконном МНК, без полинома:

pd.ols(y=df['Y'],x=df[['A','B']],window_type='rolling',window=100) 
-------------------------Summary of Regression Analysis------------------------- 

Formula: Y ~ <A> + <B> + <intercept> 

Number of Observations:   100 
Number of Degrees of Freedom: 3 

R-squared:   0.1184 
Adj R-squared:  0.1003 

Rmse:    9.6488 

F-stat (2, 97):  6.5159, p-value:  0.0022 

Degrees of Freedom: model 2, resid 97 

-----------------------Summary of Estimated Coefficients------------------------ 
     Variable  Coef Std Err  t-stat p-value CI 2.5% CI 97.5% 
-------------------------------------------------------------------------------- 
      A  3.8514  1.0675  3.61  0.0005  1.7592  5.9436 
      B  0.0693  0.9073  0.08  0.9393 -1.7091  1.8476 
    intercept 11.8889  0.9655  12.31  0.0000  9.9965 13.7813 
---------------------------------End of Summary--------------------------------- 

Но если вы хотите, чтобы многочлен, вы просто создать переменную, которая является полиномом:

df['B2'] = df.B **2 

, а затем вы можете запустить МНК с использованием B2:

pd.ols(y=df['Y'],x=df[['A','B2']],window_type='rolling',window=100) 

-------------------------Summary of Regression Analysis------------------------- 

Formula: Y ~ <A> + <B2> + <intercept> 

Number of Observations:   100 
Number of Degrees of Freedom: 3 

R-squared:   0.9869 
Adj R-squared:  0.9867 

Rmse:    1.1748 

F-stat (2, 97): 3662.8849, p-value:  0.0000 

Degrees of Freedom: model 2, resid 97 

-----------------------Summary of Estimated Coefficients------------------------ 
     Variable  Coef Std Err  t-stat p-value CI 2.5% CI 97.5% 
-------------------------------------------------------------------------------- 
      A  2.8258  0.1304  21.67  0.0000  2.5702  3.0814 
      B2  6.0091  0.0748  80.29  0.0000  5.8624  6.1558 
    intercept  5.1074  0.1448  35.28  0.0000  4.8237  5.3911 
---------------------------------End of Summary--------------------------------- 
Смежные вопросы