使用Pandas可获得最佳拟合线时间数据

时间:2013-04-08 01:49:30

标签: pandas

我有一个数据文件,包括第一列中的日期和第二列到第n列中的一系列测量。我喜欢Pandas了解日期,但我无法弄清楚如何做简单的最佳拟合线。使用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.95] 这是我期望的斜率和截距。

我找了一些简单的例子,但没找到。

1 个答案:

答案 0 :(得分: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]

与pandas'ols输出相同。我用scipy的linregress检查了这个并获得了相同的结果。