matlab中样本相关系数的计算与测试

1. 何谓相关系数?

此处只列出相关系数的公式:

r=Cov(X,Y)σxσy=E(Xμx)(Yμy)σxσy

更多内容请百度或者看概率论与数理统计方面的书。

文章的目的是测试一下如何使用这个公式计算相关系数,并阐述一些在实际操作时遇到的一些问题。

2. matlab自带函数

2.1 corrcoef

功能:求相关系数

用法:

R = corrcoef(x,y)

其余用法未列出,使用help corrcoef查看。

corrcoef(x,y)表示序列x和序列y的相关系数,得到的结果是一个2*2矩阵,其中对角线上的元素分别表示x和y的自相关,非对角线上的元素分别表示x与y的相关系数和y与x的相关系数,两个是相等的。

2.2 例子

data1:有两例数据,第一列为x,第二列为y:

1 1.2
2 1.9
3 3.1
4 4
5 5.6
6 6.2
7 6.8

code:

data = load('data1.txt');
x = data(:,1);
y = data(:,2);
R = corrcoef(x, y)

结果:

R =
    1.0000    0.9927
    0.9927    1.0000

可以看到,自相关系数为1,因为自身与自身完全一样,x与y的相关系数为0.9927,非常接近1,表示两序列有很强的正相关性。

3. 自己写一个计算相关系数的函数

也不是完全自己写,目的是通过测试,了解自相关系数计算的一些细节。

3.1 总体与样本

在这之前得说一说总体与样本,计算方差的时候我们有如下公式:

Var(X)=E(XEX)2

这里取平均的时候有两种方式:

  1. 除以n,此为二阶中心矩,把数据看作总体,如果数据并不是总体(对于测量来说一般是样本,因为不可能无限次测量),得到的估计是有偏的。
  2. 除以n1,其实是把数据看作样本,这样做是为了得到无偏估计。

matlab中的var,std,cov等函数默认的都是除以n1,这样可以得到无偏估计。使用时需注意。下面是对nn1的测试。

3.2 var,std,cov函数的测试

3.2.1 var

在matlab中,函数var可以用来计算方差,但要注意:

V = var(X)   % 样本方差,分母除的是n-1(当n>1时),当n=1时,除n
V = var(X,1) % 二阶矩,也就是总体方差,分母除的是n

其余用法未列出,使用help var查看。

可以进行如下验证,数据还是用的上面的x:

% 总体方差
sigxn  = var(x,1) % matlab函数
sigxn_test = sum(diffx.^2)/size(diffx,1) % 自己计算
% 样本方差 
sigxn1 = var(x,0) % 与var(x)结果一样
sigxn1_test = sum(diffx.^2)/(size(diffx,1)-1)

结果:

sigxn       =     4
sigxn_test  =     4
sigxn1      =    4.6667
sigxn1_test =    4.6667

nn1的用法得证。

3.2.2 cov

协方差计算函数cov也分总体和样本两种情况。

cov的用法:

C = cov(x,y)   % 总体,n
C = cov(x,y,1) % 样本,n-1

3.2.3 std

std用法:

s = std(X)          % 总体,n
s = std(X,flag)     % flag=0是总体,flag=1是样本(n-1)

其余用法未列出,使用help var查看。

3.3 相关系数的计算

完整的代码:

data = load('data1.txt');
x  = data(:,1);
y  = data(:,2);
R0 = corrcoef(x, y) % 相关系数
% 以下是测试
mu_x  = mean(x); % x均值
mu_y  = mean(y); % y均值
diffx = x - mu_x; % 行列与x一样
diffy = y - mu_y;
covxy = sum(diffx.*diffy)/(size(diffx,1)-1); % x与y的协方差,用的n-1
sigx  = sqrt(var(x,0)); % 标准差,用的n-1
sigy  = sqrt(var(y,0));
R     = covxy/(sigx*sigy)

结果:

R0 =
    1.0000    0.9927
    0.9927    1.0000
R =
    0.9927

上面自己计算的时候,协方差和标准差的分母用的是n1,接下来,用n,发现得到的结果是一样的。可见,对于相关系数的计算,不管协方差和标准差的分母是n1还是n,结果是一样的。

posted @ 2016-10-13 11:09  ssh_alitheia  阅读(770)  评论(0编辑  收藏  举报