使用 Google 因果影响包评估计划干预的重要性

机器算法验证 r 干预分析 因果关系
2022-03-19 19:22:57

我正在使用 R 中的因果影响包来推断干预对一些高度相关和季节性的数据的因果影响。

具体来说,我得到了 17 天的每小时数据,干预发生在第 13 天结束时。我有两个完全不受干预影响的控制数据集(线性相关性为 0.708 和 0.701)和包含干预的数据集(又名“治疗”)

一段数据可以在 这里找到

我的代码如下

days <- 4
daily.obser <- days*24
data.1 <- cbind(treated.signal.3n,the.control.3,the.control.2)
data.1 <- data.1[1:((length(bsl)+1)+daily.obser), ] #check the required amount of data only 

matplot(data.1, type = "l",col = c(2,4,9))
legend("bottomright", inset=.05, legend=c("Treated Zone", "Control Zone 1", "Control Zone 2"), pch=1, col=c(2,4,9), horiz=TRUE)

preperiod <- c(1,length(bsl))
postperiod <- c((length(bsl)+1),(length(bsl)+1+daily.obs))
prior.level.sd.level <- 0.01

imp.1 <- CausalImpact(data.1, pre.period = preperiod, post.period = postperiod, 
         model.args = list(niter = 2500,nseasons=17, season.duration = 24, 
         dynamic.regression = FALSE, prior.level.sd =prior.level.sd.level,standardize.data = TRUE))

summary(imp.1)
plot(imp.1,c("original","pointwise"))
summary(imp.1,"report")

我的问题是:

我已经阅读了这篇论文,并且在某些时候它正在谈论方差的先验分布。prior.level.sd根据我的数据,我不明白我应该将参数设置为什么。

我面临的另一个问题是nseasons,season.duration争论。当我在结果中指定这一点时,我得到干预是微不足道的(并且 CI 变得巨大),而当我不这样做时,干预是重要的。nseasons应该说是整个数据集的天数还是只是干预前的天数(例如 17 或 13)指定季节性的真正含义是什么?我可以根据数据跳过这个吗?

带有季节性规格数字的结果

没有季节性规格数字的结果

(不提供累积,因为它在我的情况下没有用)

(您会注意到,在干预前期间,合身性不是那么好。我能以某种方式解决这个问题吗?)

我不明白,我应该如何指定是否要标准化数据。

最后,我正在考虑静态或动态回归。我在论文中读到,当控制和处理之间的关系稳定时,建议使用静态。有人能解释一下稳定是什么意思吗?

你可以在这里找到论文

1个回答

关于季节性。从参考:

. 例如,如果数据代表每日观察,则使用 7 作为星期几。此界面目前最多仅支持一个季节性组件。

使用 model.args = list(nseasons = 7, season.duration = 24) 以每小时粒度向数据添加星期几组件

所以我认为在你的情况下,我认为 nseasons=13, season.duration=24 也是如此。


稳定是什么意思:我认为它的意思是协变量与您正在跟踪的系列的关系将被维持(但要进行干预)。因此,如果我正在研究影响房价 (y) 的某些指标,并使用平均工资作为协变量,那么如果英国在干预期间脱离欧盟,那可能会改变房价和工资之间的关系。因此,协变量和 y 之间的关系是稳定的假设将被打破。


Prior.level.sd,我认为你不能从你的数据中推断出来。这是算法使用的参数,不是吗?