运行 每个变量之间的单变量回归 python
Run univariate regression between each variable python
我有一个包含 49 列的 daraframe,我想看看列之间是否存在某种关系,即每列之间是否存在 运行 简单线性回归。预期输出应为列和行同名并由回归系数填充的矩阵。
例如df
:
bar foo too ten
1 2 3 4
4 5 6 5
7 8 9 6
输出:
bar foo too ten
bar r_coef(bar,bar) r_coef(bar,foo) r_coef(bar,too) r_coef(bar,ten)
foo r_coef(foo,bar) r_coef(foo,foo) r_coef(foo,too) r_coef(foo,ten)
too r_coef(too,bar) r_coef(too,foo) r_coef(too,too) r_coef(too,ten)
ten r_coef(ten,bar) r_coef(ten,foo) r_coef(ten,too) r_coef(ten,ten)
看起来你只是想使用 corr
:
df.corr()
输出:
bar foo too ten
bar 1.0 1.0 1.0 1.0
foo 1.0 1.0 1.0 1.0
too 1.0 1.0 1.0 1.0
ten 1.0 1.0 1.0 1.0
不那么模棱两可的例子:
np.random.seed(0)
df = pd.DataFrame(np.random.random(size=(4,4)),
columns=['bar', 'foo', 'too', 'ten'])
df.corr()
bar foo too ten
bar 1.000000 -0.701808 0.595832 -0.211943
foo -0.701808 1.000000 -0.911949 -0.547439
too 0.595832 -0.911949 1.000000 0.551369
ten -0.211943 -0.547439 0.551369 1.000000
IIUC,可以用np.polyfit
。您有一次多项式 (y = mx + b
),因此将次数设置为 1 并且您想要获得截距值 (b
)。
正如@mozway 建议的那样,使用 corr
但使用自定义方法:
# [1] is the intercept value, [0] is the slope
r_coef = lambda x, y: np.polyfit(x, y, deg=1)[1]
out = df.corr(method=r_coef)
print(out)
# Output
bar foo too ten
bar 1.000000 1.000000 2.0 3.666667
foo 1.000000 1.000000 1.0 3.333333
too 2.000000 1.000000 1.0 3.000000
ten 3.666667 3.333333 3.0 1.000000
我有一个包含 49 列的 daraframe,我想看看列之间是否存在某种关系,即每列之间是否存在 运行 简单线性回归。预期输出应为列和行同名并由回归系数填充的矩阵。
例如df
:
bar foo too ten
1 2 3 4
4 5 6 5
7 8 9 6
输出:
bar foo too ten
bar r_coef(bar,bar) r_coef(bar,foo) r_coef(bar,too) r_coef(bar,ten)
foo r_coef(foo,bar) r_coef(foo,foo) r_coef(foo,too) r_coef(foo,ten)
too r_coef(too,bar) r_coef(too,foo) r_coef(too,too) r_coef(too,ten)
ten r_coef(ten,bar) r_coef(ten,foo) r_coef(ten,too) r_coef(ten,ten)
看起来你只是想使用 corr
:
df.corr()
输出:
bar foo too ten
bar 1.0 1.0 1.0 1.0
foo 1.0 1.0 1.0 1.0
too 1.0 1.0 1.0 1.0
ten 1.0 1.0 1.0 1.0
不那么模棱两可的例子:
np.random.seed(0)
df = pd.DataFrame(np.random.random(size=(4,4)),
columns=['bar', 'foo', 'too', 'ten'])
df.corr()
bar foo too ten
bar 1.000000 -0.701808 0.595832 -0.211943
foo -0.701808 1.000000 -0.911949 -0.547439
too 0.595832 -0.911949 1.000000 0.551369
ten -0.211943 -0.547439 0.551369 1.000000
IIUC,可以用np.polyfit
。您有一次多项式 (y = mx + b
),因此将次数设置为 1 并且您想要获得截距值 (b
)。
正如@mozway 建议的那样,使用 corr
但使用自定义方法:
# [1] is the intercept value, [0] is the slope
r_coef = lambda x, y: np.polyfit(x, y, deg=1)[1]
out = df.corr(method=r_coef)
print(out)
# Output
bar foo too ten
bar 1.000000 1.000000 2.0 3.666667
foo 1.000000 1.000000 1.0 3.333333
too 2.000000 1.000000 1.0 3.000000
ten 3.666667 3.333333 3.0 1.000000