我在两个股票之间做回归分析:
(y=银行矩阵['EXO.MI公司']
以及
x=银行矩阵['LDO.MI公司']). 你知道吗
我的任务是每20天更新一次斜率系数(回溯)。简而言之,我想要一个从第20天开始的斜率系数列表(我的回顾)。所以我运行了一个叫做reg的回归模型。你知道吗
与此同时,我创造了:
A)3个空列表:中间值=[],对冲=[],残差=[]
B)1个名为Regressione的数据帧,其中我要将我的回归结果(截距、斜率和残差)复制到此数据帧列(['Intercept'、'Hedge'、'residuals'])。你知道吗
现在整个代码:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import pandas_datareader as pdr
from sklearn.linear_model import LinearRegression
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()
tickers=['EXO.MI','LDO.MI']
end=datetime.date.today()
gap=datetime.timedelta(days=650)
start=end- gap
Bank=pdr.get_data_yahoo(tickers,start=start,end=end)
bank_matrix=Bank['Adj Close']
bank_matrix=bank_matrix.dropna()
exor=bank_matrix['EXO.MI']
leonardo=bank_matrix['LDO.MI']
Regressione=pd.DataFrame(data=np.zeros((len(exor),3)),columns=['Intercetta','Hedge','Residuals'],index=bank_matrix['EXO.MI'].index)
lookback=20
Hedge=[]
Intercetta=[]
Residuals=[]
for i in range(lookback,len(exor)):
reg=LinearRegression().fit(bank_matrix[['LDO.MI']][i-lookback+1:i],bank_matrix[['EXO.MI']][i-lookback+1:i])
# Regressione.iloc[Regressione[i,'Hedge']]=reg.coef_[0]
Hedge.append(reg.coef_[0])
Intercetta.append(reg.intercept_)
y_pred=reg.predict(bank_matrix[['LDO.MI']][lookback:])
Residuals.append(bank_matrix[['EXO.MI']][lookback:].to_numpy()-y_pred)
Regressione=pd.DataFrame(list(zip(Intercetta,Hedge,Residuals)),columns=['Intercetta','Hedge','Residuals'])
Regressione.set_index(bank_matrix[['EXO.MI']].index[lookback:],inplace=True)
最后一个问题:为什么在我的最后一个数据帧“Regressione”中,第三列(“残差”)是一个水平数组???你知道吗
所以,首先,我认为这两条线你做的是完全错误的:
你基本上试着对所有的点进行线性回归,从1到20,然后从2到21,从3到22等等。然后你试着将回归拟合到从观察20开始的数据。因此,你得到了5到24的模型,并在此基础上预测了20个观测值直到最后,并得到了预测值和实际值之间的差异(请注意,在你的
for
循环中bank_matrix[['EXO.MI']][lookback:].to_numpy()
不会改变)。你知道吗我想这里更有意义的是:
所以你要考虑模型的误差,或者:
因此,您可以尝试将基于当前时间跨度的预测与未来的数据相匹配。你知道吗
现在第一个选项将产生每行19个元素的列表,而另一个选项将产生430个元素的列表,每行减少1个元素,直到最后一行中有1个元素。因为这些都是残差,所以你有一条线,有一个斜率,每个给定的时间跨度有一个树篱,但是你有在这个范围内的观测数,产生每个不同的结果。所以取决于你想如何表达它-你可以让它成为平方残差的和,或者取平均残差-你可以让它成为一个数字,只需要对它进行进一步的变换。你知道吗
希望这有帮助。。。你知道吗
从文件中:
例如,您需要使用
df.loc
来修改数据帧中的数据。。。你知道吗相关问题 更多 >
编程相关推荐