Python - 计算与线性回归线的持续 1 标准差
Python - Calculate ongoing 1 Standard Deviation from linear regression line
我已经设法得到时间序列数据的线性回归线,非常感谢之前的Whosebug。所以我从 python:
中提取了以下 plots/line
我用下面的代码得到了这条回归线,最初是从 csv 文件导入 price/time 系列数据:
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'])
我正在寻找的是能够 plot/identify 与回归线(如上图所示)相差 1 个标准差。上面的大部分代码只是为了使数据能够成功地绘制回归线 - 更改 Date/Time 数据,使其适用于 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>
结果:
我只是想实现同样的目标。这是我的做法。
import matplotlib.pyplot as plt
import numpy as np
鉴于此数据:
plt.plot(time, price)
plt.plot(time, predicted_price)
plt.show()
围绕 predicted_price
回归线绘制 window:
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()
我发现这种方法更接近于我计划绘制回归图的方式,所以也许您也会发现它很有趣:
使用函数“plt.fill_between”将均值和(均值+-标准差)之间的区域变灰,如下所示link:
https://jakevdp.github.io/PythonDataScienceHandbook/04.03-errorbars.html
我已经设法得到时间序列数据的线性回归线,非常感谢之前的Whosebug。所以我从 python:
中提取了以下 plots/line我用下面的代码得到了这条回归线,最初是从 csv 文件导入 price/time 系列数据:
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'])
我正在寻找的是能够 plot/identify 与回归线(如上图所示)相差 1 个标准差。上面的大部分代码只是为了使数据能够成功地绘制回归线 - 更改 Date/Time 数据,使其适用于 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>
结果:
我只是想实现同样的目标。这是我的做法。
import matplotlib.pyplot as plt
import numpy as np
鉴于此数据:
plt.plot(time, price)
plt.plot(time, predicted_price)
plt.show()
围绕 predicted_price
回归线绘制 window:
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()
我发现这种方法更接近于我计划绘制回归图的方式,所以也许您也会发现它很有趣:
使用函数“plt.fill_between”将均值和(均值+-标准差)之间的区域变灰,如下所示link: https://jakevdp.github.io/PythonDataScienceHandbook/04.03-errorbars.html