【问题标题】:Creating Hierachical-Data Structure, Nodes in HTS R在 HTSR 中创建分层数据结构和节点
【发布时间】:2014-08-03 04:47:27
【问题描述】:

我正在尝试使用 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) 等等。同样,这些都是简化的层次结构 - 在真实数据中还有更多的层次。

问题是,对于 两个 层次结构,“nodes”参数看起来如何?希望这会有所帮助。

【问题讨论】:

  • 不清楚您用来创建层次结构的源数据是什么。是像“100002”级别的长数字和像“10”样本或观察值这样的更小的ID。您似乎在多个组中重复观察,hts 似乎不允许这样做。每个值必须恰好属于一个节点。您能否编辑您的问题以更清楚地说明您的输入和所需输出是什么?

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


【解决方案1】:

您的符号(可能不是您的选择)使这变得非常混乱。似乎相同的数字序列可以指代一个县或一个行业。

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

假设有两个州分别有四个和五个县,两个行业分别有三个和两个子行业。因此,在最细分的级别(子行业 x 县组合)有 9x5 系列。我将调用州 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 参数表示有两个层次结构(列表中的两个元素),第一个层次结构由前两个字符指定,第二个层次结构由后两个字符指定。

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

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

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 参数的列名方法要容易得多,因为构造所有这些交叉乘积行可能会令人困惑。

【讨论】:

猜你喜欢
  • 2021-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多