Python中的回归系数计算
我有一个数据框(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