Python - 计算线性回归线的持续1个标准差

7
我已经成功地为时间序列数据获得了线性回归线,非常感谢先前在stackoverflow上的帮助。所以我从Python中得到了以下图表/线条绘制:

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个标准偏差。

因此,理想情况下,我的需求应该是这样的:

Linear Regression channel

...其中黄色线条距离回归线相差1个标准偏差。有人知道如何从这里的线性回归线获取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()
3个回答

2
我只是想达到同样的目的。这是我做的方法。
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


2

如果我理解正确的话,您可以这样做:

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>

结果:

这里输入图片描述


(注:该内容涉及 IT 技术,翻译可能存在专业术语,请以原文为准。)

太好了,谢谢。类似这样的东西适用于我的数据。所以我已经绘制出了类似上面的“回归通道”,但是你知道如何在某个x点检索回归线的值吗?例如,在你的例子中,我正在寻找x = 60处回归线的值(在你的图表中大约为35)。 - Cole Starbuck
@ColeStarbuck,像这样:y[np.where(x == 60)[0][0]] - MaxU - stand with Ukraine
1
我目前正在使用 z = ES_1D['Date'][-1:] n = z1.8758 + 1865.8121,其中 z 取得了最后一个日期,然后 n 取截距 + z斜率得到 2310.38,根据图表看起来是正确的。我想这个方法可行,只是想验证一下它是否有意义。 - Cole Starbuck

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接