2013-01-16 17 views
7

Chciałbym użyć funkcji OLS pandy w celu dopasowania linii trendu do mojej serii danych. Czy ktoś wie, jak korzystać z indeksu datetime z serii Pandas jako predyktor w OLS?OLS z pandami: indeks datetime jako predyktor

Na przykład, powiedzmy, że mam prosty czasowy:

>>> ts 
2001-12-31 19.828763 
2002-12-31 20.112191 
2003-12-31 19.509116 
2004-12-31 19.913656 
2005-12-31 19.701649 
2006-12-31 20.022819 
2007-12-31 20.103024 
2008-12-31 20.132712 
2009-12-31 19.850609 
2010-12-31 19.290640 
2011-12-31 19.936210 
2012-12-31 19.664813 
Freq: A-DEC 

chciałbym zrobić OLS na nim za pomocą indeksu jako prognostyk:

model = pd.ols(y=ts,x=ts.index,intercept=True) 

Ale jako x jest lista indeksu datetime, funkcja zwraca błąd. Ktoś ma pomysł?

Mogę użyć linregress od scipy.stats, ale zastanawiam się, czy jest to możliwe z Pandami.

Dzięki Greg

Odpowiedz

5

Problem polega na tym, że nie można przekazać Index do ols.
Zmień go na Series:

In [153]: ts 
Out[153]: 
2011-01-01 00:00:00 19.828763 
2011-01-01 01:00:00 20.112191 
2011-01-01 02:00:00 19.509116 
Freq: H, Name: 1 

In [158]: type(ts.index) 
Out[158]: pandas.tseries.index.DatetimeIndex 


In [154]: df = ts.reset_index() 

In [155]: df 
Out[155]: 
       index   1 
0 2011-01-01 00:00:00 19.828763 
1 2011-01-01 01:00:00 20.112191 
2 2011-01-01 02:00:00 19.509116 

In [160]: type(df['index']) 
Out[160]: pandas.core.series.Series 


In [156]: model = pd.ols(y=df[1], x=df['index'], intercept=True) 

In [163]: model 
Out[163]: 

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

Formula: Y ~ <x> + <intercept> 

Number of Observations:   3 
Number of Degrees of Freedom: 1 

R-squared:  -0.0002 
Adj R-squared: -0.0002 

Rmse:    0.3017 

F-stat (1, 2):  -inf, p-value:  1.0000 

Degrees of Freedom: model 0, resid 2 

-----------------------Summary of Estimated Coefficients------------------------ 
     Variable  Coef Std Err  t-stat p-value CI 2.5% CI 97.5% 
-------------------------------------------------------------------------------- 
      x  0.0000  0.0000  0.00  0.9998 -0.0000  0.0000 
    intercept  0.0000 76683.4934  0.00  1.0000 -150299.6471 150299.6471 
---------------------------------End of Summary--------------------------------- 
+0

Dziękujemy za pomoc! – leroygr

+2

Wygląda na to, że to rozwiązanie może przestać działać (2 lata później). Zobacz tutaj: http://stackoverflow.com/questions/30425490/linear-regression-from-time-series-pandas/30431930#30431930 Prawdopodobnie z powodu zmian pand dokonanych w indeksie datetime? – JohnE

Powiązane problemy