Friedman检验MATLAB实例

#程序员缓解工作压力的小窍门#

今天刚刚学会一点点,就写一点点吧

定义

弗里德曼(Friedman检验)检验即 “弗里德曼双向秩方差分析”,是多个(相关)样本齐一性的统计检验。 该方法是弗里德曼 (M.Friedman) 1973年提出的。相关介绍在百度上有详细介绍。百度上有详细介绍

通俗的来说,就是算出整个算法在与其比较的算法中的平均排名。

MATLAB函数

[p,q,d]=friedman(D);
[p,q,d]=friedman(D,n);

D为储存数据的矩阵假设为30×4;n本人估计是按矩阵D按行将D分为n等分;当n=1时,将D分为20行,为是第一种用法,且n必须为矩阵D的行数的倍数。第一种常用。

注:friedman是按列计算平均排名

话不多说,上实例

实例

D =

    0.0915    0.0041    0.2541    0.0387
    0.0076    0.0131    0.0593    0.0063
    0.0035    0.0237    0.0149    0.0186
    0.0173    0.0028    0.0131    0.0066
    0.0294    0.0134    0.1815    0.0019
    0.0016    0.0018    0.0252    0.0021
    0.2159    0.0003    0.0725    0.0069
    0.0198    0.0203    0.0950    0.0106
    0.0224    0.0018    0.0863    0.0066
    0.0439    0.0047    0.0075    0.0004
    0.0991    0.0053    0.0118    0.0038
    0.0607    0.0012    0.0119    0.0014
    0.0524    0.0086    0.0477    0.0024
    0.5601    0.0036    0.0066    0.0081
    0.0494    0.0109    0.0050    0.0005
    0.0408    0.0003    0.0955    0.0020
    0.0063    0.0002    0.0634    0.0045
    0.1111    0.0007    0.0945    0.0014
    0.0229    0.0104    0.0177    0.0008
    0.2637    0.0124    0.0217    0.1029
    0.1176    0.0046    0.0894    0.0287
    0.0404    0.0004    0.0637    0.0060
    0.0207    0.0115    0.0039    0.0239
    0.0605    0.0060    0.0323    0.0087
    0.0186    0.0044    0.0145    0.0048
    0.1266    0.0219    0.0152    0.0057
    0.0971    0.0024    0.0467    0.0044
    0.7799    0.0031    0.0308    0.0009
    0.0122    0.0051    0.0344    0.0147
    0.0080    0.0070    0.0343    0.0240

D为由四种优化算法在同一测试函数分别运行30次得到的最优值,现比较其平均排名

[p,q,d]=friedman(D)

p =

   2.7719e-08


q =

  4×6 cell 数组

    {'来源'}    {'SS'     }    {'df' }    {'MS'      }    {'卡方'    }    {'p 值(卡方)' }
    {'列'  }    {[63.4000]}    {[  3]}    {[ 21.1333]}    {[ 38.0400]}    {[2.7719e-08]}
    {'误差'}    {[86.6000]}    {[ 87]}    {[  0.9954]}    {0×0 double}    {0×0 double  }
    {'合计'}    {[    150]}    {[119]}    {0×0 double}    {0×0 double}    {0×0 double  }


d = 

  包含以下字段的 struct:

       source: 'friedman'
            n: 30
    meanranks: [3.3000 1.6333 3.1333 1.9333]
        sigma: 1.2910

在d的struct的字段中,有meanranks,

b=d.meanranks 

b =

    3.3000    1.6333    3.1333    1.9333
为对应的四种算法的平均排名

再套用函数

[~,vual]=sort(b)

vual =

     2     4     3     1

由此可得第二种算法的性能排在第一位,第四种排在第二位,第三种算法排在第三位,第一种算法排在最后。

(本人较菜,代码得一个一个运算来理解,见谅!)

注:friedman是按列计算平均排名

若已有的数据需按行计算,转置矩阵D即可

在实际运用的还是发现一个问题

就是他这个排名不太好理解,笔者在运用时,突然发现不知道它这个比较是越小越好,还是越大越好,比如,

  4     1     2     3

但是加一组参考或者最小数以后,

 5     4     1     2     3

这个结果就与我认为的不太一样了,我需要的是最后一列的数排在第一,形成参照,其余的一次排名。

最后的结果才是小弟认为的平均排名呀,唉,累

  • 64
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Friedman检验是一种非参数的多组比较方法,用于比较三个或以上的相关样本。在Matlab中,可以使用“friedman”函数来进行Friedman检验。具体的代码如下: % 假设有3个样本,每个样本有10个观测值 data = [randn(10,1), randn(10,1), randn(10,1)]; % 进行Friedman检验 [p, tbl, stats] = friedman(data); % 输出结果 disp(['p值为:', num2str(p)]); disp('Friedman检验结果表:'); disp(tbl); disp('Friedman检验统计量:'); disp(stats); 其中,data是一个3列10行的矩阵,每列代表一个样本,每行代表一个观测值。使用“friedman”函数进行Friedman检验,返回的结果包括p值、Friedman检验结果表和Friedman检验统计量。可以使用disp函数将结果输出到命令窗口。 ### 回答2: Friedman检验是一种统计方法,用于比较多组数据在同一组实验条件下的差异性。它是一种非参数检验方法,不依赖于数据的分布情况,适用于样本数不同,样本大小不同的数据集。 Matlab是一款用于数据处理、可视化和数学计算的软件工具。在使用Matlab进行Friedman检验时,我们需要按照以下步骤进行操作: 1. 将数据导入Matlab并存储在矩阵中。 2. 对每个样本组计算平均数,在Matlab中可以使用mean函数实现。 3. 根据计算出的平均数,将多个样本组合并到一个矩阵中。 4. 在Matlab中使用friedman函数对合并后的矩阵进行Friedman检验,此函数将返回Friedman统计量和p值。 5. 根据p值和事先设定的显著性水平,可以推断出数据是否有显著的差异。 使用Matlab进行Friedman检验时需要注意以下几点: 1. 由于Friedman检验是一种非参数检验方法,因此我们无需对数据进行正态性检验。 2. 在处理多个样本组时,我们需要确保样本组的大小相同。 3. 在计算平均数时,如果数据存在缺失值,需要进行处理,如计算该组数据的中位数。 总之,使用Matlab进行Friedman检验可以帮助我们快速、准确地分析多个样本组在同一实验条件下的差异性,为研究提供可靠的统计依据。 ### 回答3: Friedman检验是统计分析中用于比较多个组间差异的一种非参数方法。它通过比较每个样本的排名值来评估不同组之间的差异是否具有统计学意义。在实际应用中,Friedman检验常用于比较多个算法、多个因素对结果的影响等。本文将使用MATLAB编写Friedman检验代码,并进行检验MATLAB的Statistics and Machine Learning Toolbox提供了一个函数“friedman”,可以用于计算Friedman检验的p值。我们可以首先生成一个矩阵,其中每一列代表一个样本或组的数据: data = [1.2 1.3 1.4; 1.1 1.0 1.3; 1.3 1.2 1.1; 1.4 1.1 1.2; 1.2 1.4 1.0] 接下来,我们使用函数“friedman”进行Friedman检验: [p,tbl,stats] = friedman(data,1,'off'); 其中,“1”表示计算每个组的排名值时使用的维度;“'off'”表示不输出排名矩阵。函数的输出包括检验的p值、排名矩阵和统计数据。 根据p值可以判断不同组之间的差异是否具有统计学意义。如果p值小于显著性水平α(通常取0.05),则拒绝原假设,即认为不同组之间的差异具有统计学意义。 此外,我们可以使用MATLAB的多重比较函数“multcompare”对每组数据进行两两比较,以找出具有显著差异的组之间的具体差异。 [c,~,~,gnames] = multcompare(stats,'alpha',0.05); 其中“0.05”表示使用的显著性水平。输出包括每组的比较结果和显著性水平。 综上所述,Friedman检验是一种用于比较多个组间差异的非参数方法,MATLAB的Statistics and Machine Learning Toolbox提供了相应函数可以方便地进行计算。该检验在实际应用中具有广泛的应用价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值