在研究两组数据之间的关联性时会用到的一些概念。
1. 协方差(Covariance) 和协方差矩阵
协方差表示的是两个变量的总体的误差,这与只表示一个变量误差的方差不同。 如果两个变量的变化趋势一致,也就是说如果其中一个大于自身的期望值,另外一个也大于自身的期望值,那么两个变量之间的协方差就是正值。 如果两个变量的变化趋势相反,即其中一个大于自身的期望值,另外一个却小于自身的期望值,那么两个变量之间的协方差就是负值。
期望值分别为E[X]与E[Y]的两个实随机变量X与Y之间的协方差Cov(X,Y)定义为:
举例:
Apple | Orange |
---|---|
1 | 2 |
0 | 3 |
2 | 0 |
1 | 1 |
E
(
A
p
p
l
e
)
=
A
p
p
l
e
ˉ
=
(
1
+
0
+
2
+
1
)
/
4
=
1
E(Apple)=\bar{Apple}=(1+0+2+1)/4=1
E(Apple)=Appleˉ=(1+0+2+1)/4=1
E
(
O
r
a
n
g
e
)
=
O
r
a
n
g
e
ˉ
=
(
2
+
3
+
0
+
1
)
/
4
=
3
/
2
E(Orange)=\bar{Orange}=(2+3+0+1)/4=3/2
E(Orange)=Orangeˉ=(2+3+0+1)/4=3/2
Apple | Orange | Apple- A p p l e ˉ \bar{Apple} Appleˉ | Orange- O r a n g e ˉ \bar{Orange} Orangeˉ |
---|---|---|---|
1 | 2 | 0 | 0.5 |
0 | 3 | -1 | 1.5 |
2 | 0 | 1 | -1.5 |
1 | 1 | 0 | 0.5 |
C o v ( A p p l e , O r a n g e ) = [ 0 ∗ 0.5 + ( − 1 ) ∗ 1.5 + 1 ∗ ( − 1.5 ) + 0 ∗ 0.5 ] / ( 4 − 1 ) = 3 / 3 = 1 Cov(Apple, Orange)=[0*0.5+(-1)*1.5+1*(-1.5)+0*0.5]/(4-1)=3/3=1 Cov(Apple,Orange)=[0∗0.5+(−1)∗1.5+1∗(−1.5)+0∗0.5]/(4−1)=3/3=1 | |||
协方差只能研究两组数据之间的关系,当要研究多组数据之间的关系时就要用到协方差矩阵。 | |||
![]() | |||
Apple | Orange | Peach | |
-------- | ----- | ----- | |
1 | 2 | 4 | |
0 | 3 | 2 | |
2 | 0 | 2 | |
1 | 1 | 2 | |
使用协方差公式求得: | |||
C o v ( A p p l e , A p p l e ) = 2 / 3 Cov(Apple, Apple)=2/3 Cov(Apple,Apple)=2/3 | |||
C o v ( O r a n g e , O r a n g e ) = 5 / 3 Cov(Orange, Orange)=5/3 Cov(Orange,Orange)=5/3 | |||
C o v ( P e a c h , P e a c h ) = 1 Cov(Peach, Peach)=1 Cov(Peach,Peach)=1 | |||
C o v ( A p p l e , O r a n g e ) = − 1 Cov(Apple, Orange)=-1 Cov(Apple,Orange)=−1 | |||
C o v ( A p p l e , P e a c h ) = 0 Cov(Apple, Peach)=0 Cov(Apple,Peach)=0 | |||
C o v ( O r a n g e , P e a c h ) = 1 / 6 Cov(Orange,Peach)=1/6 Cov(Orange,Peach)=1/6 | |||
- | Apple | Orange | Peach |
---- | ---- | ----- | ----- |
Apple | 2/3 | -1 | 0 |
Orange | -1 | 5/3 | 1/6 |
Peach | 0 | 1/6 | 1 |
使用pandas可以非常方便的计算协方差矩阵,以上列子使用pandas来计算的代码如下:
a = pd.DataFrame([(1.0, 2.0, 4.0), (0, 3.0, 2.0), (2.0, 0, 2.0), (1.0, 1.0, 2.0)],
columns=['Apple', 'Orange', 'Peach'])
a.cov()
得到的输出如下
2. 相关系数
相关系数是最早由统计学家卡尔·皮尔逊设计的统计指标,是研究变量之间线性相关程度的量,一般用字母 r 表示。由于研究对象的不同,相关系数有多种定义方式,较为常用的是皮尔逊相关系数。
相关系数是用以反映变量之间相关关系密切程度的统计指标。相关系数是按积差方法计算,同样以两变量与各自平均值的离差为基础,通过两个离差相乘来反映两变量之间相关程度;着重研究线性的单相关系数。
皮尔逊相关系数的值在[-1,1]之间,大于零是正相关,小于零则表示负相关,其值越接近于1或-1则表示关系越紧密,越接近于零则表示其相关性越小。
相关系数计算公式:
V
a
r
[
X
]
Var[X]
Var[X]和
V
a
r
[
Y
]
Var[Y]
Var[Y]分布是
X
,
Y
X,Y
X,Y的方差。
由上图可以看到相关系数其实是在协方差的基础上进行计算的。
还是以之前的例子为例,我们来计算他们的相关系数。
我们先来求每个变量的方差
V
a
r
(
A
p
p
l
e
)
=
(
1
−
1
)
2
+
(
0
−
1
)
2
+
(
2
−
1
)
2
+
(
1
−
1
)
2
4
−
1
=
2
/
3
Var(Apple) = \frac{(1-1)^2+(0-1)^2+(2-1)^2+(1-1)^2}{4-1}=2/3
Var(Apple)=4−1(1−1)2+(0−1)2+(2−1)2+(1−1)2=2/3
V
a
r
(
O
r
a
n
g
e
)
=
(
2
−
1.5
)
2
+
(
3
−
1.5
)
2
+
(
0
−
1.5
)
2
+
(
1
−
1.5
)
2
4
−
1
=
5
/
3
Var(Orange) = \frac{(2-1.5)^2+(3-1.5)^2+(0-1.5)^2+(1-1.5)^2}{4-1}=5/3
Var(Orange)=4−1(2−1.5)2+(3−1.5)2+(0−1.5)2+(1−1.5)2=5/3
V
a
r
(
P
e
a
c
h
)
=
(
4
−
2.5
)
2
+
(
2
−
2.5
)
2
+
(
2
−
2.5
)
2
+
(
2
−
2.5
)
2
=
1
Var(Peach) = (4-2.5)^2+(2-2.5)^2+(2-2.5)^2+(2-2.5)^2=1
Var(Peach)=(4−2.5)2+(2−2.5)2+(2−2.5)2+(2−2.5)2=1
使用协方差公式求得:
C
o
r
r
(
A
p
p
l
e
,
A
p
p
l
e
)
=
C
o
v
(
A
p
p
l
e
,
A
p
p
l
e
)
V
a
r
(
A
p
p
l
e
)
∗
V
a
r
(
A
p
p
l
e
)
=
2
/
3
2
/
3
∗
2
/
3
=
1
Corr(Apple, Apple)=\frac{Cov(Apple, Apple)} {\sqrt{Var(Apple)*Var(Apple)}}=\frac{2/3}{\sqrt{2/3*2/3}}=1
Corr(Apple,Apple)=Var(Apple)∗Var(Apple)Cov(Apple,Apple)=2/3∗2/32/3=1
C
o
r
r
(
O
r
a
n
g
e
,
O
r
a
n
g
e
)
=
C
o
v
(
O
r
a
n
g
e
,
O
r
a
n
g
e
)
V
a
r
(
O
r
a
n
g
e
)
∗
V
a
r
(
O
r
a
n
g
e
)
=
5
/
3
5
/
3
∗
5
/
3
=
1
Corr(Orange, Orange)=\frac{Cov(Orange,Orange)}{\sqrt{Var(Orange)*Var(Orange)}}=\frac{5/3}{\sqrt{5/3*5/3}}=1
Corr(Orange,Orange)=Var(Orange)∗Var(Orange)Cov(Orange,Orange)=5/3∗5/35/3=1
C
o
r
r
(
P
e
a
c
h
,
P
e
a
c
h
)
=
C
o
v
(
P
e
a
c
h
,
P
e
a
c
h
)
V
a
r
(
P
e
a
c
h
)
∗
V
a
r
(
P
e
a
c
h
)
=
1
1
∗
1
=
1
Corr(Peach, Peach)=\frac{Cov(Peach,Peach)}{\sqrt{Var(Peach)*Var(Peach)}}=\frac{1}{\sqrt{1*1}}=1
Corr(Peach,Peach)=Var(Peach)∗Var(Peach)Cov(Peach,Peach)=1∗11=1
C
o
r
r
(
A
p
p
l
e
,
O
r
a
n
g
e
)
=
C
o
v
(
A
p
p
l
e
,
O
r
a
n
g
e
)
V
a
r
(
A
p
p
l
e
)
∗
V
a
r
(
O
r
a
n
g
e
)
=
−
1
2
/
3
∗
5
/
3
=
3
/
10
=
0.9487
Corr(Apple, Orange)=\frac{Cov(Apple,Orange)}{\sqrt{Var(Apple)*Var(Orange)}}=\frac{-1}{\sqrt{2/3*5/3}}=3/\sqrt{10}=0.9487
Corr(Apple,Orange)=Var(Apple)∗Var(Orange)Cov(Apple,Orange)=2/3∗5/3−1=3/10=0.9487
C
o
r
r
(
A
p
p
l
e
,
P
e
a
c
h
)
=
C
o
v
(
A
p
p
l
e
,
P
e
a
c
h
)
V
a
r
(
A
p
p
l
e
)
∗
V
a
r
(
P
e
a
c
h
)
=
0
Corr(Apple, Peach)=\frac{Cov(Apple,Peach)}{\sqrt{Var(Apple)*Var(Peach)}}=0
Corr(Apple,Peach)=Var(Apple)∗Var(Peach)Cov(Apple,Peach)=0
C
o
r
r
(
O
r
a
n
g
e
,
P
e
a
c
h
)
=
C
o
v
(
O
r
a
n
g
e
,
P
e
a
c
h
)
V
a
r
(
O
r
a
n
g
e
)
∗
V
a
r
(
P
e
a
c
h
)
=
1
/
6
5
/
3
∗
1
=
0.2582
Corr(Orange,Peach)=\frac{Cov(Orange,Peach)}{\sqrt{Var(Orange)*Var(Peach)}}=\frac{1/6}{\sqrt{5/3*1}}=0.2582
Corr(Orange,Peach)=Var(Orange)∗Var(Peach)Cov(Orange,Peach)=5/3∗11/6=0.2582
由此我们可以得到相关系数表如下:
- | Apple | Orange | Peach |
---|---|---|---|
Apple | 1 | -0.9487 | 0 |
Orange | -0.9487 | 1 | 0.2582 |
Peach | 0 | 0.2582 | 1 |
你会发现所有元素和自己的相关系数都是1,即关系最为紧密。
使用pandas可以非常方便的计算协方差矩阵,以上列子使用pandas来计算的代码如下:
a = pd.DataFrame([(1.0, 2.0, 4.0), (0, 3.0, 2.0), (2.0, 0, 2.0), (1.0, 1.0, 2.0)],
columns=['Apple', 'Orange', 'Peach'])
a.corr()