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

变量间的关系分析

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

相关变量间的关系有两种:
一种是平行关系,即两个或者多个变量相互影响;对应的分析方法:相关分析。
另一种是依存关系,即一个变量的变化受另一个或多个变量的影响;对应的分析方法:回归分析。

线性相关分析

如何去衡量两个变量或者多个变量间的相关程度呢?
在这里插入图片描述
需要引入线性相关系数ρ来衡量两变量的相关关系和密切程度,给定二元总体(X,Y)。

总体相关系数ρ定义为两个变量X、Y之间的协方差和两者标准差乘积的比值,如下:
总体相关系数
在这里插入图片描述
其中在-1至+1之间波动,其绝对值越接近1,两个变量间的直线相关性越密切,越接近0,两变量越不相关。

由于在现实问题中,我们多数都是采取抽样的方式去调查,所以我们很多时候都是用样本的线性相关系数(Peason相信系数)公式:
在这里插入图片描述
根据公式,直接可以在python中是实现:

    def lxy(self,x,y): #求x与y的离均差乘积之和
        lxy=0
        for i in range(len(x)):
            lxy += (x[i] - np.mean(x)) *(y[i]-np.mean(y))
        return lxy
    def lxx(self,x):#求x的离均差平方和
        lxx=0
        for i in range(len(x)):#求和
            lxx+=(x[i]-np.mean(x))**2
        return lxx
    def lyy(self,y):#求y的离均差平方和
        lyy=0
        for i in range(len(y)):#求和
            lyy+=(y[i]-np.mean(y))**2
        return lyy
    def 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):#求统计量t
        t=self.cor(x,y)/np.sqrt((1-self.cor(x,y)*self.cor(x,y))/(len(x)-2))
        return t

全部代码如下:

import numpy as np
class oneCorrelation:
    def __init__(self,x,y):
        self.x=x
        self.y=y
        self.n=len(x)
    def lxy(self,x,y):
        lxy=0
        for i in range(len(x)):
            lxy += (x[i] - np.mean(x)) *(y[i]-np.mean(y))
        return lxy
    def lxx(self,x):
        lxx=0
        for i in range(len(x)):
            lxx+=(x[i]-np.mean(x))**2
        return lxx
    def lyy(self,y):
        lyy=0
        for i in range(len(y)):
            lyy+=(y[i]-np.mean(y))**2
        return lyy
    def cor(self,x,y):
        cor=self.lxy(x,y) / np.sqrt(self.lxx(x) * self.lyy(y))
        return cor
    def Ttest(self):
        t=self.cor(x,y)/np.sqrt((1-self.cor(x,y)*self.cor(x,y))/(len(x)-2))
        return t

x=(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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值