天天看點

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

matlab非參數檢驗(符号檢驗,秩和)

[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

繼續閱讀