Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.6k views
in Technique[技术] by (71.8m points)

pandas - LOOP univariate rolling window regression on entire DF Python

I have a dataframe of 24 variables (24 columns x 4580 rows) from 2008 to 2020.

My independant variable is the first one in the DF and the dependant variables are the 23 others.

I've done a test for one rolling window regression, it works well, here is my code :

import statsmodels.api as sm

from statsmodels.regression.rolling import RollingOLS

import seaborn

seaborn.set_style('darkgrid')

pd.plotting.register_matplotlib_converters()

 

x = sm.add_constant(df[['DIFFSWAP']])

y = df[['CADUSD']]

rols = RollingOLS(y,x, window=60)

rres = rols.fit()

params = rres.params

r_sq = rres.rsquared

Now, what i want to do, i'd like to do a loop to regress (rolling window) all the dependant variables of the DF (columns 2:24) on the independant variable (column 1) and store the coefficients and the rsquareds.

My ultimate goal is to extract Rsquareds and Coefficients and put them in dataframes(or lists or whatever) and then graph them.

I'm new to Python so I'd be very gratefull for any help.

Thank you!

question from:https://stackoverflow.com/questions/65836299/loop-univariate-rolling-window-regression-on-entire-df-python

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Can you throw it all in a loop and store the results in some other object like a dict?

Potential solution:

data = {}
for column in list(df.columns)[2:]:  # iterate over columns 2 to 24

    x = sm.add_constant(df[column])
    y = df[['CADUSD']] ## This never changes from CADUSD, right?
    rols = RollingOLS(y, x, window=60)
    rres = rols.fit()
    params = rres.params
    r_sq = rres.rsquared
    # Store results from each column's fit as a new dict entry
    data[column] = {'params':params, 'r_sq':r_sq}

results_df = pd.DataFrame(data).T

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...