将CausalImpact包与Zoo对象

时间:2017-04-14 17:16:47

标签: r time-series zoo causality

我试图使用CausalImpact包模拟风暴对销售模式的影响。当我创建一个zoo对象并将其传递给模型时,我收到一个错误。我已经阅读了文档,无法弄清楚我的做法与文档中的示例有何不同。

我正在使用以下data.frame:

> head(my.data)
        date    sales    units
1 2014-10-17 71319.85 21436.64
2 2014-10-18 88598.26 26755.79
3 2014-10-19 95768.29 29823.86
4 2014-10-20 62303.04 19417.71
5 2014-10-21 56477.57 17562.21
6 2014-10-22 54890.39 16946.43

然后我将其转换为动物园对象:

my.data<- zoo( my.data[ ,c('sales','units')], my.data[,'date'] )

> str(my.data)
‘zoo’ series from 2014-10-17 to 2017-04-13
  Data: num [1:907, 1:2] 71320 88598 95768 62303 56478 ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:2] "sales" "units"
  Index:  Date[1:907], format: "2014-10-17" "2014-10-18" "2014-10-19" ...

然后我设置前后期并运行模型:

pre.period <- as.Date(c('2015-10-17','2017-03-09'))
post.period <- as.Date(c('2017-03-10','2017-04-13'))

library(CausalImpact)
impact<- CausalImpact(data = my.data, pre.period = pre.period, post.period = post.period, alpha = .01)

但是我收到了这个错误:

> impact<- CausalImpact(data = my.data, pre.period = pre.period, post.period = post.period, alpha = .05)
Error in bsts(formula, data = data, state.specification = ss, expected.model.size = kStaticRegressionExpectedModelSize,  : 
  Caught exception with the following error message: 
BregVsSampler did not start with a legal configuration.
Selector vector:  11
beta: 0 0

我已成功使用此套餐包含单变量时间序列数据,但无法确定为什么这不起作用。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

在应用最近的软件包更新(包括CausalImpact)后,我遇到了同样的问题。以前一切都很好。

虽然我没有确切的原因/解决方案,但我发现了一些可能对你有用的东西。

在我的数据中,我尝试用测试序列简单地替换zoo对象中的日期。所以在你的情况下它会是这样的:

time.pts <- seq.Date(as.Date("2014-10-17"), by = 1, length.out = 907)
my.data<- zoo( my.data[ ,c('sales','units')], time.pts )

执行此操作后,未发生“BregVsSampler”异常。所以我认为问题必须与日期有关,然后将我的原始日期系列放回动物园对象中。然后我注意到我在pre.period和post.period之间存在差距,即看到下面3/9和3/20之间的差距:

pre.period <- as.Date(c('2015-10-17','2017-03-09'))
post.period <- as.Date(c('2017-03-20','2017-04-13'))

当我调整前/后期以消除日期中的差距时,问题再次消失。

虽然您在上面显示的代码中似乎没有这样的差距,但您可能希望查看日期系列中的任何不一致和/或尝试不同的日期范围。显然某个地方有一个需要修复的错误,但上述信息可能会帮助您解决过渡期间的问题。