j r*_*iot 6 r time-series hierarchy hierarchical-data forecasting
我正在尝试使用R中的HTS包创建节点结构.有关节点的文档很稀疏,因此尝试对节点结构进行适当的编码很困难,并添加一个添加的层我试图创建两个层次结构,我们在其中拥有下列:
(层次1 - 地理:例子是美国特拉华州及其县)
=> 10000
=> 10001
=> 10003
=> 10005
=> 10999
Run Code Online (Sandbox Code Playgroud)
(层次结构2 - 行业:简化)
=> 10
=> 11
=> 12
=> 21
=> 22
=> 31
...
=> 99
Run Code Online (Sandbox Code Playgroud)
编辑2 - 更正的层次结构和进一步的说明
所以每个时间序列都有一个地理代码和一个行业代码.地理代码遵循一个层次结构,行业代码另一个(如上所示).
我试图弄清楚如何指定"nodes"参数来表示两个层次结构的关系(文档示例仅显示单个层次结构).
当两个层次结构相互作用时,我们会获得更多级别.假设只有2个行业,11和12,我们简化.由(10001,11)和(10001,12)确定的时间序列必须加起来(10001,10); 而且,(10001,11)...(10999,11)必须加起来(10000,11)等等.再次,这些是简化的层次结构 - 在实际数据中有更多的层次.
问题是,两个层次结构的"节点"参数如何?希望这可以帮助.
你的符号(可能不是你的选择)使这非常令人困惑.看起来相同的数字序列可以指代一个县或一个行业.
但是,基本思想足够清晰:您有两个层次结构,并且您希望将两种类型的聚合都考虑在内.这是一个使用我自己的符号使其更清晰的例子.
假设有两个州分别有四个和五个县,两个行业分别有三个和两个子行业.所以有9x5系列处于最分散的水平(子行业x县组合).我将调用状态A和B,以及县A1,A2,A3,A4和B1,B2,B3,B4,B5.我将分别用子行业Xa,Xb,Xc和Ya,Yb称行业X和Y. 假设您在矩阵中具有底层级别(分解程度最高的级别),y每个系列有一列,并且列按以下顺序排列:
County A1, industry Xa
County A1, industry Xb
County A1, industry Xc
County A1, industry Ya
County A1, industry Yb
County A2, industry Xa
County A2, industry Xb
County A2, industry Xc
County A2, industry Ya
County A2, industry Yb
...
County B5, industry Xa
County B5, industry Xb
County B5, industry Xc
County B5, industry Ya
County B5, industry Yb
Run Code Online (Sandbox Code Playgroud)
为了让我们有一个可重复的例子,我将y随机创建:
y <- ts(matrix(rnorm(900),ncol=45,nrow=20))
Run Code Online (Sandbox Code Playgroud)
然后我们可以为这个矩阵的列构建标签,如下所示:
blnames <- paste(c(rep("A",20),rep("B",25)), # State
rep(1:9,each=5), # County
rep(c("X","X","X","Y","Y"),9), # Industry
rep(c("a","b","c","a","b"),9), # Sub-industry
sep="")
colnames(y) <- blnames
Run Code Online (Sandbox Code Playgroud)
例如,矩阵中的第一个系列的名称"A1Xa"意为状态A,县1,工业X,子行业a.
然后,我们可以使用轻松创建分组的时间序列对象
gy <- gts(y, characters=list(c(1,1),c(1,1)))
Run Code Online (Sandbox Code Playgroud)
该characters参数指示有两个层次结构(列表中两个元素),以及由所述第一两个字符中指定的第一层次,与由第二两个字符中指定的第二层.
gts在hts包的v4.3 的帮助文件中给出了一个稍微复杂但类似的示例(标签各占一个字符).
可以在不使用列标签的情况下指定分组结构.然后,您必须指定组矩阵,该矩阵定义了哪些聚合是感兴趣的.在上面的例子中,组矩阵由下式给出
gps <- rbind(
c(rep(1,20),rep(2,25)), # State
rep(1:9,each=5), # County
rep(c(1,1,1,2,2),9), # Industry
rep(1:5, 9), # Sub-industry
c(rep(c(1,1,1,2,2),4),rep(c(3,3,3,4,4),5)), # State x industry
c(rep(1:5, 4),rep(6:10, 5)), # State x Sub-industry
rep(1:18, rep(c(3,2),9)) # County x industry
)
Run Code Online (Sandbox Code Playgroud)
然后
gy <- gts(y, groups=gps)
Run Code Online (Sandbox Code Playgroud)
使用characters参数列名称方法要容易得多,因为构建所有这些跨产品行会让人感到困惑.