python的ols回归_Python滚动窗口OLS回归估计

下面是使用statsmodels进行OLS滚动的概要,应该对您的数据有效。只需使用df=pd.read_csv('estimated_pred.csv')而不是我随机生成的df:import pandas as pd

import numpy as np

import statsmodels.api as sm

#random data

#df=pd.DataFrame(np.random.normal(size=(500,3)),columns=['time','X','Y'])

df=pd.read_csv('estimated_pred.csv')

df=df.dropna() #uncomment this line to drop nans

window = 5

df['a']=None #constant

df['b1']=None #beta1

df['b2']=None #beta2

for i in range(window,len(df)):

temp=df.iloc[i-window:i,:]

RollOLS=sm.OLS(temp.loc[:,'Y'],sm.add_constant(temp.loc[:,['time','X']])).fit()

df.iloc[i,df.columns.get_loc('a')]=RollOLS.params[0]

df.iloc[i,df.columns.get_loc('b1')]=RollOLS.params[1]

df.iloc[i,df.columns.get_loc('b2')]=RollOLS.params[2]

#The following line gives you predicted values in a row, given the PRIOR row's estimated parameters

df['predicted']=df['a'].shift(1)+df['b1'].shift(1)*df['time']+df['b2'].shift(1)*df['X']

我存储常量和beta,但是有很多方法可以用来预测。。。您可以使用您的拟合模型对象mine isRollOLS和.predict()方法,或者您自己乘以它,就像我在最后一行中所做的那样(在本例中,这样做更容易,因为变量的数量是固定的和已知的,您可以一次完成简单的列计算)。

不过,要对sm进行预测,就像这样:predict_x=np.random.normal(size=(20,2))

RollOLS.predict(sm.add_constant(predict_x))

但请记住,如果按顺序运行上述代码,则预测值将仅使用最后一个窗口的模型。如果要使用不同的模型,则可以在运行时保存这些模型,或者在for循环中预测值。注意,您还可以使用RollOLS.fittedvalues获得合适的值,因此如果您对循环中的每个迭代平滑数据拉取并保存RollOLS.fittedvalues[-1]。

为了帮助了解如何使用您自己的数据,在运行滚动回归循环之后,这里是my df的尾部:time X Y a b1 b2

495 0.662463 0.771971 0.643008 -0.0235751 0.037875 0.0907694

496 -0.127879 1.293141 0.404959 0.00314073 0.0441054 0.113387

497 -0.006581 -0.824247 0.226653 0.0105847 0.0439867 0.118228

498 1.870858 0.920964 0.571535 0.0123463 0.0428359 0.11598

499 0.724296 0.537296 -0.411965 0.00104044 0.055003 0.118953

你可能感兴趣的:(python的ols回归)