Python 如何在动态数据框架上执行OLS回归并估计斜率系数?
我有一个如下所示的数据框,它的结构不是固定的,它可以在不同的时刻有不同的列数Python 如何在动态数据框架上执行OLS回归并估计斜率系数?,python,numpy,pandas,regression,Python,Numpy,Pandas,Regression,我有一个如下所示的数据框,它的结构不是固定的,它可以在不同的时刻有不同的列数 A_Name B_Info Value_Yn Value_Yn-1 Value_Yn-2 ...... Value_Y1 0 AA X1 0.9 0.8 0.7 ...... 0.1 1 BB Y1 0.1 0.2 0.3 ...... 0
A_Name B_Info Value_Yn Value_Yn-1 Value_Yn-2 ...... Value_Y1
0 AA X1 0.9 0.8 0.7 ...... 0.1
1 BB Y1 0.1 0.2 0.3 ...... 0.9
2 CC Z1 -0.9 -0.8 -0.7 ...... -0.1
3 DD L1 -0.1 -0.2 -0.3 ...... -0.9
我想对X和Y值如下的每一行执行线性回归
X = [n, n-1, n-2, .....2, 1]
Y = [Value_Yn, Value_Yn-1, Value_Yn-2.......Value_Y2, Value_Y1]
这里的“n”是将以“Value_389;”作为前缀的列数
假设n=9
我会有价值的
对于第0行
X = [9, 8, 7, 6, 5, 4, 3, 2, 1]
Y = [0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1]
第1行
X = [9, 8, 7, 6, 5, 4, 3, 2, 1]
Y = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]
类似地,对于其他行
我希望以这种格式输出
A_Name B_Info Intercept Slope_Coefficent
0 AA X1 0 0.1
1 BB Y1 1 -0.1
2 CC Z1 0 -0.1
3 DD L1 -1 0.1
数据集很大,通过循环来完成不是正确的方法…这个问题可以用numpy和线性代数来解决。其基本思想是,因为您一次又一次地重用相同的x值,所以我们可以重用中间计算 推导。 线性回归通常是这样解决的:
import numpy as np
import numpy.linalg as la
n = 3
k= 10
#replace this with your data matrix whose columns are the Y's
yvals = np.arange(k*n).reshape(k,n)
xvals = np.arange(1,n+1)
print "X values:", xvals
print "Y Values:"
print yvals
A = np.zeros((n,2))
A[:,0] = xvals
A[:,1] = 1
Q = A.T.dot(A)
#slopes are the first column, intercepts are the second
res = la.inv(Q).dot(A.T.dot(yvals.T)).T
print res
输出:
X values: [1 2 3]
Y Values:
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]
[12 13 14]
[15 16 17]
[18 19 20]
[21 22 23]
[24 25 26]
[27 28 29]]
Result:
[[ 1. -1.]
[ 1. 2.]
[ 1. 5.]
[ 1. 8.]
[ 1. 11.]
[ 1. 14.]
[ 1. 17.]
[ 1. 20.]
[ 1. 23.]
[ 1. 26.]]
由于矩阵乘法的矢量化和渐进加速,这应该是相当快的。不太确定你在问什么。。。也许您想使用
多处理
并行处理多行?这只是一个转换,请查看输出…我不知道这里的多处理是什么意思…但我想要每行的回归…谢谢。这是他们在应用数学专业教你的。我也可以通过对度量做一些运算来调整R平方…可能吧。你可能还应该问一个后续问题,因为这个问题已经解决了。把链接给我,我会尽力回答的。