В последней версии пакета hts для R теперь можно относительно легко указывать довольно сложные структуры группировки.
Все структуры агрегации могут быть представлены в виде иерархий или как перекрестные продукты иерархий. Например, иерархический временной ряд может быть основан на географии: страна, штат, регион, магазин. Часто существует также отдельная иерархия продуктов: группы продуктов, типы продуктов, размер пакета. Требуются прогнозы для всех различных типов агрегации; например, тип продукта A в области X. Структура агрегации является перекрестным продуктом двух иерархий.
Эта структура включает даже явно неиерархические данные: рассмотрим простой случай временного ряда смертей, разделенных по полу и состоянию. Мы можем рассматривать пол и государство как две очень простые иерархии, каждая из которых имеет только один уровень. Затем мы хотим предсказать совокупности всех комбинаций двух иерархий.
Таким образом можно объединить любое количество отдельных иерархий. Неиерархические факторы, такие как пол, могут рассматриваться как одноуровневые иерархии.
Пакет hts хранит данные только на нижнем (наиболее дезагрегированном) уровне и записывает информацию о различных типах агрегатов, которые представляют интерес. Функция hts () подходит для отдельной иерархии (т. Е. Строго иерархических данных). Более сложные структуры агрегации можно указать с помощью более общей функции gts ().
Вот пример, основанный на вопросе, заданном на stackoverflow . Проблема включает в себя географическую иерархию и иерархию промышленной классификации.
Предположим, что есть два штата с четырьмя и пятью округами соответственно, и две отрасли с тремя и двумя подотраслями соответственно. Таким образом, существует ряд 9×5 на самом дезагрегированном уровне (комбинации подотраслей и округов). Я назову штаты А и В, а также округа А1, А2, А3, А4 и В1, В2, В3, В4, В5. Я назову отрасли 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)))
Только ряды нижнего уровня содержатся в y
. Вид characters
аргумента, какие скопления представляют интерес. В этом случае characters
аргумент указывает, что есть две иерархии (два элемента в списке), и первая иерархия указывается первыми двумя символами, а вторая иерархия указывается следующими двумя символами. Каждый уровень каждой иерархии указывается с использованием одного символа (отсюда 1).
Немного более сложный, но аналогичный пример (с метками, принимающими более одного символа каждая) приведен в файле справки для 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
аргумента в том, что кросс-продукты обрабатываются для вас. Кроме того, если ваши данные уже содержат полезные имена столбцов, которые можно интерпретировать как указывающие уровни одной или нескольких иерархий, то на самом деле ничего не остается сделать, кроме как выяснить, каким characters
должен быть аргумент.
Как только gts
объект был создан с помощью gts()
функции, вы можете перейти к прогнозу. Например
fc <- forecast(gy)
будет генерировать прогнозы для всех рядов нижнего уровня и всех совокупных рядов, указанных в обращении к gts()
. Затем он будет согласовывать прогнозы до тех пор, пока они не будут суммированы для всех указанных агрегаций, и, наконец, вернет только согласованный ряд нижнего уровня. Примиренные агрегированные ряды могут быть легко построены из них, когда они необходимы.