You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:53:41