一般数据处理中中我们经常遇到数据求几何均值(GM)的情况,因此需要判断数据是否是正态分布或者对数正态分布。SPSS和R都可以用来检验数据的正态性。下面就介绍一下在SPSS和R中正态性的检验。
1. SPSS
先用R生成100个随机数,设定种子为1(set.seed,为了可重复)
set.seed(1)
mydata1 <- rnorm(100, mean = 2, sd = 3)
> head(mydata1)
[1] 0.1206386 2.5509300 -0.5068858 6.7858424 2.9885233 -0.4614052
> plot(mydata1, mydata1)
在SPSS,分析-描述统计-探索-绘制,勾选“带检验的正态图”,得到结果,如图
其中,KS检验和SW检验都是检验正态性的方法,一般来说,大样本量看KS,小样本量看SW检验。具体大样本小样本的分界线,有说50,有说2000,暂时没有找到比较确信的说法。一般来说应该看SW结果就可以了。当Sig >0.5 时,服从原假设,即数据正态分布。
- SPSS 规定:当样本含量3 ≤n ≤5000 时,结果以Shapiro - Wilk (W 检验) 为准,当样本含量n > 5000 结果以Kolmogorov - Smirnov 为准。
- SAS 规定:当样本含量n ≤2000 时,结果以Shapiro - Wilk (W 检验) 为准,当样本含量n >2000 时,结果以Kolmogorov - Smirnov (D 检验) 为准。
ANOVA单因素方差分析与R实现
SPSS中,K-S和S-W的判别标准是什么? - SPSS论坛 - 经管之家(原人大经济论坛)
2. R
- 在R中使用SW检验,只需要用shapiro.test函数即可,如下
> shapiro.test(mydata1)
Shapiro-Wilk normality test
data: mydata1
W = 0.9956, p-value = 0.9876
- 如果样本量大,用KS检验,函数为lillie.test (需要安装package,nortest)
- 注意:在R中使用lillefors检验,就相当于在SPSS探索分析中的正态性检验的Kolmogorov-Smirnov的lilliefors的修正值,二者结果是相同的。
> library(nortest)
> lillie.test(mydata1)
Lilliefors (Kolmogorov-Smirnov) normality test
data: mydata1
D = 0.047014, p-value = 0.8479
3. 拟合正态分布的数据
- R中,对于正态分布的数据,在R中拟合时,使用mass包的fitdistr进行拟合
> fitdistr(mydata1,"normal")
mean sd
2.3266621 2.6810912
(0.2681091) (0.1895818)
- SPSS中的结果
SPSS-分析-描述统计-描述
4. 对数正态分布求几何均值
- 对于R中的对数正态分布数据,有两种方法进行拟合,一种是,先对原始数据取对数,然后求得取对数后的数据求算术均值,算术均值就是原始数据的几何均值。另一种是直接使用R中的函数(fitdistr,mass包),对呈对数正态分布数据进行拟合,得到几何均值。
> head(mydata2)#构建mydata2,是原始数据的指数次
[1] 1.1282171 12.8190196 0.6023685 885.2254926 19.8563393 0.6303972
> head(mydata1)
[1] 0.1206386 2.5509300 -0.5068858 6.7858424 2.9885233 -0.4614052
> fitdistr(mydata2, "log-normal")
meanlog sdlog
2.3266621 2.6810912
(0.2681091) (0.1895818)
参考:
- http://www.mamicode.com/info-detail-937349.html
2. 杨斌. 正态性检验的几种方法比较[J]. 统计与决策, 2015(14):72-74.