标签:
在概率论和统计学中,相关(Correlation,或称相关系数或关联系数),显示两个随机变量之间线性关系的强度和方向。在统计学中,相关的意义是用来衡量两个变量相对于其相互独立的距离。两个变量之间的皮尔逊相关系数定义为两个变量之间的协方差和标准差的商:
以上方程定义了总体相关系数, 一般表示成希腊字母ρ(rho)。基于样本对协方差和标准差进行估计,可以得到样本相关系数, 一般表示成r:
一种等价表达式的是表示成标准分的均值。基于(Xi, Yi)的样本点,样本皮尔逊系数是
其中
数学特性:
总体和样本皮尔逊系数的绝对值小于或等于1。如果样本数据点精确的落在直线上(计算样本皮尔逊系数的情况),或者双变量分布完全在直线上(计算总体皮尔逊系数的情况),则相关系数等于1或-1。皮尔逊系数是对称的:corr(X,Y) = corr(Y,X)。
皮尔逊相关系数有一个重要的数学特性是,因两个变量的位置和尺度的变化并不会引起该系数的改变,即它该变化的不变量 (由符号确定)。也就是说,我们如果把X移动到a + bX和把Y移动到c + dY,其中a、b、c和d是常数,并不会改变两个变量的相关系数(该结论在总体和样本皮尔逊相关系数中都成立)。我们发现更一般的线性变换则会改变相关系数:参见之后章节对该特性应用的介绍。
由于μX = E(X), σX2 = E[(X ? E(X))2] = E(X2) ? E2(X),Y也类似, 并且
故相关系数也可以表示成
对于样本皮尔逊相关系数:
以上方程给出了计算样本皮尔逊相关系数简单的单流程算法,但是其依赖于涉及到的数据,有时它可能是数值不稳定的。
对于没有中心化的数据, 相关系数与两条可能的回归线y=gx(x) 和 x=gy(y) 夹角的余弦值一致。
对于中心化过的数据 (也就是说, 数据移动一个样本平均值以使其均值为0), 相关系数也可以被视作由两个随机变量 向量 夹角 的 余弦值(见下方)。
一些人[谁?] 倾向于是用非中心化的相关系数 (non-Pearson-compliant) 。 比较如下。
例如,有5个国家的国民生产总值分别为 10, 20, 30, 50 和 80 亿美元。 假设这5个国家 (顺序相同) 的贫困百分比分别为 11%, 12%, 13%, 15%, and 18% 。 令 x 和 y 分别为包含上述5个数据的向量: x = (1, 2, 3, 5, 8) 和 y = (0.11, 0.12, 0.13, 0.15, 0.18)。
利用通常的方法计算两个向量之间的夹角 (参见 数量积), 未中心化 的相关系数是:
我们发现以上的数据特意选定为完全相关: y = 0.10 + 0.01 x。 于是,皮尔逊相关系数应该等于1。将数据中心化 (通过E(x) = 3.8移动 x 和通过 E(y) = 0.138 移动 y ) 得到 x = (?2.8, ?1.8, ?0.8, 1.2, 4.2) 和 y = (?0.028, ?0.018, ?0.008, 0.012, 0.042), 从中,
皮尔逊距离度量的是两个变量X和Y,它可以根据皮尔逊系数定义成
我们可以发现,皮尔逊系数落在 [-1, 1], 而皮尔逊距离落在 [0, 2]。
from
math
import
sqrt
def
multipl(a,b):
sumofab
=
0.0
for
i
in
range
(
len
(a)):
temp
=
a[i]
*
b[i]
sumofab
+
=
temp
return
sumofab
def
corrcoef(x,y):
n
=
len
(x)
#求和
sum1
=
sum
(x)
sum2
=
sum
(y)
#求乘积之和
sumofxy
=
multipl(x,y)
#求平方和
sumofx2
=
sum
([
pow
(i,
2
)
for
i
in
x])
sumofy2
=
sum
([
pow
(j,
2
)
for
j
in
y])
num
=
sumofxy
-
(
float
(sum1)
*
float
(sum2)
/
n)
#计算皮尔逊相关系数
den
=
sqrt((sumofx2
-
float
(sum1
*
*
2
)
/
n)
*
(sumofy2
-
float
(sum2
*
*
2
)
/
n))
return
num
/
den
x
=
[
0
,
1
,
0
,
3
]
y
=
[
0
,
1
,
1
,
1
]
print
corrcoef(x,y)
#0.471404520791
标签:
原文地址:http://blog.csdn.net/u013749540/article/details/51814048