matlab非参数检验(符号检验,秩和)

皮尔森拟合优度检验

http://blog.sina.com.cn/s/blog_7054a1960102wizu.html

https://blog.csdn.net/qq_41000485/article/details/99423456

https://blog.csdn.net/matlab_matlab/article/details/56272365

[h,p,stats]=chi2gof(.....)

   返回一个结构体变量stats,它包含以下字段:

  chi2stat:卡方检验统计量

  df : 自由度

  edges:合并后各区间的边界向量

  O: 落入每个小区间内观测的个数,即时间频数

 E: 每个小区间对应的理论频数

 [......]=chi2gof(x,name1,val1,name2,val2,.......)

   通过可选的成对出现的参数名和参数值来控制初始分组、原假设中的分布、显著性水平等。控制初始分组的参数与参数值如下表:

  参数名             参数值                                说明

‘nbins’             正整数,默认值为10      分组(或区间)的个数

‘ctrs’                 向量                                   指定各区间的中点

‘edges’            向量                                   指定各个区间的边界

注意:上述三个参数不能同时指定,一次调用最多只能指定其中的一个参数,因为后两个参数已经潜在的指定了分组数了

chi2gof函数可以利用以下参数值来控制原假设中的分布

参数名                                    参数值                                                          说明

‘cdf’                   函数名字字符串、函数句柄、                         指定原假设中的分布,与‘expected’参数不同同时出现,若为函数名字符串或函数句柄,则x是函数的唯一

                        由函数字符串(或函数句柄)与函数中        输入参数;若是由函数名字字符串(或函数句柄)与函数中所含有参数值

                        所含参数的参数值构成的元胞数组                 构成的元胞数组,则x是函数的第一个输入参数,其他参数为后续输入

                                                                                                     

‘expected’                         向量                                              指定各区间的理论频数,与‘cdf’不能同时出现

‘nparams’                      向量                                                 指定分布中待估参数的个数,它确定了卡方分布的自由度

chi2gof函数控制检验的其他方面的参数与参数值列表

参数名             参数值                                说明

‘emin’      非负整数,默认值5       指定一个区间对应的最小理论频数,初始分组中,

                                                            理论频数小于这个值的区间和相邻区间合并。如果指定为0,

                                                            将不进行区间合并

‘frequency’   与x等长的向量               指定x中各元素出现的频数

‘alpha’           0--1之间的数,默认值0.05        指定检验的显著性水平


%参数'cdf'的值是由函数名字符串与函数中所包含参数的参数值构成的元胞数组
% [h1,p1,stats1]=chi2gof(x,'nbins',7,'cdf',{'normcdf',mean(x),std(x)})

% %参数‘cdf’的值有函数句柄与函数中所包含的参数值构成的元胞数组
% [h2,p2,stats2]=chi2gof(x,'nbins',6,'cdf',{@normcdf,mean(x),std(x)})

%指定初始分组数为6,检验数据是否服从参数为ms的泊松分布
[h3,p3,stats3]=chi2gof(f,'ctrs',f,'frequency',x,'cdf',{@poisscdf,mean(x)},'nparams',1)
% [h,p,s] = chi2gof(x,'cdf',{@unifcdf,1,6})
%  [h,p,s]= chi2gof(x,'cdf',@(z)unifcdf(z,ahat,bhat),'nparams',2);
%   [h,p,s] = chi2gof(x,'cdf',@(z)raylcdf(z,phat),'nparams',1);
%检验数据是否服从指数分布
%   [h,p,s]chi2gof(x,'cdf',@(z)gamcdf(z,mu),'nparams',1);

close all;clear all;clc 
x=[8,16,17,10,6,2,1];
f=0:6;n=60;
lamda=dot(f,x)/n%点积
pi=poisspdf(f,lamda) %泊松分布
x1=[8,16,17,10,9];
p2=[pi(1),pi(2),pi(3),pi(4),pi(5)+pi(6)+pi(7)]
chi=sum((x1-60.*p2).^2./(n.*p2))
chi2inv(1-0.05,5-1-1)
[h,p,st]=chi2gof(f,'ctrs',f,'frequency',x,'expected',n*pi,'nparams',1) %调用工具箱



col3=st.E/sum(st.O) %计算表中的第3列数据
col4=st.E %计算表中的第4列数据
col5=st.O.^2./col4  %计算表中的第5列数据
sumcol5=sum(col5)  %计算表中的第5列数据的和
k2=chi2inv(0.95,st.df)  %求临界值,st.df为自由度

h =

     0

%接受假设,电话站在一小时接到电话服从泊松分布
p =

    0.9833


st = 

  包含以下字段的 struct:

    chi2stat: 0.1630
          df: 3
       edges: [-0.5000 0.5000 1.5000 2.5000 3.5000 6.5000]
           O: [8 16 17 10 9]
           E: [8.1201 16.2402 16.2402 10.8268 8.3006]

符号检验  X Y样本数量相等

(1)符号检验的原理

     设X为连续总体,其中位数记为Me,考虑假设检验问题

  H0:Me=M0,                   H1:Me/=M0(Me不等于M0)

 记p+=P(X>M0),p-=P(X<M0),由于Me是总体X的中位数,可知当H0成立时,p+=p-=0.5,因此可以把上述假设等价于

 H0:p+=p-=0.5,            H1:p+/=p-(p+不等于p-)

把Xi>M0的个数记为n+,Xi<M0的个数记为n-,另m=n+  +  n-

如果H0成立,当m固定时,min(n+,n-)不应太小,否则应认为H0不成立。选取检验统计量

    S=min(n+,n-)

对于固定的m和给定的显著性水平a,根据S的分布计算临界值Sa,当S<=Sa时,拒绝原假设H0,即认为总体中位数Me与M0有显著差异;当S>Sa时,接受H0,,即认为总体中位数Me与M0为显著性差异。

  符号检验还可用于配对样本的比较检验,符号检验法是通过两个相关样本的每对数据之差的符号进行检验,从而比较两个样本的显著性。具体地讲,若两个样本差异不显著,正差值与负差值的个数应大致各占一半。

.(2)符号检验的MATLAB实现

 MATLAB统计工具箱中提供了signtest函数,用来符号检验,其调用格式如下:

  <1>  [p,h,stats] = signtest(x)

     根据样本观测量x做双侧符号检验,原假设是x来自于中位数为0的连续分布,备择假设是x来自中位数不为0的连续分布。输出参数分别为检验的p值,变量h,和包含检验统计量信息的结构体变量stats,当p>a(显著性水平)或h=0时,接受原假设;当p<=a或h=1时,拒绝原假设。

 <2>[p,h,stats]=signtest(x,m,param1,val1,.....)

  双侧符号检验,原假设是x来自于中位数为m的连续分布,备择假设是x来自于中位数不为m的连续分布,此时用可选的成对出现的参数名和参数值来控制计算结果,可用的参数名与参数值如下表

参数名                  参数值及说明

'alpha'                检验的显著性水平,其取值介于0--1

                            默认值为0.05

‘method’         指定计算p值的方法,可能的取值情况如下

                           ‘exact’:利用精确方法计算p值,适用于小样本(样本容量<100)情形

                           ‘approximate’:利用正态近似计算p值,适用于大样本情形

<3> [p,h,stats]=signtest(x,y,param1,val1,.......)

     配对样本x和y的双侧符号检验,原假设是x-y来自于中位数为0的连续分布,备择假设是x-y来自于中位数不为0的连续分布,x,y是等长的向量

例:在一次选举的民意调查中,随机询问了200名选民,结果显示,69人支持甲,108人支持乙,23人弃权。分析甲乙两人的支持率是否有显著差异。取显著性水平a=0.05;

分析:  用p1和p2分别表示甲乙两位候选人的支持率,根据题目要求可写出如下假设:

 H0:p1=p2=0.5,  H1:p1/=p2(p1不等于p2)

调用signtest函数求解

%定义样本观测值向量,-1表示支持甲,0表示弃权,1表示支持乙
x=[-ones(69,1);zeros(23,1);ones(108,1)];
p=signtest(x)     %符号检验,检验x的中位数是否为0


p =

    0.0043

由于signtest函数返回的检验值p=0.0043<0.01,所以在显著性水平=0.01下拒绝原假设H0,认为甲乙两位候选人的支持率有非常显著的差异。

例:

两组(各10名)有资质的评酒员分别对12种不同的酒进行品评,每个评酒员在品尝后进行评分,然后对每组的每个样品计算其平均分,评分结果如下

                样品1      样本2      样品3    样品4     样品5      样品6      样品7      样品8      样品9      样品10    样品11     样品12   

第一组     80.3      68.6          72.2     71.5      72.3          70.1         74.6        73.0        58.7        78.6         85.6           78.0

第二组     74.0       71.2        66.3      65.3     66.0           61.6        68.8          72.6        65.7        72.6         77.1           71.5

利用符号检验方法比较两组评酒员的评分是否有显著差异,取显著性水平a=0.05

%样本1
x=[80.3,68.6,72.2,71.5,72.3,70.1,74.6,73.0,58.7,78.6,85.6,78.0];
%样本2
y=[74.0,71.2,66.3,65.3,66.0,61.6,68.8,72.6,65.7,72.6,77.1,71.5];
p=signtest(x,y)  %配对样本的符号检验



p =

    0.0386

由于signtest函数返回p=0.0386<0.05,所以在显著性水平=0.05下认为两组评分有显著差异。

 Wilcoxon(威尔科克森)符号秩检验

符号检验只考虑的分布在中位数两侧的样本数据的个数,并没有考虑中位数两侧数据分布的疏密程度,这就使得符号检验的结果比较粗糙,检验功率较低。统计学家维尔科克森在1945年,提出了一种更为精细的“符号秩检验法”,该方法是在配对样本的符号检验基础上发展起来的,比传统的单独用正负号的检验更加有效。它适用于单个样本中位数的检验,也适用于配对样本的比较检验,但并不要求样本之差服从正态分布,只要求对称分布即可。

  (1)Wilcoxon(威尔科克森)符号秩检验的原理

      设连续总体X服从对称分布,其中位数记为Me,考虑假设检验问题:

          H0:Me=M0,               H1:Me/=M0(Me不等于m0)

   从总体X中抽取容量为n的样本X1,X2,......,Xn,将 |Xi-M0| ,i=0,1,2,....n,从小到大排序,并计算它们的秩(即序号,取值相同时求平均秩),根据 Xi-M0 的符号将|Xi-M0|分为正好组和负号组,用W+和W-分别表示正号组和负号组的秩和,则W+  +  W-  =n(n+1)/2。

   如果H0成立,则W+和W-取值相差不大,即min(W+,W-)不应太小,否则认为H0不成立。选取统计量

    W=min(W+,W-)

    对于给定的显著性水平a,根据W的分布计算出临界值Wa,当W<=Wa时,拒绝原假设H0,即认为总体中位数Me与M0有显著性差异;当W>Wa时,接受H0,即认为总体中位数Me与M0无显著差异。

  对于配对样本的符号秩检验,只需将两样本对应数据做差,即可将其化为单样本符号秩检验

  <1>[p,h,stats]=signrank(x)

    根据样本观测值向量x做双侧符号秩检验,原假设是x来自于中位为0的分布,备择假设是x来自于中位数不为0的分布。该检验假定x的分布是连续的,并且关于其中位数对称。输出参数分别为检验的p值、变量h和包含检验统计量信息的结构体变量stats,当p>a(显著性水平)或h=0时,接受原假设;当p<=a(显著性水平)或h=1时,拒绝原假设。

  <2> [p,h,stats]=signrank(x,m,param1,val1,......)

      双侧符号秩检验,检验样本观测值向量x是否来自于中位数为m的分布,此时用可选的成对出现的参数名和参数值来控制计算结果,参数名和参数值如下表

参数名                  参数值及说明

'alpha'                检验的显著性水平,其取值介于0--1

                            默认值为0.05

‘method’         指定计算p值的方法,可能的取值情况如下

                           ‘exact’:利用精确方法计算p值,适用于小样本(样本容量<15)情形

                           ‘approximate’:利用正态近似计算p值,适用于大样本情形

<3> [p,h,stats]=signrank(x,y,param1,val1,.....)

     配对样本x和y的双侧符号检验,原假设是x-y来自于中位数为0的分布,备择假设是x-y来自于中位数不为0的分布,此时,x和y是等长的向量,其他参数说明同上。

例:

抽样某品牌面粉的重量,抽查了16包,其观测值如下:

20.21,19.95,20.15,20.07,19.91,19.99,20.08,20.16,19.99,20.16,20.09,19.97,20.05,20.27,19.96,20.06

试检验中位数与原来设定的20是否有显著性差别,去显著性水平为0.05

 根据题目要求可写出如下假设:

  H0:Me=20,                H1:Me/=20(Me不等于20)

调用signrank函数求解

%输入样本观测向量
%换行时要加入...,不然就会说一个2x8的矩阵
x=[20.21,19.95,20.15,20.07,19.91,19.99,20.08,20.16,...
    19.99,20.16,20.09,19.97,20.05,20.27,19.96,20.06];

%调用signrank检验
[p,h,stats]=signrank(x,20)


p =

    0.0298


h =

     1


stats =

          zval: 2.1732                 %近似正态统计量
    signedrank: 110                %符号秩统计量

由于返回的p=0.0298<0.05,所以在显著性水平=0.05下拒绝原假设,不能认为此组面粉数据的中位数

秩和检验 X Y样本数量可以不相等

  MATLAB统计工具箱中提供了ranksum函数,用来做秩和检验,其调用格式如下:

 [p,h,stats]=ranksum(x,y,param1,val1,........)

  根据样本观测值向量x和y做双侧秩和检验,原假设两独立样本x和y来自于具有相同中位数的连续分布,备择假设是x和y具有不同的中位数。此时可选成对出现的参数和参数值来控制计算结果。可选的参数名与参数值如下表:

参数名                  参数值及说明

'alpha'                检验的显著性水平,其取值介于0--1

                            默认值为0.05

‘method’         指定计算p值的方法,可能的取值情况如下

                           ‘exact’:利用精确方法计算p值,适用于小样本(样本容量<10)情形

                           ‘approximate’:利用正态近似计算p值,适用于大样本情形

输出参数分别为检验的p值、变量h和包含检验统计量信息的结构体变量stats,当p>a(显著性水平)或h=0时,接受原假设;当p<=a或h=1时,拒绝原假设。

例:

某科研团队要研究两种饲料(高蛋白饲料和低蛋白饲料)对小白鼠体重的影响,先用高蛋白饲料喂养12只小白鼠,低蛋白饲料喂养7只小白鼠,记录在一段时间内体重的增加量,得到如下观测数据

饲料                                  各鼠增加的体重

高蛋白       133  112  102  129  121  161  142  88  115  127  96  125

低蛋白        71    119  101  83  107     134  92

试检验两种不同饲料喂养的小白鼠的体重增加是否有显著差异,去显著性水平=0.05;

根据题目要求可做如下假设:

 H0:u1=u2,                 H1:u1/=u2(u1不等于u2)

调用ranksum函数进行求解

%第一组体重增加量
x=[133,112,102,129,121,161,142,88,115,127,96,125];
%第二组体重增加量
y=[71,119,101,83,107,134,92];

%调用ranksum进行检验
[p,h,stats]=ranksum(x,y,'method','approximate')



p =

    0.0832


h =

     0


stats =

       zval: 1.7326
    ranksum: 141

函数返回p=0.0832>0.05,在显著性水平=0.05下接受原假设,认为两种饲料喂养的小白鼠体重的增加量没有显著性差
%20 P163
clc,clear
x=[2.36,3.14,7.52,3.48,2.76,5.43,6.54,7.41];
y=[4.38,4.25,6.54,3.28,7.21,6.54];
yx=[y,x]; 
yxr=tiedrank(yx) %计算秩
yr=sum(yxr(1:length(y))) %计算y的秩和
[p,h,s]=ranksum(y,x) %利用Matlab工具箱直接进行检验

    计算pearson相关系数

%r= corr(x, y, 'type' , 'Spearman');  
   r1=corr(x,y,'type','pearson');%corr默认pearson相关系数

参考链接

https://blog.csdn.net/MATLAB_matlab/article/details/56005671

其他:

Kstest

Test  statistics :   

[h,p,ksstat,cv]  = kstest(x,CDF,alpha,type)

x :被测试的数据样本,以列向量输入 ( continuous distribution defined by cumulative distribution function )

CDF :被检验的样本 cumulative distribution function ,缺省值为 N(0,1)

Alpha : 显著性水平,缺省时为 0.05

Type :字符输入。 'unequal' (缺省值)检验两者分布是否相同

 'larger'  检验 x 的 CDF 大于给定的 CDF

 'smaller'  检验 x 的 CDF 小于给定的 CDF

h h=0 不拒绝原假设,即两个分布相同

 h=1 拒绝原假设,即两个分布不同

p : 拒绝原假设的最小显著性水平

ksstat :假设为真时,满足 student 分布

cv : critical value/cutoff value , determining if ksstat is significant.

Kstest2

[h,p,ks2stat] = kstest2(x1,x2,alpha,type)

详见 ketest

https://wenku.baidu.com/view/2696d520915f804d2b16c158.html?fr=search-1-income6

  • 4
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值