7.MATLAB参数统计与假设检验-常用非参数检验

 常用非参数检验

更多MATLAB数据分析视频请点击,或者在网易云课堂上搜索《MATLAB数据分析与统计》 http://study.163.com/course/courseMain.htm?courseId=1003615016

在用样本数据对总体信息做出统计推断时,通常要求抽样应满足随机性和独立性,因为几乎所有的抽样定理都是建立在数据独立的基础之上的。而在用样本数据对正态总体参数做出统计推断(例如参数估计和假设检验)时,还要附加一个要求:样本数据应服从正态分布,这种数据分布类型已知的总体参数的假设称为参数假设检验。与参数假设检验相对应的还有非参数假设检验,例如分布的正态性检验,样本的随机性检验等,这类检验通常只假定分布是连续的或对称的,并不要求数据服从正态分布。

 1 游程检验

    在实际应用中,需要对样本数据的随机性和独立性作出检验,这要用到游程检验,它是一种非参数检验,用来检验样本数据的随机性,通常人们认为满足随机性的样本数据也满足独立性。

 在以一定顺序(如时间)排列的有序数列中,具有相同属性(如符号)的连续部分被称为一个游程,一个游程中所包含数据的个数称为游程的长度,通常用R表示一个数列中的游程总数。

例:

设某样本n=12人的标志表现为男、女,有以下三种排列。

  (i) 男\男,女\女\女,男,女\女,男\男\男\男 (ii) 男\男\男\男\男\男\男,女\女\女\女\女 (iii)男,女,男,女,男,女,男,女,男,女,男\男

    连续出现男或女的区段称为游程。

 每个游程包含的个数为游程长度。以r表示序列中游程的个数:

  (i)r=5, (ii)r=2, (iii)r=11

  可以看出,(i)是随机性序列;(ii)(iii)是非随机性序列,所以,可以用游程的个数来检验样本的随机性,或总体的分布特征。

 在游程检验中,数据序列的游程总数偏少或偏多都是数据不满足随机性的变现,因此,游程的一般都是W={R>r1或R<r2}。


例2:

一个包含12个数的有序序列如下:

6  13  9  16  6  8  4  8  11  10  5  1

-  +     +   +    -   -    -   -   +    +    -   -

这是一个数值序列,可以采用以下两种方式计算游程总数。

(1)以某一值(例如数据的均值)为界,将大于该值标记为“+”,小于该值标记为“-”,等于的去除,然后确定游程总数,可得游程总数为5

 (2)根据数列中出现的连续增和连续减的子序列数确定游程总数,这种方式下确定的游程总数为8.

MATLAB统计工具箱中提供了runstest函数,用来做游程检验,调用格式如下:

 <1>h = runstest(x)

      对样本数据序列x进行游程检验,原假设为H0:数据出现是随机的,备择假设为H1:数据出现顺序不随机。此时已x的均值为界计算游程。输出参数h等于0或1,若为0,则在显著性水平0.05下接受原假设,认为样本数据满足随机性;若为1,则拒绝原假设,认为样本数据不满足随机性。runstest函数会把x中的NaN作为缺失数据而忽略。

 <2> h = runstest(x,v)

    以数值v为界进行游程检验,v的默认值为数据序列x的均值。

 <3>h=runstest(x,‘ud’)

      根据数列中出现的连续增和连续减的子序列数确定游程总数,从而进行游程检验,此时,数列x中与前一元素相同的数将会被去除

 <4> h = runstest(...,param1,val1,param2,val2,.....)

        用可选的成对出现的参数名和参数值控制计算结果,可用的参数与参数值如下表

 <5>[h,p]=runstest(......)

   返回检验的p值,当p值小于或等于显著性水平a时,拒绝原假设,否则接受原假设

 参数名                         参数值及说明

‘alpha’                    检验的显著性水平,取值介于

                               0--1之间,默认值为0.05


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

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

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


‘tail’                   尾部类型变量,用来指定备择假设的形式,可能的取值如下:

                          ‘both’:双侧检验

                           ‘right’右尾检验

                          ‘ left’ 作为检验


<6>[h,p,stats]=runstest(......)

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

  nurns:游程总数

 n1:数据序列中大于v的数据个数

 n0:数据序列中小于v的数据个数

 z:检验统计量的值


例:

研究中国福利彩票“双色球”开奖号码中的蓝色球号码的出现是否随机


%读取”双色球开奖数据.xls“第1个工作表中的I2:I98中的数据,即蓝色球号码
x=xlsread('C:\Users\Administrator\Desktop\MATLAB\MATLAB数据分析与统计\chapter5\双色球开奖数据.xls',1,'I2:I98');
%调用runstest函数,对蓝色球号码进行游程检验
%因为样本较大,所以指定,‘method’为‘aproximate’:利用正态近似计算p值
%v值为默认
[h,p,stats]=runstest(x,[],'method','approximate')


h =

     0


p =

    0.4192


stats =

    nruns: 45
       n1: 50
       n0: 47
        z: -0.8079

runstest函数返回的检验的p值p=0.4192>0.05,所以在显著性水平=0.05下接受原假设H0:蓝色球号码出现顺序是随机的。


.2 符号检验

  (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下认为两组评分有显著差异。


3 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无显著差异。

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

 讲解下面这个例子

 http://wiki.mbalib.com/wiki/%E5%A8%81%E5%B0%94%E7%A7%91%E5%85%8B%E6%A3%AE%E7%AC%A6%E5%8F%B7%E7%A7%A9%E6%A3%80%E9%AA%8C

   (2)Wilcoxon(威尔科克森)符号秩检验的MATLAB实现

    MATLAB统计工具箱中提供了signrank函数,用来做Wilcoxon(威尔科克森)符号秩检验,其调用格式如下:

     <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下拒绝原假设,不能认为此组面粉数据的中位数为20.


.4 曼-惠特尼秩和检验

 曼-惠特尼U检验又称“曼-惠特尼秩和检验”,是由H.B.Mann和D.R.Whitney于1947年提出的。它假设两个样本分别来自除了总体均值以外完全相同的两个总体,目的是检验这两个总体的均值是否有显著的差别。

 (1)曼-惠特尼秩和检验的原理

   设X和Y是两个连续型总体,其分布函数分别为F(x-u1)和F(x-u2)均未知,即两总体分布形状相同,位置参数(例如中位数)可能不同,从两总体分布中分布抽取容量为n1和n2的样本X1,X2,......,Xn1 和 Y1,Y2,.....,Yn2,并且两样本独立,考虑假设性检验问题

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

 将样本观测数据X1,X2,....,Xn1和Y1,Y2,....,Yn2混合在一起,从小到大排序,并计算它们的秩(即序号,取值相同时求平均秩)。记X1,X2,...,Xn1的秩和为Wx,Y1,Y2,....,Yn2的秩和为Wy,则

    Wx+Wy =(n1+n1)(n1+n2+1)/2

选取检验统计量         

                   Wx ,        n1<=n2

W=          

                   Wy,             n1>n2

如果H0成立,W的取值不应过于偏小或偏大,否则拒绝H0,对于给定显著性水平a, 根据W的分布计算下临界值W1和上临界值W2,当W<=W1或W>=W2时,拒绝原假设H0,;当W1<W<W2时,接受H0。通常样本容量之一超过10时,可认为W近似服从正态分布,从而可用近似正态检验法。

 (2)曼-惠特尼秩和检验的MATLAB实现

  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下接受原假设,认为两种饲料喂养的小白鼠体重的增加量没有显著性差异。

更多MATLAB数据分析视频请点击,或者在网易云课堂上搜索《MATLAB数据分析与统计》 http://study.163.com/course/courseMain.htm?courseId=1003615016

原创文章 100 获赞 339 访问量 56万+

猜你喜欢

转载自blog.csdn.net/MATLAB_matlab/article/details/56005671