多元回归分析的心得(笔记)
通过一篇博客内的文章
对我最近帮老师做多元回归分析求解相关系数有很大帮助(从零开始涉猎)
文章内对我帮助最大的就是通过公式死算出来相关系数(这方面基本没有涉猎…所以当老师要求做时很蒙圈)
在网上查找的很多有关求解多元回归分析相关系数的文章,但大部分都是通过sklearn来进行回归分析的研究,将数据拆分成训练数据以及测试数据,机器通过训练数据获得一个模型,再通过测试数据对模型做到检测从而得到相关的一些数据(通过几天的摸索得出的模糊结论)
我通过sklearn中的model.score方法的到决定系数r^ 2,再通过对r ^2进行开根号得到相关系数,但得出结果和通过excel直接得出相关系数结果偏差过大。
最终找到了开头说的文章
公式原理并不太清楚,只是经典的套娃,通过文章内容自己推导了一下(博客文章内容是1个因变量,2个自变量,但我还需要1个因变量,3个自变量的做法)
总结一下心得:
下边是原始数据(第一列Pi+1为因变量,后头Pi,Pw为自变量):
以下代码与上边博客文章中的代码基本一致,仅通过自己推理做出了一些改变
X1=gongshi1["Pi上旬平均含水量"].values
X11=np.array([X1]).T
X2=gongshi1["Pw本旬降雨量"].values
X22=np.array([X2]).T
#若需要3列自变量的作法如下
#X3=gongshi[new_column_name].values
#X33=np.array([X3]).T
Y=gongshi1["Pi+1本旬平均含水量"].values
Y1=np.array([Y]).T
#上边是将三列转化为数组并获得其转置
A = []
for i in range(len(Y)):
A.append([1])
#创造与数据长度一致的系数矩阵
B=np.hstack((A,X11))
X=np.hstack((B,X22))#3列自变量的做法:X=np.hstack((B,X22,X33))
X_=X.T
X_X=np.dot(X_,X)
X_X_=np.linalg.inv(X_X)
W=np.dot(np.dot((X_X_),(X_)),Y1)
b=W[0][0]
a1=W[1][0]
a2=W[2][0]
#3列子自变量做法:
#a3=W[3][0]
sumy=0
y1=0
for i in range(0,len(Y)):
sumy=sumy+Y[i]
y1=sumy/len(Y)
y_y1=0
for i in range(0,len(Y)):
y_y1=y_y1+(Y[i]-y1)
sales1=[]
for i in range(0,len(Y)):
sales1.append(a1*X1[i]+a2*X2[i]+b)#3列自变量做法如下:sales1.append(a1*X1[i]+a2*X2[i]+a3*X3[i]+b)
y2=0
sumy2=0
for i in range(len(sales1)):
sumy2=sumy2+sales1[i]
y2=sumy2/len(sales1)
y11_y2=0
for i in range(0,len(sales1)):
y11_y2=y11_y2+(sales1[i]-y2)
Syy=0
for i in range(0,len(Y)):
Syy=Syy+((Y[i]-y1)*(Y[i]-y1))
Sy1y1=0
for i in range(0,len(sales1)):
Sy1y1=Sy1y1+((sales1[i]-y2)*(sales1[i]-y2))
Syy1=0
for i in range(0,len(sales1)):
Syy1=Syy1+((Y[i]-y1)*(sales1[i]-y2))
r1=Syy1/((Syy*Sy1y1)**0.5)#此结果即为相关系数