python实现garch模型的Shapiro-Wilktest的检验
时间: 2025-06-29 12:03:55 浏览: 8
### 使用Python对GARCH模型的结果执行Shapiro-Wilk正态性检验
对于时间序列分析中的波动率建模,多元GARCH模型是一种常用的方法来捕捉金融数据的异方差特性[^2]。为了评估GARCH模型残差是否满足正态分布这一重要假设条件,可以采用Shapiro-Wilk检验。
#### 安装必要的库
首先需要安装`arch`包以及其他可能未安装的相关依赖项:
```bash
pip install arch numpy pandas scipy matplotlib statsmodels
```
#### 导入所需模块并加载数据集
接着导入所需的Python库,并准备要处理的数据集:
```python
import numpy as np
from arch import arch_model
import yfinance as yf
from scipy.stats import shapiro
import matplotlib.pyplot as plt
```
#### 获取股票价格数据并计算收益率
这里以苹果公司(AAPL)为例获取其历史收盘价,并基于此计算简单日回报率:
```python
ticker = 'AAPL'
start_date = '2018-01-01'
end_date = '2023-01-01'
df = yf.download(ticker, start=start_date, end=end_date)['Adj Close']
returns = df.pct_change().dropna()
```
#### 构建和拟合GARCH(1,1)模型
定义一个基本形式的GARCH(1,1)过程,并对其进行参数估计:
```python
model = arch_model(returns, vol='Garch', p=1, q=1, dist='Normal')
result = model.fit(disp='off') # disp='off'表示不显示优化过程中间信息
print(result.summary())
```
#### 执行Shapiro-Wilk正态性检验
利用Scipy库提供的函数针对标准化后的残差实施Shapiro-Wilk测试:
```python
std_resid = result.resid / (np.sqrt(result.conditional_volatility))
statistic, p_value = shapiro(std_resid)
if p_value < 0.05:
conclusion = "拒绝零假设:数据不符合正态分布"
else:
conclusion = "无法拒绝零假设:数据符合正态分布"
print(f'Shapiro-Wilk 正态性检验:\n\t统计量={statistic:.6f},\n\tp值={p_value:e}\n\n结论:{conclusion}')
```
上述代码片段展示了如何通过Python实现GARCH模型及其后续的Shapiro-Wilk正态性检验流程。当p值小于预设阈值(通常取α=0.05),则认为有足够的证据表明样本不是来自正态分布;反之,则缺乏足够理由否定原始假定即数据遵循正态分布[^1][^3]。
此外,建议绘制QQ图作为辅助工具进一步直观判断标准残差是否大致沿直线排列,从而增强对正态性的理解与确认。
阅读全文
相关推荐

















