【分佈的擬合】
把樣本的分佈函數(也稱爲“經驗分佈函數”),與某種理論的分佈函數(如正態分佈)疊放在一起,進行比較。
例如:
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
% 繪製正態分佈的分佈函數曲線,並設置線條爲品紅色虛線,線寬爲2
plot(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和結構體變量stats1
set(h1,'color','k','LineWidth',2);
hold on
[h2,stats2] = cdfplot(score2);%繪製score2的經驗分佈函數圖,並返回圖形句柄h2和結構體變量stats2
set(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的正態分佈的隨機數,構成一個列向量x
x = 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知拒絕假設,即認爲總成績不服從指數分佈