ARCH和GARCH模型

背景

image-20240128143332960
image-20240128143501537

长期来看稳

短期存在异方差

称为条件异方差

image-20240128143658853

一般用第二种

image-20240128143902003
image-20240128143933989
image-20240128144016953

总结

image-20240128144106033

一点没看懂......

还是直接应用罢

例子

image-20240128144339640
image-20240128144326544

单位根检验

平稳

ARMA

否则ARIMA

image-20240128144507721

因此要确定p,q。

画出ACF和PCF图

image-20240128144825398

只考虑比较显著的

然后构造四个模型

比较AIC和BIC值

image-20240128145026619
image-20240128145117733
image-20240128145230698
image-20240128145358019
image-20240128145410001
image-20240128145513605
image-20240128145627687
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
clear  // 清空变量

* (1) 导入数据并生成时间序列 (*和//都可以用来注释一行)
insheet using "Bindex.csv" //导入位于和代码同一文件夹下的csv数据文件
gen datevar = date(date,"YMD") // 将csv中的变量date转换为stata能识别的时间数据datevar
format datevar %td // 对datevar的展示格式进行转换,转换后以:日月年 显示
label variable datevar "日期" // 设置datevar的标签为日期,主要用于画图时的展示
tsset datevar // 定义datevar是一个时间序列数据
gen time=_n // 定义一个从1到n的time序列,n是观测值的个数,系统自动在后台记录的
tsset time // 将time这个序列定义为时间序列,后续滞后算子时需要用到


// 画深成B指的时间序列图
line index datevar
graph export "深成B指的时间序列图.png", as(png) replace // 导出图片到本地文件夹

// 计算日收益率数据
gen r=100*(index-L.index)/L.index //(今天的收盘价-昨天的收盘价)/昨天的收盘价 L是lag的缩写

// 对日收益率r进行描述性统计
summarize r

// 做出日收益率的时间序列图
line r datevar
graph export "深成B指日收益率的时间序列图.png", as(png) replace // 导出图片到本地文件夹


// 检验收益率序列r是否为单位根,检验方法是ADF检验(原假设:是单位根序列,备择假设:是平稳序列)
dfuller r
// MacKinnon approximate p-value for Z(t) = 0.0000 p值为0意味着拒绝原假设,所以我们认为r序列平稳


// 观察acf图与pacf图 ,判断AMRA模型的阶数
ac r,lags(20) // 自相关系数图,滞后20期
graph export "自相关系数图.png", as(png) replace // 导出图片到本地文件夹

pac r,lags(20) // 偏自相关系数图,滞后20期
graph export "偏自相关系数图.png", as(png) replace // 导出图片到本地文件夹


// 根据acf和pacf图,初步判断使用四个备选的ARMA模型来拟合
set matsize 1500 // 把计算时支持的最大矩阵大小设置的大一点,否则计算机性能较差的电脑可能在计算中会报错
arima r,arima(3,0,3) // 用ARIMA(3,0,3)模型对r进行估计
estat ic // 得到AIC和BIC,用于选择合适的模型(选小原则,详见第十一讲)
arima r,arima(8,0,8)
estat ic
arima r,arima(3,0,8)
estat ic
arima r,arima(8,0,3)
estat ic


// ARIMA(3,0,3)模型的AIC值和BIC值的平均值最小,所以下面我们使用这个模型进行估计
arima r,arima(3,0,3)

// 得到残差的预测值并生成残差分布直方图图
predict residess, residuals // 保存残差
hist residess,norm freq // norm freq表示加上标准正态分布的概率密度函数
graph export "残差分布直方图.png", as(png) replace // 导出图片到本地文件夹


// 检验残差是否为白噪声序列,检验方法为Q检验:原假设是白噪声,备择假设不是白噪声
wntestq residess, lag(12) // 对残差序列进行白噪声检验

// 生成残差的平方,并进行Q检验
gen ressq = residess^2 // 生成残差平方序列ressq
wntestq ressq, lag(12) // 对残差平方序列ressq进行白噪声检验

// LM检验:是否存在ARCH误差
reg ressq l.ressq l2.ressq l3.ressq l4.ressq l5.ressq // 将残差平方项对其滞后项回归
gen LM_STAT=e(N)*e(r2) // 计算LM统计量
display LM_STAT // 输出LM统计量
display chiprob(e(df_m),LM_STAT) // 计算p值


// 利用AIC BIC选择合适的模型进行估计
// 注意:扰动项的分布在金融数据中常服从t分布
// 正态分布下GARCH(1,1)估计
arch r,arima(3 0 3) arch(1) garch(1)
estat ic
// t分布下GARCH(1,1)估计
arch r,arima(3 0 3) arch(1) garch(1) distribution(t 3) // 自由度为3的t分布
estat ic
// 正态分布下GARCH(2,2)估计
arch r,arima(3 0 3) arch(2) garch(2)
estat ic
// t分布下GARCH(2,2)估计
arch r,arima(3 0 3) arch(2) garch(2) distribution(t 3)
estat ic


// 得到拟合结果,并进行预测
arch r,arima(3 0 3) arch(1) garch(1) distribution(t 3)
tsappend ,add(10) // 将时间延长10期
predict result // 对数据进行预测
tsline result r, legend(label(1 "预测值") label(2 "真实值")) // 绘制拟合图
graph export "预测结果图.png", as(png) replace // 导出图片到本地文件夹