定义:如果有两组数据 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软件。
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%的置信水平上两变量具有显著的相关性
(置信水平/可靠度:置信水平表示区间估计的把握程度)
定义: 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)
斯皮尔曼相关系数还被定义为等级之间的皮尔逊相关系数。
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没有考虑数值相同时,等级取算数平均值
%直接给出相关系数和p值
[R,P]=corr(X,'type','Spearman');
%注意这里X、Y也必须是列向量
如何选择使用哪种相关系数:
定序数据:反映对象等级、顺序关系的数据,例如:优、良、差。