用scikits-statsmodels做正态性检验,scikits-statsmodels包囊括了大量的统计检验方法。作为范例,我们将介绍正态性Anderson-Darling检验(http://en.wikipedia.org/wiki/Anderson%E2%80%93Darling_test)。
具体步骤
和上一篇一样,我们将下载股价数据,但只需要下载一支股票的数据。然后我们将计算这支股票收盘价的对数收益率,并且把计算结果作为正态性检验函数的输入数据。
该函数返回一个元组,元组中的第二个元素是一个取值在0到1之间的p值(p-value)。
本攻略的完整代码如下。
import datetime
import numpy
from matplotlib import finance
from statsmodels.stats.adnorm import normal_ad
import sys
#1. 下载股价数据
# 2011到2012
start = datetime.datetime(2011, 01, 01)
end = datetime.datetime(2012, 01, 01)
print "Retrieving data for", sys.argv[1]
quotes = finance.quotes_historical_yahoo(sys.argv[1], start, end, asobject=True)
close = numpy.array(quotes.close).astype(numpy.float)
print close.shape
print normal_ad(numpy.diff(numpy.log(close)))
该脚本的输出结果如下所示。我们得到的p值是0.13。
Retrieving data for AAPL
(252,)
(0.57103805516803163, 0.13725944999430437)
攻略小结
本攻略示范了怎样用scikits-statsmodels中的Anderson-Darling统计检验方法做正态性检验。我们把不符合正态分布的股价数据作为Anderson-Darling检验函数的输入,得到的p值是0.13,这一结果也证实了我们的假设。