【发布时间】:2019-10-10 01:13:26
【问题描述】:
我在两只股票之间进行回归:
(y=bank_matrix['EXO.MI']
和
x=bank_matrix['LDO.MI'])。
我的任务是每 20 天更新一次斜率系数(回顾)。简而言之,我想从第 20 天(我的回顾)开始列出斜率系数。所以我运行了这个名为 reg 的回归模型。
与此同时,我创建:
A)3 个空列表:Intercetta=[]、Hedge=[]、Residuals=[]
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”中,第三列(“Residuals”)是一个水平数组???
【问题讨论】:
-
因为你是这样插入的。更好的问题是——你想在那里拥有什么? IE。你想要的输出是什么?
-
我的输出就是我已经说过的:一个具有 3 列(Intercetta、Hedge、Residuals)的数据框(Regressione)。每行必须包含 3 个元素,1 个用于列。但我真的不明白为什么在将 'y_pred' 附加到 'Residuals' 时,它变成了一个水平序列。我哪里错了?
-
好吧,不执行你的代码,你附加到每一行残差的是:
bank_matrix[['EXO.MI']][lookback:].to_numpy()-y_pred它看起来确实像一个水平列表...... -
好的,但是如何让我的第三列(残差)看起来与其他两列(Intercetta,残差)一样????我需要残差的列向量来构建我的信号,所以我必须使用并绘制它们。
-
好的,调查一下,
exor是什么 - 我在执行过程中收到exor is not defined错误