J'ai un dataframe comme ceci:
Date Y X1 X2 X3
22 2004-05-12 9.348158e-09 0.000081 0.000028 0.000036
23 2004-05-13 9.285989e-09 0.000073 0.000081 0.000097
24 2004-05-14 9.732308e-09 0.000085 0.000073 0.000096
25 2004-05-17 2.235977e-08 0.000089 0.000085 0.000099
26 2004-05-18 2.792661e-09 0.000034 0.000089 0.000150
27 2004-05-19 9.745323e-09 0.000048 0.000034 0.000053
......
1000 2004-05-20 1.835462e-09 0.000034 0.000048 0.000099
1001 2004-05-21 3.529089e-09 0.000037 0.000034 0.000043
1002 2004-05-24 3.453047e-09 0.000043 0.000037 0.000059
1003 2004-05-25 2.963131e-09 0.000038 0.000043 0.000059
1004 2004-05-26 1.390032e-09 0.000029 0.000038 0.000054
Je souhaite exécuter une estimation par régression OLS à fenêtre glissante de 100 jours, qui est la suivante:
Tout d'abord pour la 101ème ligne, je lance une régression de Y-X1, X2, X3 en utilisant les lignes 1 à 100, et je calcule Y pour la 101ème ligne;
Ensuite, pour la 102ème ligne, je lance une régression de Y-X1, X2, X3 en utilisant les lignes 2 à 101 et estime Y pour la 102 ligne;
Ensuite, pour la 103ème ligne, je lance une régression de Y-X1, X2, X3 en utilisant les lignes 2 à 101 et j’estime Y pour la 103ème ligne;
......
Jusqu'au dernier rang.
Comment faire ça?
model = pd.stats.ols.MovingOLS(y=df.Y, x=df[['X1', 'X2', 'X3']],
window_type='rolling', window=100, intercept=True)
df['Y_hat'] = model.y_predict
Je devais aussi faire une régression progressive, et j'ai rencontré le problème de la fonction amoindrie des pandas dans les pandas.ols .
Fondamentalement, j'utilise d'abord créer un tableau numpy vide, puis numpy polyfit pour générer les valeurs de régression dans une boucle for. Ensuite, j'ajoute les tableaux numpy dans le cadre de données panda. J'espère que cela aide la communauté!
data = pd.DataFrame(x_data, y_data)
regression = np.zeros((len(data.index),2)) #set the regression numpy array empty first
for row in range(0, len(data.index), 1):
y = data.y_data[row: row + 300]
x = data.x_data[row: row + 300]
regression[row] = np.polyfit(x, y, 1)
data['beta'] = regression[:,0]
data['alpha'] = regression[:,1]