200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > (基础准备)多元相关与回归分析——一元线性相关与回归分析(一) python+numpy库 实现

(基础准备)多元相关与回归分析——一元线性相关与回归分析(一) python+numpy库 实现

时间:2019-02-28 14:08:19

相关推荐

(基础准备)多元相关与回归分析——一元线性相关与回归分析(一) python+numpy库 实现

变量间的关系分析

变量间的关系有两类,一类是变量间存在完全确定的关系,即函数关系(y=2x+1),另一类是变量间不存在完全的确定关系,不能用准确的数学公式来表示出来,这些变量间存在具有十分密切的关系,但是不能由一个或者几个变量的值精准的计算出来另一个变量的值,我们称这些变量间的关系为相关关系。

相关变量间的关系有两种:

一种是平行关系,即两个或者多个变量相互影响;对应的分析方法:相关分析。

另一种是依存关系,即一个变量的变化受另一个或多个变量的影响;对应的分析方法:回归分析。

线性相关分析

如何去衡量两个变量或者多个变量间的相关程度呢?

需要引入线性相关系数ρ来衡量两变量的相关关系和密切程度,给定二元总体(X,Y)。

总体相关系数ρ定义为两个变量X、Y之间的协方差和两者标准差乘积的比值,如下:

其中在-1至+1之间波动,其绝对值越接近1,两个变量间的直线相关性越密切,越接近0,两变量越不相关。

由于在现实问题中,我们多数都是采取抽样的方式去调查,所以我们很多时候都是用样本的线性相关系数(Peason相信系数)公式:

根据公式,直接可以在python中是实现:

def lxy(self,x,y): #求x与y的离均差乘积之和lxy=0for i in range(len(x)):lxy += (x[i] - np.mean(x)) *(y[i]-np.mean(y))return lxydef lxx(self,x):#求x的离均差平方和lxx=0for i in range(len(x)):#求和lxx+=(x[i]-np.mean(x))**2return lxxdef lyy(self,y):#求y的离均差平方和lyy=0for i in range(len(y)):#求和lyy+=(y[i]-np.mean(y))**2return lyydef cor(self,x,y):#计算相关系数cor=self.lxy(x,y) / np.sqrt(self.lxx(x) * self.lyy(y))return cor

相关系数的假设检验

为了进一步确认相关系数拟合的是否合理,需要利用t检验来进行判断。

计算相关系数r的t值:

r=相关系数

n=样本容量

这里的判断需要查t界值表。

代码如下:

def Ttest(self):#求统计量tt=self.cor(x,y)/np.sqrt((1-self.cor(x,y)*self.cor(x,y))/(len(x)-2))return t

全部代码如下:

import numpy as npclass oneCorrelation:def __init__(self,x,y):self.x=xself.y=yself.n=len(x)def lxy(self,x,y):lxy=0for i in range(len(x)):lxy += (x[i] - np.mean(x)) *(y[i]-np.mean(y))return lxydef lxx(self,x):lxx=0for i in range(len(x)):lxx+=(x[i]-np.mean(x))**2return lxxdef lyy(self,y):lyy=0for i in range(len(y)):lyy+=(y[i]-np.mean(y))**2return lyydef cor(self,x,y):cor=self.lxy(x,y) / np.sqrt(self.lxx(x) * self.lyy(y))return cordef Ttest(self):t=self.cor(x,y)/np.sqrt((1-self.cor(x,y)*self.cor(x,y))/(len(x)-2))return tx=(171,175,159,155,152,158,154,164,168,166,159,164)y=(57,64,41,38,35,44,41,51,57,49,47,46)C=oneCorrelation(x,y)print("lxx:%f"%C.lxx(x))print("lyy:%f"%C.lyy(y))print("lyy:%f"%C.lxy(x,y))print("相关系数:%f"%C.cor(x,y))print('t统计量:%f'%C.Ttest())

输出结果:

lxx:556.916667

lyy:813.000000

lyy:645.500000

相关系数:0.959303

t统计量:10.742976

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。