R语言绘制GARCH模型图横轴显示观测序号而非日期如何解决
问题根源
你当前使用的plot.ts()是R中针对ts类型时间序列的内置绘图函数,代码中手动将拟合得到的波动率、拟合值转为ts对象时,没有绑定对应的日期索引,函数默认会以从1开始的观测序号作为横轴刻度,这个问题和CSV源文件本身的字段设置没有直接关系。
R环境原生解决方案
不需要安装第三方拓展包,按以下步骤操作即可:
首先在R环境内完成日期格式转换,不要依赖外部文件的字段属性
读入数据时直接将日期列转为R内置的Date类型,参考代码:# 替换成你自己的CSV文件路径,根据日期实际存储格式调整format参数 df <- read.csv("你的数据文件路径.csv") # 假设日期列名为date,存储格式为"年-月-日"(如2020-01-02)就用如下转换规则 df$date <- as.Date(df$date, format = "%Y-%m-%d")注意:要保证日期序列的长度和你传入
ugarchfit的收益率序列r_SW长度完全对应。选择以下任意一种原生绘图方式即可显示日期横轴:
- 方式一(推荐,适配所有时间间隔场景):直接用基础
plot()函数手动指定x轴为日期向量
# 绘制拟合收益率图 plot(x = df$date, y = SWA_fit@fit$fitted.values, type = "l", # 指定为线图 xlab = "交易日期", ylab = "拟合收益率", main = "GARCH模型拟合收益率序列") # 绘制波动率(条件方差)图 plot(x = df$date, y = SWA_fit@fit$sigma^2, type = "l", xlab = "交易日期", ylab = "条件方差", main = "GARCH模型拟合波动率")如果模型因为AR项、GARCH阶数设置丢失了前几期观测值,记得把日期向量对应去掉前N个观测再传入,比如AR(1)滞后丢失1期观测,就把x参数换成
df$date[-1],避免数据和日期错位。- 方式二(仅适用于固定间隔规整时间序列):创建
ts对象时绑定时间起始点和频率
# 以自然日度数据为例,起始日期取样本首日,frequency按实际间隔设置:日度用365、月度用12、季度用4 start_year <- as.numeric(format(min(df$date), "%Y")) start_day <- as.numeric(format(min(df$date), "%j")) # 取首日在当年的天数序号 SWA_hhat <- ts(SWA_fit@fit$sigma^2, start = c(start_year, start_day), frequency = 365) plot.ts(SWA_hhat, xlab = "日期", ylab = "条件方差", main = "GARCH模型拟合波动率")- 方式一(推荐,适配所有时间间隔场景):直接用基础
内容的提问来源于stack exchange,提问作者Billy
相关产品推荐
相关产品推荐

