web-dev-qa-db-fra.com

Estimation de la régression progressive dans la trame Python

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?

10
Cofeinnie Bonda
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
15
Alexander

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]
0
Kiann