2013-04-08 21 views
3

我有一列數據文件,其中包含第1列中的日期和第2至第n列中的一系列測量值。我喜歡熊貓瞭解日期,但我無法弄清楚如何做簡單的最合適的線。使用np.polyfit很容易,但它不明白日期。我的嘗試樣本如下。使用熊貓作爲基於時間的數據的最佳擬合線

from datetime import datetime 
from StringIO import StringIO 
import pandas as pd 

zdata = '2013-01-01, 5.00, 100.0 \n 2013-01-02, 7.05, 98.2 \n 2013-01-03, 8.90, 128.0 \n 2013-01-04, 11.11, 127.2 \n 2013-01-05 13.08, 140.0' 

unames = ['date', 'm1', 'm2'] 

df = pd.read_table(StringIO(zdata), sep="[ ,]*", header=None, names=unames, \ 
parse_dates=True, index_col=0) 

Y = pd.Series(df['m1']) 

model = pd.ols(y=Y, x=df, intercept=True) 

In [232]: model.beta['m1'] 
Out[232]: 0.99999999999999822 

In [233]: model.beta['intercept'] 
Out[233]: -7.1054273576010019e-15 

如何解釋這些數字?如果我使用1,2..5而不是日期np.polyfit給出[2.024,2.9558] 這是我期望的斜率和截距。

我尋找簡單的例子,但沒有找到任何。

+0

pandas看起來像statsmodels和patsy庫,所以pip在調用pd.ols之前安裝它們 – Antony 2013-07-08 02:34:34

回答

2

我相信你在做多元線性迴歸與您提供的代碼:

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

Formula: Y ~ <m1> + <m2> + <intercept> 

Number of Observations:   5 
Number of Degrees of Freedom: 3 

R-squared:   1.0000 
Adj R-squared:  1.0000 

Rmse:    0.0000 

F-stat (2, 2):  inf, p-value:  0.0000 

Degrees of Freedom: model 2, resid 2 

-----------------------Summary of Estimated Coefficients------------------------ 
     Variable  Coef Std Err  t-stat p-value CI 2.5% CI 97.5% 
-------------------------------------------------------------------------------- 
      m1  1.0000  0.0000 271549416425785.53  0.0000  1.0000  1.0000 
      m2 -0.0000  0.0000  -0.09  0.9382 -0.0000  0.0000 
    intercept -0.0000  0.0000  -0.02  0.9865 -0.0000  0.0000 
---------------------------------End of Summary--------------------------------- 

注意公式迴歸:Y ~ <m1> + <m2> + <intercept>。如果你想爲M1的簡單線性迴歸,並分別M2,那麼你應該創建的xs:

X = pd.Series(range(1, len(df) + 1), index=df.index) 

,使迴歸:

model = pd.ols(y=Y, x=X, intercept=True) 

結果:

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

Formula: Y ~ <x> + <intercept> 

Number of Observations:   5 
Number of Degrees of Freedom: 2 

R-squared:   0.9995 
Adj R-squared:  0.9993 

Rmse:    0.0861 

F-stat (1, 3): 5515.0414, p-value:  0.0000 

Degrees of Freedom: model 1, resid 3 

-----------------------Summary of Estimated Coefficients------------------------ 
     Variable  Coef Std Err  t-stat p-value CI 2.5% CI 97.5% 
-------------------------------------------------------------------------------- 
      x  2.0220  0.0272  74.26  0.0000  1.9686  2.0754 
    intercept  2.9620  0.0903  32.80  0.0001  2.7850  3.1390 
---------------------------------End of Summary--------------------------------- 

這是一個有點奇怪的是,當你使用np.polyfit時,你會得到稍微不同的數字。這是我的輸出:

[ 2.022 2.962] 

這與熊貓'ols輸出相同。我用scipy的linregress查了一下,得到了同樣的結果。

+0

感謝您解釋如何使用df.index製作X系列。 – user1625344 2013-04-08 23:46:56