问题描述
我有两个问题。如下所示,就像从线性回归模型创建滚动残差数组的数组一样。 这两个问题是-
下面的代码可以更有效吗?
如果我们不知道有多少个不同的X系列怎么办。就像您将y循环并回归到X1,y到X2,y到X3,y到X4等以此类推到Xn。然后,您需要明显地连接残差并创建滚动残差数组。
import yfinance as yf
import pandas as pd
import statsmodels.api as sm
#resids of first x
data = yf.download("SPY AAPL AMZN",start="2012-01-01",end="2017-04-30")['Close']
xx=data['AAPL'].pct_change().dropna()
xv=data['AMZN'].pct_change().dropna()
yy=data['SPY'].pct_change().dropna()
X=sm.add_constant(xx).to_numpy()
y=yy.to_numpy()
XX=sm.add_constant(xv).to_numpy()
#ols regression
def reside(X,y):
x_const=X
X=sm.add_constant(X)
coef = np.linalg.inv(X.T @ X) @ X.T @ y
resid1=(y-(x_const*coef[0] -coef[1])).flatten()
return resid1
def rolling_window(a,window,step_size):
shape = a.shape[:-1] + (a.shape[-1] - window + 1 - step_size + 1,window)
strides = a.strides + (a.strides[-1] * step_size,)
return np.lib.stride_tricks.as_strided(a,shape=shape,strides=strides)
X=xx.to_numpy()
y=yy.to_numpy()
XX=xv.to_numpy()
X=rolling_window(X,30,1)
y=rolling_window(y,1)
XX=rolling_window(XX,1)
ll=list(map(lambda X,y : reside(X,y),X,y))
ll2=list(map(lambda X,y))
residarray=[len(ll)]
for i,j in zip(ll,ll2):
i=i.reshape(len(i),1)
j=j.reshape(len(j),1)
residarray.append(np.concatenate((i,j),axis=1))
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)