【分布的擬合】
把樣本的分布函數(也稱為“經驗分布函數”),與某種理論的分布函數(如常態分佈)疊放在一起,進行比較。
例如:
score = xlsread('examp02_14.xls','Sheet1','G2:G52');% 去掉總成績中的0,即缺考成績score = score(score > 0); %樣本figure; % 建立圖形視窗% 繪製經驗分布函數圖,並返回圖形控制代碼h和結構體變數stats,% 結構體變數stats有5個欄位,分別對應最小值、最大值、平均值、中位元和標準差[h,stats] = cdfplot(score);set(h,'color','k','LineWidth',2); % 設定線條顏色為黑色,線寬為2%************************繪製理論常態分佈函數圖******************************x = 40:0.5:100; % 產生一個新的橫座標向量x% 計算均值為stats.mean,標準差為stats.std的常態分佈在向量x處的分布函數值y = normcdf(x,stats.mean,stats.std);hold on% 繪製常態分佈的分布函數曲線,並設定線條為品紅色虛線,線寬為2plot(x,y,':k','LineWidth',2);% 添加標註框,並設定標註框的位置在圖形視窗的左上方legend('經驗分布函數','理論常態分佈','Location','NorthWest');
結果:
由圖可知該樣本近似服從常態分佈。 【分布的檢驗】
(1)利用kstest函數檢驗單個樣本是否服從指定分布(雙側檢驗),或者是否在指定的分布函數之下或之下(單側檢驗),注意這裡的分布是完全確定的,不含未知參數。
例如:
% 讀取檔案examp02_14.xls的第1個工作表中的G2:G52中的資料,即總成績資料score = xlsread('examp02_14.xls','Sheet1','G2:G52');% 去掉總成績中的0,即缺考成績score = score(score > 0);% 產生cdf矩陣,用來指定分布:均值為79,標準差為10.1489的常態分佈cdf = [score, normcdf(score, 79, 10.1489)]; % 調用kstest函數,檢驗總成績是否服從由cdf指定的分布[h,p,ksstat,cv] = kstest(score,cdf)
注意:
結果:
由h=0,p=0.5486>0.05知接受假設,即認為總成績服從均值為79,標準差為10.1489的常態分佈。
(2)利用ktest2函數檢驗兩個樣本是否服從相同的分布(雙側檢驗),或者檢驗一個樣本的分布函數是否在另一個樣本的分布函數之上或者之下(單側檢驗),ktest2函數對比兩個樣本的經驗分布函數,即這裡的分布也是確定的。
【例1】:
% 讀取檔案examp02_14.xls的第1個工作表中的B2:B52中的資料,即班級資料banji = xlsread('examp02_14.xls','Sheet1','B2:B52');% 讀取檔案examp02_14.xls的第1個工作表中的G2:G52中的資料,即總成績資料score = xlsread('examp02_14.xls','Sheet1','G2:G52');% 去除缺考資料score = score(score > 0);banji = banji(score > 0);% 分別提取60101和60102班的總成績score1 = score(banji == 60101);score2 = score(banji == 60102);% 調用kstest2函數檢驗兩個班的總成績是否服從相同的分布[h,p,ks2stat] = kstest2(score1,score2)[h1,stats1] = cdfplot(score1);%繪製score1的經驗分布函數圖,並返回圖形控制代碼h1和結構體變數stats1set(h1,'color','k','LineWidth',2); hold on[h2,stats2] = cdfplot(score2);%繪製score2的經驗分布函數圖,並返回圖形控制代碼h2和結構體變數stats2set(h2,'color','r','LineWidth',2);
結果:
由h=0,p=0.7016>0.05故接受假設,即認為兩個班級的總成績服從相同的分布.
【例2】:利用ktest2完成(1)中例題
score = xlsread('examp02_14.xls','Sheet1','G2:G52');% 去除缺考資料score = score(score > 0);randn('seed',0) % 指定隨機數產生器的初始種子為0% 產生10000個服從均值為79,標準差為10.1489的常態分佈的隨機數,構成一個列向量xx = normrnd(mean(score),std(score),10000,1);% 調用kstest2函數檢驗總成績資料score與隨機數向量x是否服從相同的分布[h,p] = kstest2(score,x,0.05)
結果:
由h=0,p=0.5138>0.05知接受假設,即認為總成績服從均值為79,標準差為10.1489的常態分佈。
(3)利用lillietest函數檢驗樣本是否服從指定的分布(預設情況下為常態分佈),注意這裡分布的參數是根據樣本估計的。
【例1】:
score = xlsread('examp02_14.xls','Sheet1','G2:G52');% 去除缺考資料score = score(score > 0);% 調用lillietest函數進行Lilliefors檢驗,檢驗總成績資料是否服從常態分佈[h,p,kstat,critval] = lillietest(score)
結果:
由h=0,p=0.1346>0.05可知接受假設,即認為總成績服從常態分佈,該分布的均值、方差由樣本均值和方差代替。
【例2】:
score = xlsread('examp02_14.xls','Sheet1','G2:G52');% 去除缺考資料score = score(score > 0);% 調用lillietest函數進行Lilliefors檢驗,檢驗總成績資料是否服從指數分布[h, p] = lillietest(score,0.05,'exp')
結果:
由h=1,p<0.05知拒絕假設,即認為總成績不服從指數分布