文章目录
在数学建模中我们常常需要判断 两个变量或者多个变量之间的相关性的大小,这时候我们就需要 相关系数来衡量 其相关性的大小,而我今天介绍的是两种我们数学建模中最常用的相关系数—— 皮尔逊(Person)相关系数和斯皮尔曼(Spearman)相关系数。
皮尔逊(Person)相关系数
皮尔逊相关系数
定义:如果有两组数据
X
:
{
X
1
,
X
2
,
.
.
.
,
X
n
}
X:\left \{ X_{1},X_{2},...,X_{n} \right \}
X:{X1,X2,...,Xn}和
Y
:
{
Y
1
,
Y
2
,
.
.
.
,
Y
n
}
Y:\left \{ Y_{1},Y_{2},...,Y_{n} \right \}
Y:{Y1,Y2,...,Yn}(一般调查得到的数据叫样本数据)
样本均值
:
X
ˉ
=
∑
i
=
1
n
X
i
n
样本均值:\bar{X}=\frac{\sum_{i=1}^{n}X_{i}}{n}
样本均值:Xˉ=n∑i=1nXi
样本协方差:
C
o
v
(
X
,
Y
)
=
∑
i
=
1
n
(
X
i
−
X
ˉ
)
(
Y
i
−
Y
ˉ
)
n
−
1
样本协方差:Cov(X,Y)=\frac{\sum_{i=1}^{n}(X_{i}-\bar{X})(Y_{i}-\bar{Y})}{n-1}
样本协方差:Cov(X,Y)=n−1∑i=1n(Xi−Xˉ)(Yi−Yˉ)
样本
P
e
r
s
o
n
相关系数:
r
X
Y
=
C
o
v
(
X
,
Y
)
S
X
S
Y
样本Person相关系数:r_{XY}=\frac{Cov(X,Y)}{S_{X}S_{Y}}
样本Person相关系数:rXY=SXSYCov(X,Y)
S
X
S_{X}
SX是
X
X
X的样本标准差,
S
X
=
∑
i
=
1
n
(
X
i
−
X
ˉ
)
2
n
−
1
S_{X}=\sqrt{\frac{\sum_{i=1}^{n}\left ( X_{i}-\bar{X} \right )^{2}}{n-1}}
SX=n−1∑i=1n(Xi−Xˉ)2,同理,
S
Y
=
∑
i
=
1
n
(
Y
i
−
Y
ˉ
)
2
n
−
1
S_{Y}=\sqrt{\frac{\sum_{i=1}^{n}\left ( Y_{i}-\bar{Y} \right )^{2}}{n-1}}
SY=n−1∑i=1n(Yi−Yˉ)2。
皮尔逊相关系数可以看成去除两个变量的量纲影响,即将X和Y标准化后的协方差。
皮尔逊相关系数的计算
在数学建模中我们常用到编程计算工具就是MATLAB了。虽然MATLAB功能强大,但是代码却非常复杂,尤其是在标注注释非常少情况下更是堪比天书。所以,如果你编程的基础非常好,那我建议你用MATLAB计算相关数据;如果你编程基础不太好,那我建议用相关的统计软件来计算,例如我们计算相关系数用到的SPSS软件。
MATLAB计算皮尔逊相关系数
corrcoef函数:correlation coefficient 相关系数
R=corrcoef(A)
返回A的相关系数矩阵,其中A的列表示各项指标,行表示样本数据。
R=corrcoef(A,B)
返回两个随机变量A和B(两个向量)之间的相关系数。
clear;clc;
X=randi(10,1,6);
Y=randi(10,1,6); %生成两个1-10,1*6的随机向量
R=corrcoef(X,Y); %计算相关系数
对皮尔逊相关系数进行假设检验
通过对皮尔逊相关系数进行假设检验可以判断其显著性的大小,而一般常用到的是p值判断法。没有学过假设检验的小伙伴,可以去学习一下概率论与数理统计,这里我就不过多解释了,直接看如何用MATLAB检验显著性大小。
[R,P]=corrcoef(X,Y)
R返回相关系数,P返回对应其相关系数的p值
clear;clc;
X=randi(10,1,6);
Y=randi(10,1,6);
[R,P]=corrcoef(X,Y); %R是相关系数,P是p值
若p<0.01,说明在99%的置信水平上两变量具有显著的相关性
若p<0.05,说明在95%的置信水平上两变量具有显著的相关性
若p<0.10,说明在90%的置信水平上两变量具有显著的相关性
(置信水平/可靠度:置信水平表示区间估计的把握程度)
斯皮尔曼(Spearman)相关系数
斯皮尔曼相关系数
定义:
X
X
X和
Y
Y
Y为两组数据,其斯皮尔曼(等级)相关系数:
r
s
=
1
−
6
∑
i
=
1
n
d
i
2
n
∗
(
n
2
−
1
)
r_{s}=1-\frac{6\sum_{i=1}^{n}d_{i}^{2}}{n\ast(n^{2}-1)}
rs=1−n∗(n2−1)6∑i=1ndi2
−
1
≤
r
s
≤
1
-1\leq r_{s}\leq 1
−1≤rs≤1
其中,
d
i
d_{i}
di是
X
i
X_{i}
Xi和
Y
i
Y_{i}
Yi之间的等级差。
(一个数的等级,是将它所在的一列数据按照从小到大排列后,这个数所在的位置)
X | Y | X的等级 | Y的等级 | 等级差 | 等级差的平方 |
---|---|---|---|---|---|
1 | 10 | 1 | 5.5 | 4.5 | 20.25 |
3 | 10 | 3 | 5.5 | 2.5 | 6.25 |
6 | 5 | 4 | 2.5 | 1.5 | 2.25 |
10 | 9 | 5.5 | 4 | 1.5 | 2.25 |
10 | 2 | 5.5 | 1 | 4.5 | 20.25 |
2 | 5 | 2 | 2.5 | 0.5 | 0.25 |
注意:如果有的数值相同,则他们所在的位置取算数平均值。 |
根据公式 r s = 1 − 6 ∑ i = 1 n d i 2 n ∗ ( n 2 − 1 ) r_{s}=1-\frac{6\sum_{i=1}^{n}d_{i}^{2}}{n\ast(n^{2}-1)} rs=1−n∗(n2−1)6∑i=1ndi2可得:
X
X
X和
Y
Y
Y的斯皮尔曼相关系数为:
r
s
=
1
−
6
×
(
20.25
+
6.25
+
2.25
+
2.25
+
20.25
+
0.25
)
6
×
35
r_{s}=1-\frac{6\times (20.25+6.25+2.25+2.25+20.25+0.25)}{6\times 35}
rs=1−6×356×(20.25+6.25+2.25+2.25+20.25+0.25)
另一种斯皮尔曼相关系数的定义
斯皮尔曼相关系数还被定义为等级之间的皮尔逊相关系数。
如何计算斯皮尔曼相关系数
MATLAB计算斯皮尔曼相关系数
- corr(X,Y,‘type’,‘Spearman’)
计算X向量和Y向量之间的斯皮尔曼相关系数,( X,Y一定是列向量 )。 - corr(X,‘type’,‘Spearman’)
计算X矩阵各列之间的斯皮尔曼相关系数。
X=[1,3,6,10,10,2]'; %一定是列向量,一撇'表示矩阵转置
y=[10,10,5,9,2,5]';
coff=corr(X,Y,'type','Spearman');
coff =
-0.5374 %MATLAB会与理论计算有微小的误差
%原因在于MATLAB没有考虑数值相同时,等级取算数平均值
SPSS计算斯皮尔曼相关系数
- 导入或者输入相关数据,如下是如何导入Excel表中数据
- 找到分析>> 相关>>双变量(也可以计算皮尔逊相关系数)
对斯皮尔曼相关系数进行假设检验
%直接给出相关系数和p值
[R,P]=corr(X,'type','Spearman');
%注意这里X、Y也必须是列向量
两种相关系数的使用条件
如何选择使用哪种相关系数:
- 连续数据,正态分布,线性关系 ,用person相关系数最为合适,虽然也能使用spearman相关系数,但效果没person相关系数好。
- 如何上述的条件任一不满足,则选用spearman相关系数,不可以用person相关系数。
- 两个定序数据之间只能用spearman相关系数,不能用person相关系数。
定序数据:反映对象等级、顺序关系的数据,例如:优、良、差。