python实现收益率数据的正态性检验
时间: 2025-06-29 09:04:00 浏览: 7
### 如何使用 Python 对收益率数据执行正态性检验
对于收益率数据的正态性检验,可以采用多种统计测试方法。Shapiro-Wilk 测试是一种常用的用于检测小样本数据集是否来自正态分布总体的方法[^2]。
下面展示了一个完整的流程,该流程不仅涵盖了 Shapiro-Wilk 测试的应用,还包括了 Anderson-Darling 和 D'Agostino-Pearson 综合测试法作为补充手段:
#### 导入必要的库
```python
import numpy as np
from scipy import stats
import yfinance as yf
```
#### 获取收益率数据
为了获取收益率数据,可以从 Yahoo Finance 下载 S&P 500 指数的价格,并据此计算日度收益率。
```python
# 加载S&P 500指数的历史收盘价
sp500 = yf.download('^GSPC', start='1985-01-01', end='2018-12-31')['Adj Close']
# 计算对数收益率
returns = sp500.pct_change().dropna()
```
#### 应用 Shapiro-Wilk 测试
通过 `scipy.stats.shapiro` 函数可以直接调用 Shapiro-Wilk 测试。
```python
shapiro_test_statistic, shapiro_p_value = stats.shapiro(returns)
print(f"Shapiro-Wilk Test Statistic: {shapiro_test_statistic}")
print(f"P-value: {shapiro_p_value}")
alpha = 0.05
if shapiro_p_value < alpha:
print("拒绝原假设:数据不符合正态分布")
else:
print("无法拒绝原假设:数据可能符合正态分布")
```
#### 补充其他类型的正态性检验
除了 Shapiro-Wilk 测试外,还可以考虑加入更多种类的正态性检验以增强结论的稳健性。
```python
anderson_result = stats.anderson(returns)
normaltest_statistic, normaltest_pvalue = stats.normaltest(returns)
print("\nAnderson-Darling Test Results:")
for i in range(len(anderson_result.critical_values)):
sl, cv = anderson_result.significance_level[i], anderson_result.critical_values[i]
if anderson_result.statistic < cv:
print(f'Significance Level={sl:.1%}, Critical Value={cv:.3f} -> 数据可能是正态分布')
else:
print(f'Significance Level={sl:.1%}, Critical Value={cv:.3f} -> 数据不是正态分布')
print(f"\nD'Agostino-Pearson Omnibus K-squared Test Statistic: {normaltest_statistic}")
print(f"D'Agostino-Pearson P-value: {normaltest_pvalue}\n")
if normaltest_pvalue < alpha:
print("拒绝原假设:数据不符合正态分布")
else:
print("无法拒绝原假设:数据可能符合正态分布")
```
上述代码片段展示了如何利用不同的统计学工具来评估给定时间序列(如股票市场指数的日收益率)是否遵循正态分布特性。值得注意的是,在实际操作过程中应当结合具体应用场景以及所处理的数据特征做出合理的选择[^4]。
阅读全文
相关推荐


















