推荐书: Python开发最佳实践

stata教程03-数据的正态性检验和变量正态化

分享时@该用户已经被封, 我就能回答你的问题奥!

文章目录
  1. 1. 数据介绍
  2. 2. 绘制概率图
  3. 3. 进行正态性检验
  4. 4. 变量正态化

变量是否符合正态分布? 怎么检验变量的正态分布假设? 如果变量不满足正太分布假设怎么办? 下面我们使用stata来回答以上问题。

数据介绍

使用stata系统自带的数据auto.dta来演示今天的例子。

1
sysuse auto
输出(stream):
(1978 Automobile Data)

查看数据的基本信息:

1
describe
输出(stream):

Contains data from C:\Program Files (x86)\Stata15\ado\base/a/auto.dta
obs: 74 1978 Automobile Data
vars: 12 13 Apr 2016 17:45
size: 3,182 (_dta has notes)
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
storage display value
variable name type format label variable label
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
make str18 %-18s Make and Model
price int %8.0gc Price
mpg int %8.0g Mileage (mpg)
rep78 int %8.0g Repair Record 1978
headroom float %6.1f Headroom (in.)
trunk int %8.0g Trunk space (cu. ft.)
weight int %8.0gc Weight (lbs.)
length int %8.0g Length (in.)
turn int %8.0g Turn Circle (ft.)
displacement int %8.0g Displacement (cu. in.)
gear_ratio float %6.2f Gear Ratio
foreign byte %8.0g origin Car type
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Sorted by: foreign

绘制概率图

绘制变量mpg, 查看变量是否和正太分布相似:

1
hist mpg, normal
输出(stream):
(bin=8, start=12, width=3.625)

svg

输出(stream):



上面的命令中, hist指的是直方图, mpg就是变量名, normal指的是正态密度函数。从图中我们可以看到, 这个数据直方图和正态密度函数的曲线有一些差距, 也可以绘制和密度图:

1
kdensity mpg, normal

svg

绘制变量的QQ图:

1
qnorm mpg
输出(stream):

(note: file C:/Users/syd/.stata_kernel_cache/graph2.svg not found)

svg

输出(stream):


进行正态性检验

但是不管绘制哪种图形, 都有一个问题, 我们无法精确的检验数据是否满足正态分布的假设。所以, 我们可以进行JB检验:

1
su mpg, detail
输出(stream):

Mileage (mpg)
-------------------------------------------------------------
Percentiles Smallest
1% 12 12
5% 14 12
10% 14 14 Obs 74
25% 18 14 Sum of Wgt. 74

50% 20 Mean 21.2973
Largest Std. Dev. 5.785503
75% 25 34
90% 29 35 Variance 33.47205
95% 34 35 Skewness .9487176
99% 41 41 Kurtosis 3.975005

su命令有一个detail选项, 使用该选项可以输出偏度和峰度, 从上面的结果可以看到偏度Skewness=.9487176, 峰度Kurtosis=3.975005, 根据这两个值, 我们可以计算JB统计量为:

1
di (r(N)/6) * ((r(skewness)^2) + [(1/4)*(r(kurtosis)-3)^2])
输出(stream):
14.031924

由于JB统计量满足自由度为2的卡方分布, 所以我们可以计算JB统计量所对应的p值:

1
di chi2tail(2, 14.031924)
输出(stream):
.00089744

p值小于1%, 因此拒绝虚无假设, 即数据不满足正太分布的假设。

实际上, JB检验有对应的第三方程序, 我们可以使用下面的命令来安装这个程序:

1
ssc install jb6
输出(stream):
checking jb6 consistency and verifying not already installed...
installing into c:\ado\plus\...
installation complete.

然后一个命令即可进行JB检验:

1
jb6 mpg
输出(stream):
Jarque-Bera normality test: 14.03 Chi(2) 9.0e-04
Jarque-Bera test for Ho: normality: (mpg)

进行D’Agostino检验:

1
sktest mpg
输出(stream):

Skewness/Kurtosis tests for Normality
------ joint ------
Variable | Obs Pr(Skewness) Pr(Kurtosis) adj chi2(2) Prob>chi2
-------------+---------------------------------------------------------------
mpg | 74 0.0015 0.0804 10.95 0.0042

该检验也显示, 变量不属于正态分布。

进行Shapiro-Wilk检验, 结果也类似:

1
swilk mpg
输出(stream):

Shapiro-Wilk W test for normal data

Variable | Obs W V z Prob>z
-------------+------------------------------------------------------
mpg | 74 0.94821 3.335 2.627 0.00430

进行Shapiro-Francia检验:

1
sfrancia mpg
输出(stream):

Shapiro-Francia W' test for normal data

Variable | Obs W' V' z Prob>z
-------------+-----------------------------------------------------
mpg | 74 0.94872 3.650 2.510 0.00604

变量正态化

我们可以对变量取log自然对数, 然后再检验它的正态性:

生成新变量: lnmpg

1
gen lnmpg = log(mpg)

绘制核密度图:

1
kdensity lnmpg, normal

svg

这个图看起来更像正态分布了。

进行JB检验:

1
jb6 lnmpg
输出(stream):
Jarque-Bera normality test: .8632 Chi(2) .6495
Jarque-Bera test for Ho: normality: (lnmpg)

结果显示, p值并不显著, 我们无法拒绝正态分布的假设。

注意
本文由jupyter notebook转换而来, 您可以在这里下载notebook
有问题可以直接在下方留言
或者给我发邮件675495787[at]qq.com
请记住我的网址: mlln.cn 或者 jupyter.cn