Ich habe es geschafft, eine lineare Regressionslinie für Zeitreihendaten zu erhalten, sehr dank stackoverflow vorher. So habe ich die folgenden Plots/Zeile von Python gezogen über:Python - Berechne laufend 1 Standardabweichung von der linearen Regressionslinie
Ich habe diese Regressionslinie mit dem folgenden Code, der ursprünglich Preis/Zeitreihendaten aus einer CSV-Datei importieren:
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'])
Was ich suche, ist in der Lage zu sein, 1 Standardabweichung von der Regressionslinie zu plotten/identifizieren (im Bild oben gezeigt). Der Großteil des obigen Codes dient lediglich dazu, die Daten so anzupassen, dass die Regressionslinie erfolgreich gezeichnet werden kann. Ändern Sie die Datums-/Zeitdaten so, dass sie in der ols-Formel funktionieren, schneiden Sie die Daten auf die letzten 300 Perioden ab. Aber ich bin mir nicht sicher, wie man eine Standardabweichung von der Linie nehmen kann, die über die lineare Regression gezeichnet wird.
So ideal, was ich suche etwas würde wie folgt aussehen:
... mit den gelben Linien 1 Standardabweichung entfernt Linie von der Regression zu sein. Kann jemand hier 1 Standardabweichung von der linearen Regressionslinie erhalten? Als Referenz sind hier die Statistiken für die lineare Regression:
edit: Als Referenz hier ist, was ich am Ende tun:
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()
Toll, danke sowas funktioniert für meine Daten. Also habe ich den 'Regressions-Kanal' ähnlich wie oben gezeichnet, aber wüssten Sie, wie man einen Wert für die Regressionslinie an einem bestimmten x-Punkt erhält? Zum Beispiel suche ich in meinem Beispiel nach dem Wert der Regressionslinie bei x = 60 (sieht in Ihrem Diagramm ungefähr wie 35 aus). –
@ColeStarbuck, etwa so: 'y [np.where (x == 60) [0] [0]]'? – MaxU
Ich verwende z = ES_1D ['Datum'] [- 1:] n = z * 1.8758 + 1865.8121 wo z mir das letzte Datum zum Beispiel, und dann n nehmen Sie die Intercept + Z * Steigung, um 2310.38 zu bekommen , die nach dem Diagramm richtig aussieht.Ich nehme an, das funktioniert, möchte nur bestätigen, dass es Sinn macht –