Мне удалось получить линейную регрессионную линию для данных временных рядов, в основном благодаря stackoverflow. Таким образом, у меня есть следующие участки/линию, проведенную через из питона:Python - Вычислить текущее 1 Стандартное отклонение от линейной регрессионной линии
Я получил эту линию регрессии с помощью следующего кода, первоначально импорта данных цена/время серии из 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 стандартное отклонение от линии линейной регрессии здесь? Для справки, вот статистика для линейной регрессии:
редактировать: Для справки, вот что я в конечном итоге делает:
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()
Отлично, спасибо что-то похожее на то, что работает для моих данных. Таким образом, у меня есть «регрессионный канал», построенный аналогично выше, но знаете ли вы, как получить значение для линии регрессии в определенной точке х? Например, в вашем примере я ищу значение линии регрессии при x = 60 (примерно на 35 в вашем графике). –
@ColeStarbuck, что-то вроде этого: 'y [np.where (x == 60) [0] [0]]'? – MaxU
В настоящее время я использую z = ES_1D ['Date'] [- 1:] n = z * 1.8758 + 1865.8121 где z получает, например, последнюю дату, а затем n берет перехват + z *, чтобы получить 2310.38 , который выглядит правильно в соответствии с графиком.Я полагаю, что это работает, просто хотел бы проверить это имеет смысл –