統計學中的t檢驗法和F檢驗法的應用條件是樣本都來自正態總體或近似正態總體,只有符合這個條件,才能用它們來檢驗各樣本所屬的總體參數的差異顯著性。
一、非參數檢驗
1、Kolmogorov-Smirnov正態性檢驗(單樣本)
檢驗單一樣本是否來自某一特定分布。比如檢驗一組數據是否為正態分布。它的檢驗方法是以樣本數據的累積頻數分布與特定理論分布比較,若兩者間的差距很小,則推論該樣本取自某特定分布族。即對於假設檢驗問題:
H0:樣本所來自的總體分布服從某特定分布
H1:樣本所來自的總體分布不服從某特定分布
Fn(X)表示一組隨機樣本的累計概率函數,F0(X)表示分布的分布函數。
當原假設為真時,D的值應較小,若過大,則懷疑原假設,從而,拒絕域為
對於給定的又,
R實現:1.1 ks.test()
> x <- rnorm(3000)> ks.test(x,"pnorm") One-sample Kolmogorov-Smirnov testdata: xD = 0.0077, p-value = 0.9943alternative hypothesis: two-sided
若不是正態分布函數的檢驗,只需要將"pnorm"改成相應地分布函數
當已知分布函數時,如:> ks.test(x,"pnorm",mean(x),sd(x)) One-sample Kolmogorov-Smirnov testdata: xD = 0.0087, p-value = 0.9768alternative hypothesis: two-sided
若出現錯誤或警報,可能是由於:
Warning message:
In ks.test(X, "pnorm", 2.488715,3.012176) :
ties should not be present for the Kolmogorov-Smirnov test
#若已知可能的分布函數
#樣本數據中存在有相同的值,單樣本K-S檢驗要求檢驗分布是連續的,而連續分布出現相同值的概率為0.如果是出現相同的,則連續分布的假設不成立,則該方法無法使用
1.2 nortest包裡的lillie.test()可以實行更精確的Kolmogorov-Smirnov檢驗> library(nortest)> lillie.test(x) Lilliefors (Kolmogorov-Smirnov) normality testdata: xD = 0.0087, p-value = 0.8408
可以發現此方法的結果和ks.test的第二種方法的結果是一樣的1.3 fBasics包裡的normaltest()和ksnormtest()
> ksnormTest(x)Title: One-sample Kolmogorov-Smirnov testTest Results: STATISTIC: D: 0.0077 P VALUE: Alternative Two-Sided: 0.9943 Alternative Less: 0.7946 Alternative Greater: 0.7012 Description: Tue Jan 13 21:24:19 2015 by user:
#建議:大樣本、已知總體均數和標準差,選擇非參數檢驗-單樣本KS檢驗號。。但對於樣本大小,有說大於50、500、5000的,各有所不同的理解。
2、Shapiro-Wilk(W檢驗)
統計量為:
當原假設為真時,W的值應接近於1,若值過小,則懷疑原假設,從而拒絕域為R:W<c
在給定的水平下P{w<c}=a
R實現:2.1 shapiro.test()實現
> shapiro.test(x) Shapiro-Wilk normality testdata: xW = 0.9997, p-value = 0.9494
在R中,shpiro.test()函數限制為3-5000個樣本之間> shapiroTest(x)Title: Shapiro - Wilk Normality TestTest Results: STATISTIC: W: 0.9997 P VALUE: 0.9494
二、圖示法
Q-Q圖:以樣本的分位數作為橫坐標,以按照正態分布計算的相應分位點作為縱坐標,把樣本表現為直角坐標系的散點。如果數據服從正態分布,則樣本點應圍繞第一象限的對角線分布。
w <- c(75.0, 64.0, 47.4, 66.9, 62.2, 62.2, 58.7, 63.5,
66.6, 64.0, 57.0, 69.0, 56.9, 50.0, 72.0)
qqnorm(w); qqline(w)
可以發現:基本上呈正態分布。