皮尔森(pearson)相关系数代码实现

Synopsis

在统计学中,皮尔逊相关系数( Pearson correlation coefficient),又称皮尔逊积矩相关系数(Pearson product-moment correlation coefficient,简称 PPMCC或PCCs),是用于度量两个变量X和Y之间的相关**(线性相关),其值介于-1与1之间**。

Definition

两个变量之间的皮尔逊相关系数定义为两个变量之间的协方差和标准差的商
在这里插入图片描述
上式定义了总体相关系数,常用希腊小写字母ρ作为代表符号。估算样本的协方差和标准差,可得到皮尔逊相关系数,常用英文小写字母 r代表:
在这里插入图片描述

Code

由于方差 = 方的期望-期望的方,更一般得形式是Cov(X,Y) = E(XY) -E(X)E(Y)在这里插入图片描述
利用该公式可得:
在这里插入图片描述
这也可以用numpy.corrcoef()源码即:
在这里插入图片描述
C表示协方差矩阵

代码中的Key Point是要搞清楚变量是行表示,还是列表示

1.numpy.corrcpef()实现

在这里插入图片描述

结果矩阵中值(rowvar=True)的意义:

返回矩阵的行数=返回矩阵的列数=输入矩阵1的行数+输入矩阵2的行数(行变量表示)
在这里插入图片描述

import numpy as np

Mat1 = np.array([[1, 2, 3], [4, 5, 6]])
Mat2 = np.array([[11, 25, 346], [734, 48, 49]])

correlation = np.corrcoef(Mat1, Mat2)

print("矩阵1=\n", Mat1)
print("矩阵2=\n", Mat2)
print("相关系数矩阵=\n", correlation)

2.调用scipy库函数

from scipy.stats import pearsonr

v1 = [2,7,18,88,157, 90,177,570]
v2 = [3,5,15,90,180, 88,160,580]

pccs = pearsonr(v1, v2)
print(pccs)

3.手动实现

import math

import numpy as np


def pearson(v1, v2):
    n = len(v1)
    #simple sums
    sum1 = sum(float(v1[i]) for i in range(n))
    sum2 = sum(float(v2[i]) for i in range(n))
    #sum up the squares
    sum1_pow = sum([pow(v, 2.0) for v in v1])
    sum2_pow = sum([pow(v, 2.0) for v in v2])
    #sum up the products
    p_sum = sum([v1[i] * v2[i] for i in range(n)])
    #分子num,分母denominator
    num = p_sum - (sum1*sum2/n)
    den = math.sqrt((sum1_pow-pow(sum1, 2)/n)*(sum2_pow-pow(sum2, 2)/n))
    if den == 0:
        return 0.0
    return num/den

vector1 = [2,7,18,88,157, 90,177,570]
vector2 = [3,5,15,90,180, 88,160,580]

print(pearson(vector2,vector1))

Reference

  • 23
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值