我有一个数据文件,包括第一列中的日期和第二列到第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] 这是我期望的斜率和截距。
我找了一些简单的例子,但没找到。
答案 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
检查了这个并获得了相同的结果。