Создание иерархической структуры данных, узлов в HTS R


Я пытаюсь создать структуру узлов, используя пакет HTS в R. документация, касающаяся узлов, разрежена, поэтому попытка кодировать структуру узлов соответствующим образом затруднена, и для добавления дополнительного слоя я пытаюсь создать две иерархии, в которых мы имеем следующее:

(иерархия 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 6

1 ответ:

Ваша нотация (которая может быть не вашим выбором) делает это очень запутанным. Похоже, что одна и та же числовая последовательность может относиться как к округу, так и к отрасли.

Однако основная идея достаточно ясна: у вас есть две иерархии, и вы хотите, чтобы учитывались оба типа агрегации. Вот пример использования моей собственной нотации, чтобы сделать его более ясным. Предположим, что существуют два штата с четырьмя и пятью округами соответственно, а также две отрасли промышленности с тремя и две подотрасли соответственно. Таким образом, существуют серии 9x5 на самом дезагрегированном уровне (комбинации подотраслей x графств). Я буду называть Штаты A и B, а округа A1,A2,A3,A4 и B1,B2,B3,B4, B5. Я буду называть отрасли X и Y с субиндустриями Xa,Xb,Xc и Ya, Yb соответственно. Предположим, что у вас есть ряд нижнего уровня (наиболее дезагрегированный уровень) в матрице 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", означающее штат а, округ 1, отрасль х, подотрасль А.

Затем мы можем легко создать сгруппированный объект временного ряда, используя

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, поскольку построение всех этих строк кросс-продукта может привести к путанице.