2017-02-15 10 views
4

私は時系列データの線形回帰直線を得ることができました。だから私は、Pythonから上に描画次のプロット/ラインを持っている:Python - 進行中の1の計算線形回帰直線からの標準偏差

Linear Regression Line

私はもともとcsvファイルから価格/時系列データをインポートし、次のコードで、この回帰直線を得た:

f4 = open('C:\Users\cost9\OneDrive\Documents\PYTHON\TEST-ASSURANCE FILES\LINEAR REGRESSION MULTI TREND IDENTIFICATION\ES_1H.CSV')  
ES_1H = pd.read_csv(f4) 
ES_1H.rename(columns={'Date/Time': 'Date'}, inplace=True) 
ES_1H['Date'] = ES_1H['Date'].reset_index() 
ES_1H.Date.values.astype('M8[D]') 
ES_1H_Last_300_Periods = ES_1H[-300:] 
x = ES_1H_Last_300_Periods['Date'] 
y = ES_1H_Last_300_Periods['Close'] 
x = sm.add_constant(x) 
ES_1H_LR = pd.ols(y = ES_1H_Last_300_Periods['Close'], x = ES_1H_Last_300_Periods['Date']) 
plt.scatter(y = ES_1H_LR.y_fitted.values, x = ES_1H_Last_300_Periods['Date']) 

私が探しているのは、回帰直線から1標準偏差をプロット/識別できることです(上記の図を参照)。上記のコードの大部分は、回帰直線をプロットできるようにデータを適合させるだけです - 日付/時刻データを変更してolsの式で機能し、過去300期間のデータをカットするなどです。しかし、私は線形回帰によって描かれた線から1標準偏差を得る方法がわかりません。黄色の線が離れ回帰線から1つの標準偏差であることを...

Linear Regression channel

は、理想的には私が探しているものを次のようになります。誰もがここで線形回帰直線から1標準偏差を取得する方法を知っていますか?参考のため、ここでは線形回帰の統計情報は、次のとおりです。

Linear Regression Stats

編集:あなたはこのようにそれを行うことができます

plt.scatter(y = ES_1D_LR.y_fitted.values, x = ES_1D_Last_30_Periods['Date']) 
plt.scatter(y = ES_1D_Last_30_Periods.Close, x = ES_1D_Last_30_Periods.Date) 
plt.scatter(y = ES_1D_LR.y_fitted.values - np.std(ES_1D_LR.y_fitted.values), x = ES_1D_Last_30_Periods.Date) 
plt.scatter(y = ES_1D_LR.y_fitted.values + np.std(ES_1D_LR.y_fitted.values), x = ES_1D_Last_30_Periods.Date) 
plt.show() 

答えて

1

IIUC:

In [185]: x = np.arange(100) 

In [186]: y = x*0.6 

In [187]: plt.scatter(x, y, c='b') 
Out[187]: <matplotlib.collections.PathCollection at 0xc512390> 

In [188]: plt.scatter(x, y - np.std(y), c='y') 
Out[188]: <matplotlib.collections.PathCollection at 0xc683940> 

In [189]: plt.scatter(x, y + np.std(y), c='y') 
Out[189]: <matplotlib.collections.PathCollection at 0xc69a550> 
を参照するためには、ここで私がやってしまったものです

結果:

enter image description here

+0

すばらしい、ありがとう、私のデータのために働くものに似ています。だから私は上記と同様にプロットされた '回帰チャネル'を持っていますが、特定のxポイントで回帰直線の値を取得する方法を知っていますか?たとえば、あなたの例では、x = 60の回帰直線の値を探しています(グラフで約35のように見えます)。 –

+0

@ColeStarbuckのようなものです: 'y [np.where(x == 60)[0] [0]]'? – MaxU

+1

私は現在、z = ES_1D ['日付'] [ - 1:] n = z * 1.8758 + 1865.8121を使用しています。ここでzは私に最後の日付を与えてから、インターセプト+ z *スロープで2310.38これはグラフに従って右に見えます。私はそれが動作していると思う、ちょうどそれが意味をなさないことを確認したいと思います –

0

同じことを達成したかっただけです。ここで私はそれをやった。

import matplotlib.pyplot as plt 
import numpy as np 

を考えると、このデータ:

plt.plot(time, price) 
plt.plot(time, predicted_price) 
plt.show() 

enter image description here

プロットpredicted_price回帰直線の周りの窓:

sq_dis = (price - predicted_price) ** 2 
limit = (sq_dis.mean() + sq_dis.std()) * 0.3 # < - adjust window here 
filter = np.abs(sq_dis) < limit 
plt.plot(time, price) 
plt.plot(time, predicted_price) 
plt.plot(time[filter], price[filter]) 
plt.show() 

enter image description here