我已经成功地获得了时间序列数据的线性回归线,这在很大程度上要归功于之前的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个标准差?供参考,以下是线性回归的统计信息:
编辑:作为参考,这是我最终要做的事情:
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()
最佳答案
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>
结果: