2016-12-05 12 views
0

Я только начал изучать Python и мне интересно, как я могу сделать линейную кривую регрессии с времени серии ценовых данных (например, цены закрытия, которая имеет только Y факторы)Кто-нибудь знает, как рисовать линейную регрессионную кривую в python или связанные с ней функции, чтобы нарисовать ее?

import pandas as pd 
import pandas_datareader.data as web 
import matplotlib.pyplot as plt 
from datetime import datetime 

start=datetime(2015,1,1) 
end=datetime(2015,12,31) 

df = web.DataReader("AMZN", "yahoo", start, end) 
close = df['Close'] 

I ссылается на это web page, чтобы понять основную идею рисования кривой линейной регрессии, но я не знаю, какие функции использовать, чтобы записать ее снова в python.

Пожалуйста, дайте мне несколько советов или рекомендаций по решению проблемы. Спасибо, что прочитали это!

+0

Просьба уточнить, если вы спросите совет о _calculating_ коэффициенты регрессии или _drawing_ линия регрессии с известными коэффициентами. – DyZ

+0

Прошу прощения за мой неопределенный вопрос. Конечная цель состоит в том, чтобы нарисовать линейную регрессионную кривую, которая показывает тенденцию цены акций, подобную этой (http://www.onlinetradingconcepts.com/TechnicalAnalysis/LinRegCurve.html), но я не могу найти формулу, связанную с ней, поэтому я Интересно, как это сделать. – maynull

ответ

1

Try с этим:

import pandas_datareader.data as web 
from datetime import datetime 
import numpy as np 
import matplotlib.pyplot as plt 
import statsmodels.api as sm 

start = datetime(2015, 1, 1) 
end = datetime(2015, 12, 31) 

df = web.DataReader("AMZN", "yahoo", start, end) 

df['day'] = df.index.map(lambda observation_timestamp: observation_timestamp.dayofyear) 
y = df.Close 
X = df.day 
X = sm.add_constant(X) 
est = sm.OLS(y, X) 
est = est.fit() 

X_prime = np.linspace(X.day.min(), X.day.max(), 100) 
X_prime = sm.add_constant(X_prime) 
y_hat = est.predict(X_prime) 

plt.plot(X_prime[:,1], y_hat) 
plt.scatter(X.day, y) 
plt.show() 

enter image description here

выполнить эту est.summary():

      OLS Regression Results        
============================================================================== 
Dep. Variable:     Close R-squared:      0.935 
Model:       OLS Adj. R-squared:     0.934 
Method:     Least Squares F-statistic:      3570. 
Date:    Mon, 05 Dec 2016 Prob (F-statistic):   5.06e-150 
Time:      00:27:53 Log-Likelihood:    -1199.8 
No. Observations:     252 AIC:        2404. 
Df Residuals:      250 BIC:        2411. 
Df Model:       1           
Covariance Type:   nonrobust           
============================================================================== 
       coef std err   t  P>|t|  [95.0% Conf. Int.] 
------------------------------------------------------------------------------ 
const  289.9491  3.622  80.053  0.000  282.816 297.083 
day   1.0212  0.017  59.748  0.000   0.988  1.055 
============================================================================== 
Omnibus:      15.313 Durbin-Watson:     0.117 
Prob(Omnibus):     0.000 Jarque-Bera (JB):    6.134 
Skew:       0.007 Prob(JB):      0.0466 
Kurtosis:      2.236 Cond. No.       429. 
============================================================================== 

другой пример:

import pandas_datareader.data as web 
from datetime import datetime 
import statsmodels.api as sm 
from patsy.highlevel import dmatrices 

import matplotlib.pyplot as plt 

start = datetime(2015, 1, 1) 
end = datetime(2015, 12, 31) 

df = web.DataReader("AMZN", "yahoo", start, end) 

df['day'] = df.index.map(lambda observation_timestamp: observation_timestamp.dayofyear) 

y, X = dmatrices('Close ~ day', data=df, return_type='dataframe') 

mod = sm.OLS(y, X) 

res = mod.fit() 
sm.stats.linear_rainbow(res) 
sm.graphics.plot_regress_exog(res, "day") 
plt.show() 

enter image description here

изменил sm.graphics.plot_regress_exog(res, "day") к sm.graphics.plot_fit(res, "day")

enter image description here

выполнить это: res.summary()

      OLS Regression Results        
============================================================================== 
Dep. Variable:     Close R-squared:      0.935 
Model:       OLS Adj. R-squared:     0.934 
Method:     Least Squares F-statistic:      3570. 
Date:    Mon, 05 Dec 2016 Prob (F-statistic):   5.06e-150 
Time:      00:26:04 Log-Likelihood:    -1199.8 
No. Observations:     252 AIC:        2404. 
Df Residuals:      250 BIC:        2411. 
Df Model:       1           
Covariance Type:   nonrobust           
============================================================================== 
       coef std err   t  P>|t|  [95.0% Conf. Int.] 
------------------------------------------------------------------------------ 
Intercept 289.9491  3.622  80.053  0.000  282.816 297.083 
day   1.0212  0.017  59.748  0.000   0.988  1.055 
============================================================================== 
Omnibus:      15.313 Durbin-Watson:     0.117 
Prob(Omnibus):     0.000 Jarque-Bera (JB):    6.134 
Skew:       0.007 Prob(JB):      0.0466 
Kurtosis:      2.236 Cond. No.       429. 
============================================================================== 
+0

Спасибо за ответ! Могу я задать вам еще один вопрос? Сюжеты, которые вы показываете мне, все линейны (топор). Вы знаете, как рисовать линию линейной регрессии, которая кривая и следует за изменением цен? (Например, например: http://www.onlinetradingconcepts.com/images/technicalanalysis/LinRegCurveES.gif) – maynull

 Смежные вопросы

  • Нет связанных вопросов^_^