【问题标题】:R batch forecasting negative valuesR批量预测负值
【发布时间】:2014-01-10 20:58:43
【问题描述】:

我在多个时间序列上运行一个循环。当我收到负面预测时,建议我使用Lambda=0 以严格遵守正面预测。

如果我为 1 个时间序列执行此操作,则效果很好。从我在循环中执行此操作的那一刻起,它就会出错。我收到的错误是:

pegelsresid.C(y, m, init.state, errortype, trendtype, seasontype, : 外部函数调用中的 NA/NaN/Inf (arg 1)

R代码是:

时间序列的数据是:

StartYear<-2011

StartMonth<-1

DataTimeSeries.ts <- ts(DataTimeSeries, frequency = 12,start=c(StartYear,StartMonth))



     1121407 H 650270 14144690 17155531 500054691 H 650230
Jan 2011      17        0        6        8         0        0
Feb 2011       5        0        6        5         0        0
Mar 2011      19        0        2        0         1        3
Apr 2011       7        0        2        3         5        7
May 2011       7        0        3       26         3        5
Jun 2011       3        0        1        1         0        0
Jul 2011      10        3        4        2         0        0
Aug 2011       9        1        3        1         0        0
Sep 2011      14        0        5        8         2        7
Oct 2011      17        0       11        6         1        0
Nov 2011      11        1        2        2         0        0
Dec 2011      75       12      131        0         0        3
Jan 2012      13        1        3        2         1        7
Feb 2012       8        0        5        2         0        0
Mar 2012      14        0        3        4         0        0
Apr 2012       8        0        1        6         0        0
May 2012       8        0        4        2         0        0
Jun 2012      11        0        6        0         0        0
Jul 2012      10        3        5        3         0        0
Aug 2012      10        1        6        5         0        0
Sep 2012      16        0        5        3         0        0
Oct 2012       3        0        2        0         0        0
Nov 2012      14        1        2        2         1        0
Dec 2012      11       46        5        0         1        0
Jan 2013       7        1        1        2         0        2
Feb 2013       9        1        5        2         0        0
Mar 2013      17        0        6        1         0        0
Apr 2013       8        0        3        0         0        0
May 2013      17        2        2        4         0        0
Jun 2013       1        1        2        0         0        0

ns <- ncol(DataTimeSeries.ts)
rows <-nrow(DataTimeSeries.ts)


Forecast <- matrix(NA,nrow=h,ncol=ns)

for(i in 1:ns) 
  Forecast[,i] <- forecast(DataTimeSeries.ts[,i], lambda=0,h=h)$mean

如果我在没有 lambda=0 的情况下运行预测,则预测为(= 负值):

    [,1]       [,2]        [,3]        [,4]       [,5]       [,6]
 [1,]   9.887062  4.4379429   3.1059891  0.24696736 -0.3792315 -0.5448469
 [2,]   8.951653  0.3544301   2.2218957  0.04790458 -0.4395805 -0.6557000
 [3,]  10.787565 -1.8823119   4.6116380 -0.15115820 -0.4999294 -0.7665531
 [4,]  12.802994 -3.9683800   6.5737599 -0.35022098 -0.5602784 -0.8774062
 [5,]   7.916042  0.3676410  -1.0954609 -0.54928376 -0.6206273 -0.9882593
 [6,]  75.723475 26.5071178 117.7545308 -0.74834654 -0.6809763 -1.0991124
 [7,] -23.604058 -1.3480372 -26.4102628 -0.94740932 -0.7413252 -1.2099654
 [8,]   6.693199  3.0567211   4.2765418 -1.14647211 -0.8016742 -1.3208185
 [9,]  16.689538  0.5293152   2.0234525 -1.34553489 -0.8620231 -1.4316716
[10,]   5.771219 -0.9780367   0.9339003 -1.54459767 -0.9223721 -1.5425247
[11,]   9.055315  2.4255619   2.2734174 -1.74366045 -0.9827210 -1.6533778
[12,]   4.120385  2.5818660   1.9924763 -1.94272323 -1.0430700 -1.7642308

有人可以帮我解决这个问题吗?

好的,谢谢你的信息,我现在适当地添加了数据和代码。

【问题讨论】:

  • 您能否提供您的问题的最低工作示例?特别是,您能否提供可在 R 控制台中运行的代码来演示您的问题?
  • Dataframe 如下所示:
  • 格式搞砸了。如果您选择整个数据范围并单击编辑窗口工具栏上的“{}”按钮,它应该可以解决它...
  • 好的,谢谢您的信息。我更改了数据和代码以使格式正确。

标签: r batch-processing forecasting


【解决方案1】:

您的数据包含零,您不能取零的对数。

您可以在进行转换之前向所有数据添加一个小的正常数,然后从预测中删除该常数。

【讨论】:

  • 是否可以将例如 0.000001 添加到所有历史记录(也是非零),并在预测之后再次从历史记录中删除它。我认为这是预测的最佳方式。如果该值足够小,我认为不需要更正预测?
  • 在这种情况下自动定义 lambda 是不是一个好方法:Lambda[,i]
  • 很抱歉投反对票,但这个建议很危险。如果所有观察结果都是肯定的,ets()(我使用的是forecast 8.2)可以拟合乘法模型,并且这些可以利用起来产生爆炸性的预测。有人在这里发现了这一点:Extreme peaks if forecasting slow movers。使用专用方法预测间歇性需求要好得多(是的,我知道Croston's method has problems)。
猜你喜欢
  • 2017-10-15
  • 1970-01-01
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 2015-04-12
  • 1970-01-01
  • 2021-11-19
  • 1970-01-01
相关资源
最近更新 更多