过去几天,我一直在发布有关综合控制方法的一些问题,因为我一直遇到问题。我当前的问题以及其他一些问题是,我似乎收到有关进行研究时间跨度的错误消息。我正在测量与选举日期相关的数据,因此,我的数据不是在连续的时间段内测量的,但是其中存在差距。现在,如果我运行代码,则会出现以下错误:
“从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"))}
我想解决这个问题,这将非常有帮助,作为外行,我非常感谢听到建议。
谢谢。
答案 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)
)