常常用来做数据分析、数据挖掘等工作。
如何简单快捷的实现皮尔逊相关,并得到结果?
需要应用MATLAB中的corr(X, Y)
或者 corrcoef(X,Y)
函数。
其中corr(X, Y)
既可以计算矩阵相关也可以计算序列相关,而corrcoef(X,Y)
中如果X, Y
为矩阵,则会将其转换为序列再进行计算。
X,Y # 为两个序列并且都是列向量.
pearson_corr = corr(X, Y) # 求X, Y序列的皮尔逊相关系数.
该函数同样可以设置参数计算不同的相关系数。
'Pearson' (the default) computes Pearson's linear correlation coefficient
'Kendall' computes Kendall's tau
'Spearman' computes Spearman's rho
Example 1
A = randn(10,1);
B = randn(10,1);
R = corrcoef(A,B)
X = corr(A,B)
如果corr()输入为向量则其输出为两个向量相关性的标量系数。
R =
1.000000000000000 0.327514034455913
0.327514034455913 1.000000000000000
X =
0.327514034455913
即R(1,2)= R(2,1)= X
Example 2
rng('default')
x = randn(30,4);
y = randn(30,4);
y(:,4) = sum(x,2); % introduce correlation
[r,p] = corr(x,y)
其中 r 为两个矩阵中列向量间的相关系数,p 为非零相关的假设检验值(位置与 r 对应),如果值小于 0.05 则相关性显著。
r =
-0.1686 -0.0363 0.2278 0.6901
0.3022 0.0332 -0.0866 0.2617
-0.3632 -0.0987 -0.0200 0.3504
-0.1365 -0.1804 0.0853 0.4908
p =
0.3731 0.8489 0.2260 0.0000
0.1045 0.8619 0.6491 0.1624
0.0485 0.6039 0.9166 0.0577
0.4721 0.3400 0.6539 0.0059
其中corrcoef( )
返回的 P 值同样为假设检验值,在corr()
中解释过不再解释,详情请见MATLAB
帮助文档。
Example 1
x = randn(6,1);
y = randn(6,1);
A = [x y 2*y+3];
R = corrcoef(A)
上述例子中A为(6,3)
矩阵,将其每列看作一组变量的序列,进行相关性计算,得到结果
R =
1.0000 -0.6237 -0.6237
-0.6237 1.0000 1.0000
-0.6237 1.0000 1.0000
对角线上由于是变量自相关所以都是1,元素(2,3)由于 y 与 2*y+3 是线性相关所以相关系数也是1。
Example 2
A = randn(10,1);
B = randn(10,1);
R = corrcoef(A,B)
上述A,B分别为长度为10的列向量,函数将两个列向量看作两个变量进行相关性分析。
R =
1.0000 0.4518
0.4518 1.0000