Stata中GARCH/EGARCH-M模型系数提取、显著性分析及Beta统计需求
Stata中GARCH/EGARCH-M模型系数提取、显著性获取及分类统计
我来帮你一步步解决这些问题,从基础的GARCH系数提取,到面板EGARCH-M循环代码的修正,再到Beta系数的分类统计:
一、提取GARCH模型的系数与显著性水平
不管是单变量GARCH还是针对面板个体的回归,Stata的arch命令运行后,所有结果都存储在返回值中,你可以直接提取:
1. 提取系数
模型运行后,系数矩阵存储在e(b)里,你可以直接用_b[变量名]调用单个系数,或者用矩阵操作批量提取:
// 先运行GARCH模型 arch ut rmrf, arch(1) garch(1) archmexp(sqrt(X)) distribution(t) // 提取_sigma2的系数(对应你要的Beta) local beta = _b[_sigma2] di "Beta系数:`beta'"
2. 获取显著性水平(z统计量、p值)
标准误存储在_se[变量名]中,z统计量可以通过系数/标准误计算;p值则根据模型分布选择对应的函数:
- 如果是正态分布,用
normal()函数 - 如果是t分布,用
ttail()函数(需要自由度,即e(df_r))
示例代码:
// 提取标准误 local se = _se[_sigma2] // 计算z统计量 local z_stat = _b[_sigma2]/`se' // 计算p值(t分布为例) local p_value = 2*ttail(e(df_r), abs(`z_stat')) di "z统计量:`z_stat'" di "p值:`p_value'"
二、面板EGARCH-M循环代码的修正与扩展
你原来的循环代码有几个问题:一是arch命令前的反引号多余,二是没有处理回归不收敛的情况,三是遗漏了EGARCH的关键选项。以下是修正后的完整方案:
1. 先创建存储变量
提前生成变量来保存每个个体的系数、z统计量和p值:
gen beta = . // 存储Beta系数 gen z_stat = . // 存储z统计量 gen p_value = . // 存储p值
2. 修正循环代码(加入收敛判断+EGARCH选项)
注意:你要跑的是EGARCH-M,必须在arch命令中加入egarch选项,否则默认是普通GARCH:
forvalues i=1/478 { // 针对单个个体运行EGARCH-M模型 arch ut rmrf if id==`i', arch(1) garch(1) egarch archmexp(sqrt(X)) distribution(t) // 判断模型是否收敛,避免提取错误结果 if e(converged) { // 保存Beta系数 replace beta = _b[_sigma2] if id==`i' // 计算并保存z统计量 local se = _se[_sigma2] replace z_stat = _b[_sigma2]/`se' if id==`i' // 计算并保存p值(t分布) replace p_value = 2*ttail(e(df_r), abs(z_stat)) if id==`i' } else { // 标记未收敛的个体,方便后续排查 replace beta = . if id==`i' replace z_stat = . if id==`i' replace p_value = . if id==`i' di "警告:个体`i'的回归未收敛,请检查数据或模型设定" } }
三、统计Beta系数的分类数量
用count命令结合条件判断,就能快速统计各类Beta的数量:
* 1. 显著为正(p<0.05 且 beta>0) count if beta>0 & p_value<0.05 local pos_sig = r(N) di "显著为正的Beta数量:`pos_sig'" * 2. 显著为负(p<0.05 且 beta<0) count if beta<0 & p_value<0.05 local neg_sig = r(N) di "显著为负的Beta数量:`neg_sig'" * 3. 不显著为正(p>=0.05 且 beta>0) count if beta>0 & p_value>=0.05 local pos_insig = r(N) di "不显著为正的Beta数量:`pos_insig'" * 4. 不显著为负(p>=0.05 且 beta<0) count if beta<0 & p_value>=0.05 local neg_insig = r(N) di "不显著为负的Beta数量:`neg_insig'" * 5. 未收敛/缺失的个体 count if missing(beta) local missing = r(N) di "未收敛或缺失的Beta数量:`missing'"
额外注意事项
- 你的样本时间跨度是25年(1990-2014),对于GARCH类模型来说样本量偏小,容易出现不收敛的情况,可以考虑调整模型阶数(比如简化为ARCH(1))或者检查个体数据是否存在异常值。
- 显著性水平可以根据需求调整,比如把代码中的
0.05改成0.1或0.01。
内容的提问来源于stack exchange,提问作者Y. LI
相关产品推荐
相关产品推荐

