时间序列

【数据分析】两种相关

两种相关

最近遇到需要用统计学知识衡量两个变量的相关程度,于是用了scipy中的工具中Pearson相关与Spearman相关系数。

  • Pearson相关主要来衡量线性分布之间的相似性。当两个成正比例且增长速度一直时,Pearson接近于1。
  • Spearman相关主要来度量单调关系。同是单调增长时,Spearman接近1,哪怕增长速率差别很大。

    它俩的关系,下面这篇文章说的非常好:Pearson 相关方法和Spearman相关方法的比较

    Pearson和Spearman在衡量两个量没有关系上都很给力。如果绝对值接近于0,那么差不多就是没关系了。其中,Pearson在0.8-1.0,为极强相关,0.6-0.8为强相关,0.4-0.6为中等程度相关,0.2-0.4为弱相关,0-0.2为极弱相关或无关。

附上一个小Demo:

import numpy as np
from scipy.stats import pearsonr
from scipy.stats import spearmanr
from scipy.stats import ttest_ind

x = np.random.normal(0,1,500) # 从-1到1生成随机数
y1 = np.random.normal(0,1,500) # 均值为0,方差为1的一组数
y2 = np.random.normal(0,100,500) # 均值为0,方差为10的一组数

print("----------------pearson----------------")
r1, p1 = pearsonr(x,y1)
print("r1 = ",r1)
print("p1 = ",p1)

#y2相比于y1,方差更大,混乱程度更高,与相x1的相关性越差
r2, p2 = pearsonr(x,y2)
print("r2 = ",r2) #[-1,1],绝对值约大越相关,正为正相关,负为负相关,为0时不相关
print("p2 = ",p2) #恒为非负,越大越相关,500个样本以上有较高可靠性
print("----------------spearman---------------")

c1, pv1 = spearmanr(x,y1)
print("c1 = ",c1)
print("pv1 = ",pv1)

#y2相比于y1,方差更大,混乱程度更高,与相x1的相关性越差
c2, pv2 = spearmanr(x,y2)
print("c2 = ",c2) #[-1,1],绝对值约大越相关,正为正相关,负为负相关,为0时不相关
print("pv2 = ",pv2) #恒为非负,越大越相关,500个样本以上有较高可靠性

#显著性检验
stat_val, p_val = ttest_ind(x, y1, equal_var=False)
print("----------------P-----------------------")
print("stat_val = ",stat_val) #相关性
print("p_val = ",p_val) #是否显著 <0.05为显著性

输出结果为:

----------------pearson----------------
r1 =  0.0001927775402233908
p1 =  0.9965692283410943
r2 =  -0.04099559625239573
p2 =  0.3603073242705398
----------------spearman---------------
c1 =  0.011400429601718408
pv1 =  0.7992703026447947
c2 =  -0.03298323593294373
pv2 =  0.4618025913714844
Be the First to comment.

Leave a Comment

您的电子邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据