R语言HTS分层时间序列建模如何正确指定层级与节点数
R语言hts包分层时间序列层级配置方案
场景需求
- 已生成月度时间序列对象,转换代码如下:
myts <- ts(df,start = c(2014,1),end = c(2022,5),frequency = 12) - 目标层级结构:顶层为
exi、new两列的聚合总量,第一层为exi、new两个独立序列 - 原有错误写法:
# 该写法不符合characters参数规则,无法生成正确层级 y <- hts(myts, characters = c(3,0) )
正确实现方式
方法1:通过nodes参数配置(推荐,无需修改原始数据)
nodes参数直接按从顶层到下层的顺序,指定每一层的节点数量即可。你的结构仅包含1层下层节点,节点数为2,直接运行以下代码:
library(hts) # list(2)代表顶层下共挂载2个一级节点,自动匹配myts的两列顺序 y <- hts(myts, nodes = list(2))
运行后可通过aggts(y)查看各层级聚合值,第一列为总量,后两列依次为原exi、new序列,符合聚合要求。
方法2:通过characters参数配置(需调整列名)
characters参数仅适用于列名自带层级编码的场景,规则是按顺序传入每一层编码占用的字符长度。你当前的列名exi、new无层级前缀,无法直接使用该参数,如需使用需先改造列名:
# 给两个列名加相同的1位顶层编码(例如"T"),列名变为"Texi"、"Tnew" colnames(myts) <- c("Texi", "Tnew") # c(1,3)代表第1层(顶层)编码占1个字符,第2层(原exi/new层)编码占3个字符 y <- hts(myts, characters = c(1,3))
参数规则说明
- 之前写的
c(3,0)不符合规则:参数值不能为0,0代表不存在对应层级,无法识别出顶层聚合结构 - 简单两层结构优先用
nodes参数,逻辑更直观,不需要调整原始列名 - 3层及以上、且列名自带固定长度层级编码的场景,再考虑用
characters参数简化配置
内容的提问来源于stack exchange,提问作者jsjoden
相关产品推荐
相关产品推荐

