在综合控制方法中,测量时间是否必须连续?

时间:2019-01-06 15:47:34

标签: r

过去几天,我一直在发布有关综合控制方法的一些问题,因为我一直遇到问题。我当前的问题以及其他一些问题是,我似乎收到有关进行研究时间跨度的错误消息。我正在测量与选举日期相关的数据,因此,我的数据不是在连续的时间段内测量的,但是其中存在差距。现在,如果我运行代码,则会出现以下错误:

“从time.predictors.prior中找不到time.variable的时间段1949”

是的,我在1949年没有测量值,但是在1948年和1952年确实有测量值。我的问题是,如何解决这个问题?

我尝试创建一个连续的时间刻度,但是这样做会给我带来不正确的数据,因为数据的性质不允许我以连续的角度测量数据。

dataprep_outcomes <- dataprep(foo=dataset [dataset$Year %in% c(1948:1986),], + predictors = c("Income","Distance","Gini","Percentage_voted","Protest"), + dependent = c("Percentage_voted"), + unit.variable = c("Municipality_No"), + time.variable = c("Year"), + treatment.identifier = 1, + controls.identifier = c(2:14), + time.predictors.prior = c(1948:1967), + time.optimize.ssr = c(1948:1986), + unit.names.variable = c("Municipality_ID"), + time.plot = c("Year"))}

我想解决这个问题,这将非常有帮助,作为外行,我非常感谢听到建议。

谢谢。

1 个答案:

答案 0 :(得分:1)

无法访问您的数据,我无法确认这是否可行。但是,问题似乎在于您要告诉函数先前的时间段是1948年至1967年,而实际上它们只是这些日期的一部分。解决方案可能是指定time.predictors.prior = intersect(1948:1967, dataset$Year),这将确保您用于time.predictors.prior的唯一值是数据中的值。

您需要确保指定的任何时间范围仅包含观察到的日期,这意味着您还需要调整time.optimize.ssr中的日期范围。这是一个使用内置basque数据帧(在Synth包中)的示例。只需注意,在指定范围的任何地方,我们都需要确保它仅包含观察到的年份。我正在做相交,但还有其他方法。在您的函数中,这将容易得多,因为据我所知,您仅在两个地方指定了一个年份范围。

data(basque)

basque <- subset(basque, !year %in% c(1965, 1966)) # remove two of the "prior" years

# dataprep: prepare data for synth
dataprep.out <-
  dataprep(
    foo = basque
    ,predictors= c("school.illit",
                   "school.prim",
                   "school.med",
                   "school.high",
                   "school.post.high"
                   ,"invest"
    )
    ,predictors.op = c("mean")
    ,dependent     = c("gdpcap")
    ,unit.variable = c("regionno")
    ,time.variable = c("year")
    ,special.predictors = list(
      list("gdpcap",intersect(1960:1969, basque$year),c("mean")),                            
      list("sec.agriculture",intersect(basque$year, seq(1961,1969,2)),c("mean")),
      list("sec.energy",intersect(basque$year, seq(1961,1969,2)),c("mean")),
      list("sec.industry",intersect(basque$year, seq(1961,1969,2)),c("mean")),
      list("sec.construction",intersect(basque$year, seq(1961,1969,2)),c("mean")),
      list("sec.services.venta",intersect(basque$year, seq(1961,1969,2)),c("mean")),
      list("sec.services.nonventa",intersect(basque$year, seq(1961,1969,2)),c("mean")),
      list("popdens",1969,c("mean")))
    ,treatment.identifier  = 17
    ,controls.identifier   = c(2:16,18)
    ,time.predictors.prior = intersect(1964:1969, basque$year)
    ,time.optimize.ssr     = intersect(1964:1969, basque$year)
    ,unit.names.variable   = c("regionname")
    ,time.plot            = intersect(c(1955:1997), basque$year)
  )