设为首页收藏本站

52matlab技术论坛,matlab教程,matlab安装教程,matlab下载

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 44|回复: 0

序列的拟合优度评价

[复制链接]
  • TA的每日心情
    开心
    2015-3-12 11:57
  • 签到天数: 1 天

    [LV.1]初来乍到

    82

    主题

    142

    帖子

    1250

    积分

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    1250
    发表于 6 天前 | 显示全部楼层 |阅读模式
    本帖最后由 matlab的旋律 于 2018-10-10 01:57 编辑

    一.数学原理及编程实现     
    在计算数据的拟合优度或者判断两个序列的相似程度时,一个重要的指标是相关系数,其中相关系数的计算公式如下所列.
    公式一:


    公式二:

    公式三:


    公式四:


    上面的的四个公式等价,其中E是数学期望,cov表示协方差,N表示变量取值的个数。其中的公式二最适合计算机编成实现,其中对应该公式的Matlab程序如下函数corrCoeff所示:
    function rho_XY = corrCoeff(X , Y)
    % 本函数实现了相关系数的计算操作
    %
    % 输入:
    %   X:输入的数值序列
    %   Y:输入的数值序列
    %
    % 输出:
    %   rho_XY:两个输入数值序列X,Y的相关系数
    %

    if length(X) ~= length(Y)
        error('两个数值数列的维数不相等');
        return;
    end

    numerator = sum(X .* Y) - (sum(X) * sum(Y)) / length(X);
    denominator = sqrt((sum(X .^2) - sum(X)^2 / length(X)) * (sum(Y .^2) - sum(Y)^2 / length(X)));
    rho_XY = numerator / denominator;

    end %函数结束
    也可以使用Matlab已有的函数corr直接计算相关系数,使用方法如:
    rho_XY = corr(X,Y)

    二.使用实例
    判断两个序列的相似程度经常用于生命健康设备评价领域,比如判断心率算法的准确性,以实际心率值seq_data1与设备算法自动计算的心率值seq_data2进行对比, 通过Matlab编程计算其相关系数,并绘制拟和直线程序如下:


    其中对的程序包括脚本文件main.m
    close all
    clc
    clear

    seq_data1 = load('seq_data1.txt');%加载数据
    seq_data2 = load('seq_data2.txt');

    figure
    hold on
    plot(seq_data1,'-r.')
    plot(seq_data2,'-k*')
    box on
    legend('seq\_data1','seq\_data2')

    figure
    errorAnalysisFunc(seq_data1,seq_data2)
    以及调用的计算相关系数,拟和直线及其绘图的曲线子函数errorAnalysisFunc.m如下所示意:
    function errorAnalysisFunc(seq_data1,seq_data2)

    rho_coffe= corr(seq_data1,seq_data2);
    poly_coffe = polyfit(seq_data1,seq_data2,1);

    hold on
    plot(seq_data1,seq_data2,'r*')
    plot(seq_data1,polyval(poly_coffe,seq_data1))
    axis square
    xlabel('seq\_data1')
    ylabel('seq\_data2')
    title(['correlation coefficient is ',num2str(rho_coffe)])
    axis tight
    box on
    hold off
    从计算的结果来看,相关系数为0.8318, 有一个有趣的现象就是在每个序列前面加上0, 如果设备在没有对人体进行测量时,心率值计算为0也是可能的,具有实际意义,直接计算绘图如下:

    从数据来分析,两个序列只是同时添加了一个0,变化应该不大,但是相关系数增加到0.9153.从这个例子来看相关系数越大并不能说明拟合就是最优的.

    三. 安斯库姆四重奏
    关于上述问题的结果评价,Draper和Smith(1981)提出了一些其他的指导性条件. 1973年,统计学家F.J. Anscombe构造出了四组奇特的数据(安斯库姆四重奏)。

    这四组数据中,具有下述统计特性(其中决定系数为相关系数的平方):

    单从这些统计数字的指标上来看,所体现出的四组数据实际情况应该非常相近,但是实际情况是,这四组数据有着天壤之别。对应的图示如下:
    通过图表描绘,你会发现这四组数据是四种完全不同的情况。第一组数据是大多人看到上述统计数字的第一反应,是最“正常”的一组数据;第二组数据所反映的事实上是一个精确的二次函数关系,只是在错误地应用了线性模型后,各项统计数字与第一组数据恰好都相同;第三组数据描述的是一个精确的线性关系,只是这里面有一个异常值,它导致了上述各个统计数字,尤其是相关度值的偏差;第四组数据则是一个更极端的例子,其异常值导致了平均数、方差、相关度、线性回归线等所有统计数字全部发生偏差。

    四.心得
    另外在心率算法与金标准进行对比分析时,也有一个有趣的现象,静止采集数据计算的心率与金标准心率的相关值有时反而比包含静止和轻运动状态的心率的相关值小.其实这也跟相关系数适用的范围有关,一般来说计算相关系数的两个变量总体是正态分布,或接近正态的单峰分布时,才有明显的对比意义.另外在实际使用中发现Bland-Altman也不具有普遍性,其对安斯库姆四重奏也不具有可评价性,对应安斯库姆四重奏数据的计算结果绘图如下:
    上面的实例以及历史研究成果表明,使用相关系数衡量两个序列的相似程度时,需要先对两个序列的线性性质进行分析,但是这种性质的分析很难找到一个很好的评价标准,这也就需要我们先行绘图检查数据与拟合曲线的匹配程度,也可以先行分析数据的分布特性.

    五.参考文献
    [1] Draper, N. R., & Smith, H. (1981). Applied Regression Analysis. New York: John Wiley and Sons, Inc.
    [2] Anscombe, F. J. (1973). "Graphs in Statistical Analysis". American Statistician. 27 (1): 17–21. doi:10.1080/00031305.1973.10478966. JSTOR 2682899.
    [3] Janert, Philipp K. (2010). Data Analysis with Open Source Tools. O'Reilly Media, Inc. pp. 65–66. ISBN 0-596-80235-8.



    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|52matlab技术网站 ( 粤ICP备14005920号-5  

    GMT+8, 2018-10-15 13:16 , Processed in 0.099614 second(s), 28 queries .

    Powered by Discuz! X3.2 Licensed

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表