对于每一个下一列,将其与之前的所有列取消延迟



我需要一些帮助来开发这个逻辑。我有一个返回的数据框架,总共有4列。让我们调用列I1、I2、I3、I4。

我想用I1来取消延迟I2的数据。然后我想用I1和I2对I3中的数据进行解相关。最后,我想用I1、I2和I3对来自I4的数据进行解延迟。

我试图以一种自动的方式做到这一点,所以如果我稍后决定添加第5列I5,它将自动用I1、I2、I3和I4取消延迟。

我已经使用欧拉方法评估了所需的不相关次数。

参数:

s-列数unc-需要的取消关联

初始值:

s[0]=1,unc[0]=0#如果只有1列,则不需要

欧拉公式:unc[n+1]=s[n]+unc[n]&s[n+1]=s[n]+1

例如,如果添加一个新列,

unc[1]=s[0]+unc[0]=1+0=1#1需要不相关s[1]=s[0]+1=1+1=2

如果添加另一列(现在为3列(

unc[2]=s[1]+unc[1]=2+1=3#3需要

这个过程还在继续。

但问题是,我不知道如何将这种逻辑应用于python代码。

这是一个示例数据帧和一个我用来取消延迟数据的函数。

import pandas as pd
from sklearn import linear_model
d = {'I1':[10,20,30,40,50], 'I2':[11,21,31,41,51], 'I3':[12,22,32,42,52], 'I4':[13,23,33,43,53]}
some_dataframe = pd.DataFrame(data=d)
def linear_regression_model(main_data, data_i_want_to_uncorrelate):

lm = linear_model.LinearRegression()
model = lm.fit(main_data, data_i_want_to_uncorrelate)
X_variable = model.coef_
Intercept = model.intercept_
uncorelated_index1 = data_i_want_to_uncorrelate[data_i_want_to_uncorrelate.columns[0]] - (Intercept[0]+X_variable[0]*main_data[main_data.columns[0]])

return uncorelated_index1

感谢你的帮助和花时间提前帮助我!

我认为您正在寻找数据矩阵X的某种矩阵分解,假设它有N行p列,其中N>p(在您的特定情况下,N=5,p=4(。我会考虑QR因子分解,即X=Q*RQ是NxN正交的,R是Nxp上三角的。让我们用名称Q1调用Q的前p列,用名称Q2调用其余列,而R的前p行将被称为R1(由于R是上三角形,因此其余行为0(。然后Q1给出了新数据帧中的去相关列。(默认(";减少的";QR因子分解中的模式只会给你Q1,而不会计算Q2。

import numpy as np
X = some_dataframe.values
N, p = X.shape
Q1, R = np.linalg.qr(X)
decorrelated_dataframe = pd.DataFrame(data=Q1)

如果一个称为x的新列现在被添加到x上,那么去相关版本将简单地为x-Px,其中p是Q1的列空间上的投影矩阵,即p=Q1*Q1.T(经过一些简化(。

x = some_dataframe.loc[:,'new_column']
decorrelated_dataframe.loc[:,'new_column'] = x - np.matmul(x, np.matmul(Q1, Q1.T))

最新更新