Название описывает мою проблему для следующего скрипта (пожалуйста, запустите его сначала, а затем прочитайте мой последний вопрос):
Теперь весь код:
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()
import datetime
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)
Код работает, однакоУ меня есть 2 вопроса:
- Это 'reg._residues' реальные остатки от Y (реальное значение 'EXO.MI') и y предсказано? Я спрашиваю, потому что график остатков былвсе, кроме нормально распределенного или стационарного
- Ребята, я схожу с ума: КАК МОЖНО СЧИТАТЬ ЖИЗНЕННЫЕ ОСТАТКИ В 'FOR'LOOP? попытался:
- сделать разницу между реальными значениями y и reg.predict
- сделать ручное вычисление: y_predicted = Intercetta + Hedge * bank_matrix [['LDO.MI]]
Но Python всегда сообщает мне о проблемах. Честно говоря, мне очень трудно понять, как Python работает для этого ....
Спасибо