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

Stata实现ARMA时间序列蒙特卡洛模拟代码问题求助

代码问题修正思路
  • 内层循环中每次迭代都执行drop e y1,导致循环结束后无有效y1变量,无法计算均值和方差
  • 原代码每次循环仅生成当期扰动项e,滞后1期、2期的e无法正确调取,导致ARMA的MA项计算完全错误
  • 无需额外定义矩阵存储每一条时间序列的全部观测值,直接对生成的300期序列计算统计量存入结果矩阵即可,可大幅提升运行效率
  • 存在变量重复定义问题:gen e = rnormal(0,1)在循环中重复执行会报错,gen命令无法重复创建已存在的变量,应该提前预生成变量,循环内用replace赋值
修正后可运行完整代码
clear all
set more off
set seed 1234 // 设置随机种子保证结果可复现
set matsize 1000
* 结果矩阵:1000行对应1000次模拟,2列分别存储每次模拟的均值、方差
matrix simulaciones = J(1000,2,.) 

* 提前生成时间框架,避免循环内重复操作降低效率
set obs 300
gen t = _n
tsset t
gen y1 = . // 预生成存储模拟时间序列的变量
gen e = . // 预生成存储正态扰动项的变量

forvalue j = 1(1)1000{
    * 一次性生成当前模拟全部300期的扰动项
    replace e = rnormal(0,1)
    
    * 逐期计算ARMA(2,2)序列值
    replace y1 = e in 1 // t=1无滞后项
    replace y1 = 0.7*L.y1 + e - 0.6*L.e in 2 // t=2仅存在1阶滞后项
    replace y1 = 0.7*L.y1 - 0.1*L2.y1 + e - 0.6*L.e + 0.08*L2.e in 3/300 // t>=3使用完整ARMA(2,2)公式
    
    * 存储当前模拟的统计量,sum加meanonly选项可大幅提升运行速度
    sum y1, meanonly
    matrix simulaciones[`j',1] = r(mean)
    matrix simulaciones[`j',2] = r(Var)
}

* 可选操作:将结果矩阵转为数据集直接查看
svmat simulaciones, names(mean var)

内容的提问来源于stack exchange,提问作者Juan Guillermo Michelsen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:39:02