zoukankan      html  css  js  c++  java
  • 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,结果是一样的。

  • 相关阅读:
    Cocos2dx引擎10-事件派发
    IE无法打开internet网站已终止操作的解决的方法
    让程序在崩溃时体面的退出之Dump文件
    天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,增益其所不能
    RapeLay(电车之狼R)的结局介绍 (隐藏结局攻略)
    cocos 3.0 一键打包android平台应该注意的细节
    Matlab画图-非常具体,非常全面
    linux和windows文件名称长度限制
    Javascript的DOM操作
    50个高端大气上档次的管理后台界面模板
  • 原文地址:https://www.cnblogs.com/shanchuan/p/8150333.html
Copyright © 2011-2022 走看看