Python中的回归系数计算

2 投票
1 回答
1384 浏览
提问于 2025-04-17 17:16

我有一个数据框(Dataframe)和一个活动的输入文本文件。这个数据框是通过pandas生成的。我想用以下公式找出每个项的回归系数:

Y=C1aX1a+C1bX1b+...+C2aX2a+C2bX2b+....C0,

其中Y是活动值,Cna是第n个位置上选择a的回归系数,X是虚拟变量编码(xna= 1或0),表示第n个位置上选择a的存在与否,C0是活动值的平均值。

我的数据框看起来像这样:

2u    2s    4r     4n     4m   7h   7v
0     1     1      0      0     0    1
0     1     0      1      0     0    1
1     0     0      1      0     1    0
1     0     0      0      1     1    0
1     0     1      0      0     1    0

这里的1和0分别表示残基的存在和缺失。

我想用多元线性回归(MLR)来找出每个残基的回归系数,比如2u、2s、4r、4n、4m、7h、7v。

C1a表示第一个位置上残基a的回归系数(这里1a是2u,1b是2s,2a是4r...),X1a表示对应于1a的虚拟值,即0或1。

活动文件包含以下数据:

6.5
5.9
5.7
6.4
5.2

所以第一个方程看起来像这样:

6.5=C1a*0+C1b*1+C2a*1+C2b*0+C2c*0+C3a*0+C3b*1+C0

我能用numpy得到回归系数吗?请帮帮我,任何建议都非常感谢。

1 个回答

0

假设A是你的数据表(你可以把它当作一个简单的numpy数组。如果是CSV文件,可以用np.loadtxt来读取),而y是你的活动文件(同样也是一个numpy数组),然后使用np.linalg.lstsq来处理。

DF = """0     1     1      0      0     0    1
0     1     0      1      0     0    1
1     0     0      1      0     1    0
1     0     0      0      1     1    0
1     0     1      0      0     1    0"""

res = """6.5,  5.9,  5.7,  6.4,  5.2"""

A = np.fromstring ( DF, sep=" " ).reshape((5,7))
y = np.fromstring(res, sep=" ")

(x, res, rango, svals ) = np.linalg.lstsq(A, y )

print x
# 2.115625,  2.490625,  1.24375 ,  1.19375 ,  2.16875 ,  2.115625, 2.490625
print np.sum(A.dot(x)**2) # Sum of squared residuals:
# 177.24750000000003
print A.dot(x) # Print predicition
# 6.225,  6.175,  5.425,  6.4  ,  5.475

撰写回答