R中ts()的合适频率与起止日期设置及ARIMA-GARCH技术问题
问题
我有如下数据集,希望将其转换为时间序列对象以用于auto.arima预测:
head(df) total_score return 1539 121.77 1074 422.18 901 -229.79 843 96.30 1101 -55.25 961 -48.28
该数据集共13104行,每行代表一小时的推特情感评分与BTC收益,第一行对应2021-01-01 00:00,第二行对应2021-01-01 01:00,以此类推至2022-06-30 23:00(经核算该时间区间共13104小时,数据行数匹配)。
请问:
- 如何设置
ts()函数以适配auto.arima的预测需求? - 已知
auto.arima要求误差同方差,但我的数据存在异方差,因此考虑使用GARCH模型。若auto.arima选定的阶数为(2,0,0),是否意味着对应的GARCH模型阶数应为(0,0,2)?
附:我仍困惑为何我的数据看似平稳,我原本认为加密货币(包括其收益)大概率是非平稳的,不过这个问题留待后续处理。
解答
1. 使用ts()创建适配auto.arima的时间序列对象
由于你的数据是小时频率(每天24个观测),且起始时间为2021-01-01 00:00,可以通过以下参数设置ts()函数:
# 以BTC收益列为例,创建时间序列对象 ts_return <- ts( data = df$return, start = c(2021, 1), # 第二个元素代表2021年的第1天(即1月1日) frequency = 24 # 每天24个观测,对应小时频率 )
frequency=24:指定单位时间(天)内的观测数量,确保auto.arima能识别小时级别的周期性。- 若需要更直观的时间轴标签,也可以使用
xts或zoo包创建时间序列(auto.arima同样支持这类对象):
library(xts) # 创建带精准时间戳的xts对象 dates <- seq(as.POSIXct("2021-01-01 00:00"), as.POSIXct("2022-06-30 23:00"), by = "hour") xts_return <- xts(df$return, order.by = dates)
2. ARIMA与GARCH阶数的关系
两者阶数没有直接对应关系:
auto.arima选定的(2,0,0)是均值方程的AR(2)模型,描述的是收益序列自身的线性依赖关系;- GARCH模型针对的是方差方程,用于捕捉异方差性,其阶数(GARCH(p,q)中的p和q)需要通过分析ARIMA模型的残差来确定:
- 先拟合ARIMA(2,0,0)模型,提取残差;
- 对残差进行ARCH LM检验,确认异方差的显著性;
- 观察残差平方的ACF和PACF图,选择合适的p(GARCH项阶数)和q(ARCH项阶数)。
你提到的(0,0,2)是MA(2)模型,和GARCH阶数逻辑完全不同,不能直接从ARIMA阶数推导。
关于加密货币收益平稳性的补充
加密货币的价格序列通常是非平稳的(符合随机游走特征),但收益序列(价格的差分/变化量)大多是平稳的——这是金融时间序列的普遍特征,因为收益反映的是价格的相对波动,而非绝对水平,所以你的收益序列平稳是正常现象。
内容的提问来源于stack exchange,提问作者A. Jahanyar
相关产品推荐
相关产品推荐

