** 正态分布与正态性检验**
正态分布(Normal distribution),也称“常态分布”,又名高斯分布(Gaussian distribution)。正态分布是具有两个参数 μ 和 σ^2 的连续型随机变量的分布,第一参数 μ 是服从正态分布的随机变量的均值,第二个参数 σ^2 是此随机变量的方差。
正态性检验(Normality Test)是一种特殊的假设检验,是检验一批观测值(或对观测值进行函数变换后的数据)或一批随机数是否来自正态总体,是否服从正态分布。这是当基于正态性假定进行统计分析时,如果怀疑总体分布的正态性,应进行正态性检验。但当有充分理论依据或根据以往的信息可确认总体为正态分布时,不必进行正态性检验。
平稳性'
平稳过程的概念在时间序列分析中一直占有重要地位。所谓平稳时间序列过程就是概率分布在如下意义上跨时期稳定的时间序列过程:如果从时间序列中任取一个变量集,并把这个序列向前移动 h 个时期,那么其联合联合概率分布保持不变。规范而言:
正态性检验
Kolmogorov-Smirnov 正态性检验
统计学里, Kolmogorov–Smirnov 检验(亦称:K–S 检验)是用来检验数据是否符合某种分布的一种非参数检验,通过比较一个频率分布f(x)与理论分布g(x)或者两个观测值分布来判断是否符合检验假设。其原假设H0:两个数据分布一致或者数据符合理论分布。
> data1 <- c(87.2,77.1,92.5,68.8,80.0,78.1,84.2,76.3,81.5,80.8,80.5,77.3,92.0,86.3,76.7,80.2,81.7,75.8,77.9,72.2,81.4,90,84,86,80.4,68,77,87,76,77.5,78,92.3,75,80.6,78.8)
> length(data1)
[1] 35
> data.std <- scale(data1)
> ks.test(data.std, "pnorm", alternative="two.sided", exact=NULL)
One-sample Kolmogorov-Smirnov test
data: data.std
D = 0.13781, p-value = 0.4776
alternative hypothesis: two-sided
ks.test 函数进行正态性检验的原假设为H0:数据符合正态分布。
D:D值越小,越接近0,表示样本数据越接近正态分布。
p:p-value小于显著性水平α(0.05),则拒绝H0,数据不服从正态分布。
ks.test的检验结果为:D=0.13781,p=0.4776>0.05,我们不能拒绝原假设H0,从而接受数据服从正态分布的原假设。
> library(timeDate)
> library(timeSeries)
> library(fBasics)
> normalTest(data.std)
Title:
Shapiro - Wilk Normality Test
Test Results:
STATISTIC:
W: 0.958
P VALUE:
0.1995
Description:
Sat Nov 28 22:24:19 2020 by user: Administrator
> ksnormTest(data.std)
Title:
One-sample Kolmogorov-Smirnov test
Test Results:
STATISTIC:
D: 0.1378
P VALUE:
Alternative Two-Sided: 0.4776
Alternative Less: 0.4686
Alternative Greater: 0.242
Description:
Sat Nov 28 22:24:19 2020 by user: Administrator
normalTest 检验:W=0.958,p=0.1995>0.05,因此不能拒绝服从正态分布的原假设,即该数据服从正态分布。 ksnormTest检验:D=0.1378,p=0.4776(双侧)>0.05,不能拒绝服从正态分布的原假设,即该数据服从正态分布。 殊途同归,不同的正态性检验方法,虽然的出的检验统计量的值和P值不同,但最终是否服从正态分布的检验结果是一致的。
注意:由于 K-S 检验不需要知道数据的分布情况,在小样本的统计分析中效果比较好。(大样本数据下,使用t-检验;小样本数据,使用t-检验会出现较大的偏差)
nortest 包中的正态性检验
options(stringsAsFactors=F)
library(nortest)
CITIC <- readLines("http://labfile.oss.aliyuncs.com/courses/918/CITIC600030.csv")
CITIC <- unlist(strsplit(CITIC, split=","))
CITIC <- as.data.frame(matrix(CITIC, ncol=4, byrow=T))
date <- as.data.frame(as.Date(CITIC[,1]))
expr <- CITIC[,2:ncol(CITIC)]
expr <- as.data.frame(sapply(expr, as.numeric))
CITIC <- cbind(date, expr)
colnames(CITIC)[1] <- "V1"
head(CITIC)
CITIC.closed <- CITIC[,2]
lillie.test()正态性检验,它是对K-S正态性检验的的修正,适合大样本。
> lillie.test(CITIC.closed)
Lilliefors (Kolmogorov-Smirnov) normality test
data: CITIC.closed
D = 0.20641, p-value < 2.2e-16
D值:D越小,越接近0,表示样本数据越接近正态分布
p值:如果p-value小于显著性水平α(0.05),则拒绝H0(服从正态分布)
根据 Lilliefor 正态性检验结果,检验统计量的值 D=0.20641,P< 2.2e-16<0.05。也就是说对中信证券股票日收盘价的数据正态性检验结果拒绝原假设,而接受数据服从非正态分布的备择假设,因而中信证券股票日收盘价的数据不服从正态分布。
Anderson–Darling检验是一种用来检验给定的样本是否来自于某个确定的概率分布的统计检验方法。
> ad.test(CITIC.closed)
Anderson-Darling normality test
data: CITIC.closed
A = 129.1, p-value < 2.2e-16
A 值:A 越小,越接近 0,表示样本数据越接近正态分布。
p 值:如果 p-value 小于显著性水平 α(0.05),则拒绝 H0(服从正态分布)。
根据 Anderson-Darling 正态性检验结果,检验统计量的值为 A=129.1, p值 < 2.2e-16<0.05,在 5% 的显著性水平上拒绝服从正态分布的原假设,而接受该时间序列数据服从正态分布的原假设,因而说明该时间序列数据不服从正态分布。
Cramer-von Mises测试是对正态性复合假设的EDF综合测试。
> cvm.test(CITIC.closed)
Cramer-von Mises normality test
data: CITIC.closed
W = 21.613, p-value = 7.37e-10
Warning message:
In cvm.test(CITIC.closed) :
p-value is smaller than 7.37e-10, cannot be computed more accurately
W 值:W 越小,越接近 0,表示样本数据越接近正态分布
p 值:如果 p-value 小于显著性水平 α(0.05),则拒绝H0(样本服从正态分布)
根据检验结果,检验统计量的值 W = 21.613, p 值= 7.37e-10<0.05,即在 5% 的显著性水平上拒绝服从正态分布的原假设,从而该时间序列不服从正态分布。
Pearsonchi-square检验基于理论频数与观测频数得到的。
> pearson.test(CITIC.closed)
Pearson chi-square normality test
data: CITIC.closed
P = 1850.6, p-value < 2.2e-16
p 值:P 越小,越接近 0,表示样本数据越接近正态分布
p-value:如果 p-value 小于显著性水平α(0.05),则拒绝服从正态分布的原假设。
根据检验结果,检验统计量的值 P=1850.6,p-value<2.2e-16<<0.05,因而拒绝服从正态分布的原假设,即该时间序列不服从正态分布。
Shapiro-Francia正态性检验的检验统计量只是有序样本值与来自标准正态分布的(近似)预期有序分位数之间的平方相关性。
> sf.test(CITIC.closed)
Shapiro-Francia normality test
data: CITIC.closed
W = 0.74431, p-value < 2.2e-16
W 值:W 越小,越接近 0,表示样本数据越接近正态分布
p 值:如果 p-value 小于显著性水平 α(0.05),则拒绝H0(样本服从正态分布)
根据本次检验结果,检验统计量的值 W = 0.74431, p-value<2.2e-16<<0.05,因而拒绝服从正态分布的原假设,故该时间序列不服从正态分布。
运用同一个时间序列进行正态性检验,不管运用那种检验方法,结果都是一致的,方法的改变并不会影响最终结果。
fBasics 包中的正态性检验
Shapiro-Wilk 是 Shapiro、Wilk 提出的用顺序统计量 W 来检验分布的正态性。
> data2 <- rnorm(1000)
> data3 <- rexp(1000, rate=1)
> shapiro.test(data2)
Shapiro-Wilk normality test
data: data2
W = 0.99839, p-value = 0.4879
> shapiro.test(data3)
Shapiro-Wilk normality test
data: data3
W = 0.83861, p-value < 2.2e-16
W 值:W 越小,越接近 0,表示样本数据越接近正态分布
p 值:如果 p-value 小于显著性水平 α(0.05),则拒绝H0(样本服从正态分布)
对分别满足正态分布和指数分布的数据进行正态性检验,检验结果: 正态分布(data2):p-value=0.4879>0.05,不能拒绝原假设,满足正态分布。 指数分布(data3):p-value<2.2e-16<<0.05,拒绝服从正态分布的原假设,该数据不满足正态分布。
D'Agostino正态性检验
> dagoTest(data2)
Title:
D'Agostino Normality Test
Test Results:
STATISTIC:
Chi2 | Omnibus: 2.1434
Z3 | Skewness: -0.0561
Z4 | Kurtosis: -1.463
P VALUE:
Omnibus Test: 0.3424
Skewness Test: 0.9553
Kurtosis Test: 0.1435
Description:
Sat Nov 28 23:48:04 2020 by user: Administrator
> dagoTest(data3)
Title:
D'Agostino Normality Test
Test Results:
STATISTIC:
Chi2 | Omnibus: 340.6075
Z3 | Skewness: 15.7767
Z4 | Kurtosis: 9.5762
P VALUE:
Omnibus Test: < 2.2e-16
Skewness Test: < 2.2e-16
Kurtosis Test: < 2.2e-16
Description:
Sat Nov 28 23:48:04 2020 by user: Administrator
STATISTIC:卡方检验统计量(Omnibus)、偏度检验统计量(Skewness)、峰度检验统计量(Kurtosis)。
P 值:卡方综合检验的 P 值、偏度检验的 P 值、峰度检验的 P 值。
由于正态分布的 Omnibus Test 的 P 值为 0.3423>0.05,即不能拒绝服从正态分布的原假设,说明实验很合理。而指数分布的Omnibus Test 的 P 值为2.2e-16<<0.05,股指数分布数据拒绝服从正态分布的原假设,这也符合常理。
Jarque-Bera 检验一种常用的正态性检验,针对大样本的一种正态性检验。
> jarqueberaTest(data2)
Title:
Jarque - Bera Normalality Test
Test Results:
STATISTIC:
X-squared: 1.9452
P VALUE:
Asymptotic p Value: 0.3781
Description:
Sat Nov 28 23:51:45 2020 by user: Administrator
> jarqueberaTest(data3)
Title:
Jarque - Bera Normalality Test
Test Results:
STATISTIC:
X-squared: 1052.7742
P VALUE:
Asymptotic p Value: < 2.2e-16
Description:
Sat Nov 28 23:51:45 2020 by user: Administrator
或者也可以用 tseries包中的 jarque.bera.test() 函数进行jarque-Bera正态性检验,检验结果一致。
> jarque.bera.test(data2)
Jarque Bera Test
data: data2
X-squared = 1.9452, df = 2, p-value = 0.3781
> jarque.bera.test(data3)
Jarque Bera Test
data: data3
X-squared = 1052.8, df = 2, p-value < 2.2e-16
X-squared 值:值越小,越接近 0,表示样本数据越接近正态分布
p 值:如果 p-value 小于显著性水平 α(0.05),则拒绝H0(样本服从正态分布)
据检验结果,正态分布的 P 值大于 0.05,指数分布的 P 值小于 0.05,检验结果非常合理。
正态QQ图
对数据进行正态性检验不仅可以使用以上的实验数学检验方法,还可以运用图形的方法,即绘制正态 QQ 图。
> qqnorm(data2)
> qqline(data2)
如果数据服从正态分布,则图形的所有点基本落在 45 度的对角线上,上图是正态分布的 QQ 图,显然所有点基本落在 45 度对角线上。
> qqnorm(data3)
> qqline(data3)
上图是指数分布的 QQ 图,显然指数分布的大部分点都没有落在 45 度对角线上,也就是说指数分布不服从正态分布。
平稳性检验
平稳性检验是分析时间序列的基础操作,一般来说在进行时间序列数据的深入分析时,需要先检验该序列的平稳性才能进行后续的分析。平稳性检验有很多种方法,在本实验中利用中国农业银行的股票数据来介绍以下几种平稳性检验方法。
图形观察法
绘制时序图是检验时间序列平稳性最直观的方法,但是缺点是不够精确,有很大的主观性。
> ABC <- readLines("http://labfile.oss.aliyuncs.com/courses/918/ABC601288.csv")
> ABC <- unlist(strsplit(ABC, split=","))
> ABC <- as.data.frame(matrix(ABC, ncol=4, byrow=T))
> date <- as.data.frame(as.Date(ABC[,1]))
> expr <- ABC[,2:ncol(ABC)]
> expr <- as.data.frame(sapply(expr, as.numeric))
> ABC <- cbind(date, expr)
> colnames(ABC)[1] <- "V1"
>
> ABC.closed <- ABC[,2]
> ABC.diff <- diff(ABC.closed)
> ABC.ts <- ts(ABC.closed, start=c(2010, 7), end=c(2017, 7), freq=12)
> dABC.ts <- ts(ABC.diff, start=c(2010, 7), end=c(2017, 7), freq=12)
> par(mfrow=c(2, 1))
> plot(ABC.ts, type='l', xlab="Date", ylab="Price")
> plot(dABC.ts, type='l', xlab="Date", ylab="Diff Price")
一个平稳的时间序列在图形上往往表现出一种围绕其均值不断波动的过程;
而非平稳序列则往往表现出在不同的时间段具有不同的均值(如持续上升或持续下降) 可以看到中国农业银行股票的日收盘价的时间序列波动性较大不同的时段有不同的趋势,明显是不平稳的。为此绘制了差分后的时序图,相对来说要平稳一些,但不能完全判定。
时间序列的平稳性还可以通过观察 ACF 图来进行判定。平稳时间序列的自相关函数(ACF)要么是截尾的,要么是拖尾的。因此我们可以根据这个特性来判断时间序列是否为平稳序列。
> fit1 <- lm(ABC.closed~time(ABC.closed))
> summary(fit1)
Call:
lm(formula = ABC.closed ~ time(ABC.closed))
Residuals:
Min 1Q Median 3Q Max
-0.60295 -0.18983 -0.00365 0.14041 1.07789
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.449e+00 1.490e-02 164.33 <2e-16 ***
time(ABC.closed) 5.042e-04 1.507e-05 33.45 <2e-16 ***
---
Signif. codes:
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.3082 on 1710 degrees of freedom
Multiple R-squared: 0.3955, Adjusted R-squared: 0.3952
F-statistic: 1119 on 1 and 1710 DF, p-value: < 2.2e-16
> acf(rstudent(fit1), main='the ACF of ABC', xlab='Lag', ylab='ACF', las=1, cex.main=0.95)
平稳时间序列:平稳时间序列的 K 阶滞后自相关系数都非常小,呈截现象,ACF 值基本在置信区间内。
非平稳时间序列:该序列具有上升或下降的趋势,对于所有短时滞来说,自相关系数大且为正,而且随着时滞k的增加而缓慢地下降。
从中国农业银行的股票日收盘价的 ACF图可以看出ACF随着k的增大而缓慢下降,自相关系数大且为正,因此该序列为非平稳时间序列。
单位根检验
单位根检验(unit root test)是针对各种时间序列中是否具有某种统计特性而提出的一种平稳性检验的特殊方法,单位根检验的方法有很多种,包括DF检验、ADF检验、PP检验等。
DF检验
> library(urca)
> urt.ABC <- ur.df(ABC.closed, type='trend', selectlags='AIC')
> summary(urt.ABC)
###############################################
# Augmented Dickey-Fuller Test Unit Root Test #
###############################################
Test regression trend
Call:
lm(formula = z.diff ~ z.lag.1 + 1 + tt + z.diff.lag)
Residuals:
Min 1Q Median 3Q Max
-0.38042 -0.01693 -0.00152 0.01286 0.35290
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.542e-02 9.129e-03 2.784 0.00542 **
z.lag.1 -1.062e-02 3.615e-03 -2.937 0.00335 **
tt 6.770e-06 2.892e-06 2.341 0.01933 *
z.diff.lag -6.752e-03 2.422e-02 -0.279 0.78045
---
Signif. codes:
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.04589 on 1706 degrees of freedom
Multiple R-squared: 0.005411, Adjusted R-squared: 0.003662
F-statistic: 3.094 on 3 and 1706 DF, p-value: 0.02605
Value of test-statistic is: -2.9374 3.1193 4.5162
Critical values for test statistics:
1pct 5pct 10pct
tau3 -3.96 -3.41 -3.12
phi2 6.09 4.68 4.03
phi3 8.27 6.25 5.34
由于检验统计量的值(Value of test-statistic)为-2.9374,大于 1%、5%、10% 的显著性水平上的临界值,即在 1%、5%、10% 的显著性水平上都不能拒绝存在单位根的原假设,因此该序列存在单位根,是非平稳时间序列。
ADF检验
> library(tseries)
> adf.test(ABC.closed)
Augmented Dickey-Fuller Test
data: ABC.closed
Dickey-Fuller = -2.5294, Lag order = 11, p-value =
0.3542
alternative hypothesis: stationary
根据 ADF 检验结果,DF=-2.5294,P 值为 0.3542>0.05,即在 5% 的显著性水平上,不能拒绝存在单位根的原假设,因此该时间序列是非平稳的。
PP检验
> pp.test(ABC.closed)
Phillips-Perron Unit Root Test
data: ABC.closed
Dickey-Fuller Z(alpha) = -14.718, Truncation lag
parameter = 8, p-value = 0.2888
alternative hypothesis: stationary
PP 检验所用到的 pp.test() 函数任旧来自于 tseries 包,原假设为:序列存在单位根。检验统计量的值为 -14.718,p 值为0.2888>0.05,因此在 5% 的显著性水平上不能拒绝原假设,该序列是非平稳时间序列。