三大相关系数:pearson, spearman, kendall
发布时间:2025-05-24 17:43:41
作者:益华网络
来源:undefined
浏览量(0)
点赞(0)
摘要:统计学中的三大相关性系数:pearson, spearman, kendall,他们反应的都是两个变量之间变化趋势的方向以及程度,其值范围为-1到+1。 0表示两个变量不相关,正值表示正相关,负值表示负相关,值越大表示相关性越强。
统计学中的三大相关性系数:pearson, spearman, kendall,他们反应的都是两个变量之间变化趋势的方向以及程度,其值范围为-1到+1。 0表示两个变量不相关,正值表示正相关,负值表示负相关,值越大表示相关性越强。
1. person correlation coefficient(皮尔森相关性系数) 皮尔逊相关系数通常用r或ρ表示,度量两变量X和Y之间相互关系(线性相关)(1)公式 皮尔森相关性系数的值等于它们之间的协方差cov(X,Y)除以它们各自标准差的乘积(σX, σY)。(2)数据要求 a.正态分布 它是协方差与标准差的比值,并且在求皮尔森相关性系数以后,通常还会用t检验之类的方法来进行皮尔森相关性系数检验,而t检验是基于数据呈正态分布的假设的。 b.实验数据之间的差距不能太大 比如:研究人跑步的速度与心脏跳动的相关性,如果人突发心脏病,心跳为0(或者过快与过慢),那这时候我们会测到一个偏离正常值的心跳,如果我们把这个值也放进去进行相关性分析,它的存在会大大干扰计算的结果的。(3)实例代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import pandas
as
pd
import numpy
as
np
#原始数据
X1=pd.Series([1, 2, 3, 4, 5, 6])
Y1=pd.Series([0.3, 0.9, 2.7, 2, 3.5, 5])
X1.mean() #平均值# 3.5
Y1.mean() #2.4
X1.
var
() #方差#3.5
Y1.
var
() #2.9760000000000004
X1.std() #标准差不能为0# 1.8708286933869707
Y1.std() #标准差不能为0#1.725108692227826
X1.cov(Y1) #协方差#3.0600000000000005
X1.corr(Y1,method=
"pearson"
) #皮尔森相关性系数 #0.948136664010285
X1.cov(Y1)/(X1.std()*Y1.std()) #皮尔森相关性系数 # 0.948136664010285
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import pandas
as
pd
import numpy
as
np
#原始数据
X1=pd.Series([1, 2, 3, 4, 5, 6])
Y1=pd.Series([0.3, 0.9, 2.7, 2, 3.5, 5])
#处理数据删除Nan
x1=X1.dropna()
y1=Y1.dropna()
n=x1.count()
x1.index=np.arange(n)
y1.index=np.arange(n)
#分部计算
d=(x1.sort_values().index-y1.sort_values().index)**2
dd=d.to_series().sum()
p=1-n*dd/(n*(n**2-1))
#s.corr()函数计算
r=x1.corr(y1,method=
spearman
)
print(r,p) #0.942857142857143 0.9428571428571428
3. kendall correlation coefficient(肯德尔相关性系数)
肯德尔相关性系数,又称肯德尔秩相关系数,它也是一种秩相关系数,不过它所计算的对象是分类变量。 分类变量可以理解成有类别的变量,可以分为: (1) 无序的,比如性别(男、女)、血型(A、B、O、AB); (2) 有序的,比如肥胖等级(重度肥胖,中度肥胖、轻度肥胖、不肥胖)。 通常需要求相关性系数的都是有序分类变量。 (1)公式 R=(P-(n*(n-1)/2-P))/(n*(n-1)/2)=(4P/(n*(n-1)))-1 注:设有n个统计对象,每个对象有两个属性。将所有统计对象按属性1取值排列,不失一般性,设此时属性2取值的排列是乱序的。设P为两个属性值排列大小关系一致的统计对象对数 (2)数据要求 类别数据或者可以分类的数据 (3)实例代码1
2
3
4
5
6
7
import pandas
as
pd
import numpy
as
np
#原始数据
x= pd.Series([3,1,2,2,1,3])
y= pd.Series([1,2,3,2,1,1])
r = x.corr(y,method=
"kendall"
) #-0.2611165
http://shenzhen.offcn.com/
扫一扫,关注我们
声明:本文由【益华网络】编辑上传发布,转载此文章须经作者同意,并请附上出处【益华网络】及本页链接。如内容、图片有任何版权问题,请联系我们进行处理。
0