Мне удалось получить линию линейной регрессии для данных временных рядов, во многом благодаря предыдущему stackoverflow. Итак, у меня есть следующие графики/линия, нарисованные из python:
Я получил эту линию регрессии со следующим кодом, первоначально импортируя данные ценового/временного ряда из 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 стандартное отклонение от линии регрессии. Кто-нибудь знает, как здесь получить 1 стандартное отклонение от линии линейной регрессии? Для справки, вот статистика линейной регрессии:
edit: Для справки вот что я сделал:
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()





