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

R语言中TGARCH模型波动率与时间序列叠加绘图故障排查

问题原因与解决办法

核心问题

你的代码存在两个关键问题,导致波动率曲线无法正常显示:

  1. 数值量级严重不匹配:你绘制的ts_data是资产价格序列,而vol是模型输出的波动率(sigma的平方),两者数值差距极大,波动率曲线会被压缩到图表底部几乎不可见。
  2. 时间轴可能未对齐:vol基于dl_data拟合生成,若ts_data与dl_data的时间范围、频率不一致,lines()函数无法正确定位绘制曲线。

解决步骤

步骤1:计算对应维度的实际波动率

GARCH模型拟合的是收益率的波动率,因此你需要从价格序列计算实际波动率(而非直接用原始价格),比如用对数收益率的平方(和模型输出的sigma^2对应):

# 从价格序列计算对数收益率
returns <- diff(log(ts_data))
# 用收益率平方表示实际波动率,和模型输出维度匹配
actual_vol <- returns^2
# 去掉差分后产生的第一个NA值,保证序列长度一致
actual_vol <- actual_vol[-1]

步骤2:修正绘图代码

将实际波动率与模型波动率放在同一量级下绘图,同时确保时间轴完全对齐:

# 先绘制实际波动率曲线
plot(actual_vol, type = "l", col = "blue", ylab = "Volatility", xlab = "Time", 
     main = "Actual vs Model Predicted Volatility")
# 叠加模型波动率曲线
lines(vol, col = "red")
# 添加图例
legend("topright", legend = c("Actual Volatility", "Model Predicted Volatility"), 
       col = c("blue", "red"), lty = 1)

可选:双Y轴同时展示价格与波动率

如果一定要同时对比价格和波动率,可使用双Y轴绘图:

# 绘制价格序列(左Y轴)
plot(ts_data, type = "l", col = "blue", ylab = "Price", xlab = "Time", 
     main = "Price vs Model Predicted Volatility")
# 开启双Y轴模式
par(new = TRUE)
# 绘制波动率曲线,关闭重复坐标轴
plot(vol, type = "l", col = "red", ylab = "", xlab = "", axes = FALSE)
# 添加右侧Y轴刻度与标签
axis(side = 4, col = "red")
mtext("Volatility", side = 4, line = 3, col = "red")
# 添加图例
legend("topright", legend = c("Price", "Model Predicted Volatility"), 
       col = c("blue", "red"), lty = 1)

额外检查项

  • 用length(vol)和length(actual_vol)确认两个序列长度一致,若不一致,调整vol生成时的start/end参数,使其与ts_data的时间范围匹配。

内容的提问来源于stack exchange,提问作者dovexz12323

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 21:22:19