首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于GTS的分层数据预测

基于GTS的分层数据预测
EN

Stack Overflow用户
提问于 2015-08-31 21:36:44
回答 2查看 936关注 0票数 1

在使用GTS指定两个层次结构组时,我遇到了一个错误。错误是:

colnames<-中的错误(*tmp*,value =unlist(标签级别)): “名”2的长度不等于数组范围

我用下面的代码重新创建了这个问题。在本例中,有两个层次结构: State/County和industry/Sub industry/product。在本例中,州/县是常量--在我的实际数据集中,这可能是正确的,也可能不是。

代码语言:javascript
复制
y3 <- ts(matrix(rnorm(25),ncol=5,nrow=5))
blnames3 <- paste(rep("CA",5), # State
              rep("AL",5), # County
              rep("O",5), # Industry
              c("P","Q","Q","P","R"), # Sub-industry
              c("514","807","514","807","807"), # product
              sep="")
colnames(y3) <- blnames3
head(y3)

gy3 <- gts(y3, characters=list(c(2,2),c(1,1,3)))
fc3 <- forecast(gy3, h = 6, method = "comb", fmethod="ets")

如果使用不同的方法(如bu ),则预测函数将成功返回,但任何后续操作(如allts )都会失败,但也会出现相同的错误。

代码语言:javascript
复制
fc3 <- forecast(gy3, h = 6, method = "bu", fmethod="ets")
allts(fc3)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-01 01:23:29

我已经使用过gts几次了,但不要声称知道包的所有内容。但希望这能帮上忙。

我认为正在发生的事情是,您的gts对象正在指定数据中不存在的层次结构。列表中的第一个向量是c(2,2),它指示州/县是层次结构级别。然而,所有的州和县在您的数据中都是相同的,所以这并不是一个真正的层次结构。

然后,您的第二个层次结构由c(1,1,3)组成,但是Industry总是不变的,只剩下子工业Product更改。

总之,这看起来不像一个分层系列。我注意到gy3中的标签有很多NA的。

代码语言:javascript
复制
gy3$labels
$G1
[1] "G1/CA"

$<NA>
[1] "G1/CAAL"

$<NA>
[1] "G1/O"

$<NA>
[1] "G1/OP" "G1/OQ" "G1/OR"

$<NA>
[1] "G1/OP514" "G1/OQ807" "G1/OQ514" "G1/OP807" "G1/OR807"

$<NA>
[1] "G1/CAO"

$<NA>
[1] "G1/CAOP" "G1/CAOQ" "G1/CAOR"

$<NA>
[1] "G1/CAOP514" "G1/CAOQ807" "G1/CAOQ514" "G1/CAOP807" "G1/CAOR807"

$<NA>
[1] "G1/CAALO"

$<NA>
[1] "G1/CAALOP" "G1/CAALOQ" "G1/CAALOR"

通过代码进行跟踪,这似乎会导致aggts出现问题。

代码语言:javascript
复制
aggts(gy3)
Error in `colnames<-`(`*tmp*`, value = unlist(labels[levels])) : 
length of 'dimnames' [2] not equal to array extent

当您指定一个需要分层序列的aggts方法时,会调用combbu不会失败,因为它是自下而上的,不需要层次结构。

长话短说,纠正代码的一种方法是指定一个c(6, 3)向量,该向量包含一个组中的子行业和另一个组中的产品。

代码语言:javascript
复制
gy3 <- gts(y3, characters=c(6, 3))
fc3 <- forecast(gy3, h = 6, method = "comb", fmethod="ets")  
fc3
Grouped Time Series 
4 Levels 
Number of groups at each level: 1 3 2 5 
Total number of series: 11 
Number of observations in each historical series: 5 
Number of forecasts per series: 6 
Top level series of forecasts: 
Time Series:
Start = 6 
End = 11 
Frequency = 1 
[1] -0.5835628 -0.5835628 -0.5835628 -0.5835628 -0.5835628 -0.5835628

这个也能用

代码语言:javascript
复制
fc3 <- forecast(gy3, h = 6, method = "bu", fmethod="ets")
allts(fc3)
Time Series:
Start = 6 
End = 11 
Frequency = 1 
        Total G1/CAALOP  G1/CAALOQ G1/CAALOR      G2/514     G2/807 CAALOP514  CAALOQ807  CAALOQ514  CAALOP807 CAALOR807
 6 -0.6227325 0.0344344 -0.8919916 0.2348247 -0.02331766 -0.5994149 0.2459208 -0.6227531 -0.2692384 -0.2114864 0.2348247
 7 -0.6227325 0.0344344 -0.8919916 0.2348247 -0.02331766 -0.5994149 0.2459208 -0.6227531 -0.2692384 -0.2114864 0.2348247
 8 -0.6227325 0.0344344 -0.8919916 0.2348247 -0.02331766 -0.5994149 0.2459208 -0.6227531 -0.2692384 -0.2114864 0.2348247
 9 -0.6227325 0.0344344 -0.8919916 0.2348247 -0.02331766 -0.5994149 0.2459208 -0.6227531 -0.2692384 -0.2114864 0.2348247
10 -0.6227325 0.0344344 -0.8919916 0.2348247 -0.02331766 -0.5994149 0.2459208 -0.6227531 -0.2692384 -0.2114864 0.2348247
11 -0.6227325 0.0344344 -0.8919916 0.2348247 -0.02331766 -0.5994149 0.2459208 -0.6227531 -0.2692384 -0.2114864 0.2348247
票数 4
EN

Stack Overflow用户

发布于 2015-09-01 02:37:38

示例中的blnames3被指定为错误。只有一个州和一个县给出了列名,这不能形成层次结构。您需要提供至少两个州和另外两个县来构建分组时间序列。

据我所知,您已经看到了罗布职位关于如何在gts()函数中指定characters参数。现在,我在基于Rob的示例的基础上,将一个名为"Product"的级别添加到行业/子行业层次结构中。

下面的代码表明,有两个州各有两个县,两个行业分别由三个和两个分行业组成。此外,每个子行业生产四种产品.

代码语言:javascript
复制
y3 <- ts(matrix(rnorm(300),ncol=60,nrow=5))
blnames3 <- paste0(rep(c("CA", "NY"), each = 30), # State
               rep(c("AL", "LA", "CL", "ES"), each = 15), # County
               rep(c("O", "O", "O", "C", "C"), 12), # Industry
               rep(c("p", "q", "r", "p", "q"), 12),  # Sub-industry
               rep(504:507, 15)) # Product
colnames(y3) <- blnames3

gy3 <- gts(y3, characters=list(c(2,2),c(1,1,3)))
fc3 <- forecast(gy3, h = 6, method = "comb", fmethod="ets")
aggts(fc3)

希望能帮上点忙。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32320357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档