在HTS R中创建分层数据结构,节点

时间:2014-06-12 18:32:40

标签: r time-series hierarchy hierarchical-data forecasting

我正在尝试使用R中的HTS包创建节点结构。关于节点的文档是稀疏的,因此尝试适当地编码节点结构是困难的并且添加添加的层我试图创建两个层次结构我们在其中我们有以下内容:

(等级1 - 地理:例如美国特拉华州及其县)

=> 10000
    => 10001 
    => 10003          
    => 10005
    => 10999

(层次2 - 行业:简化)

=> 10
     => 11
     => 12 
     => 21 
     => 22 
     => 31
     ...
     => 99

编辑2 - 更正了层次结构并进一步澄清

所以每个时间序列都有一个地理代码和一个行业代码。地理代码遵循一个层次结构,行业代码另一个(如上所示)。

我试图找出如何指定"节点"用于表示两个层次结构的关系的参数(文档示例仅显示单个层次结构)。

当两个层次结构相互作用时,我们会获得更多关卡。假设只有2个行业,11和12,我们可以简化。由(10001,11)和(10001,12)确定的时间序列必须加起来(10001,10);而且,(10001,11)......(10999,11)必须加起来(10000,11)等等。再次,这些是简化的层次结构 - 在实际数据中有更多层次。

问题是,"节点"参数看起来像两个层次结构?希望这会有所帮助。

1 个答案:

答案 0 :(得分:9)

你的符号(可能不是你的选择)使这个让人非常困惑。似乎相同的数字序列可以指代一个县或一个行业。

但是,基本思想足够清晰:您有两个层次结构,并且您希望将两种类型的聚合都考虑在内。这是一个使用我自己的符号使其更清晰的例子。

假设有两个州分别有四个和五个县,两个行业分别有三个和两个子行业。所以有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

为了让我们有一个可重现的例子,我将随机创建y

y <- ts(matrix(rnorm(900),ncol=45,nrow=20))

然后我们可以为这个矩阵的列构建标签,如下所示:

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

例如,矩阵中的第一个系列名称为"A1Xa",表示状态A,县1,行业X,子行业a。

然后我们可以使用

轻松创建分组的时间序列对象
gy <- gts(y, characters=list(c(1,1),c(1,1)))

characters参数表示有两个层次结构(列表中有两个元素),第一个层次结构由前两个字符指定,第二个层次结构由后两个字符指定。

gts包的v4.3中hts的帮助文件中给出了一个稍微复杂但类似的示例(标签各占一个字符)。

可以在不使用列标签的情况下指定分组结构。然后,您必须指定组矩阵,该矩阵定义了哪些聚合是感兴趣的。在上面的示例中,组矩阵由

给出
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
)

然后

gy <- gts(y, groups=gps)

使用characters参数的列名方法要容易得多,因为构建所有这些跨产品行会让人感到困惑。