我正试图使用Texas.dta实现合成控制和安慰剂测试,该网站提供:
https://www.scunning.com/mixtape.html
我下载了synth文件texas13.dta并使用readstata13
包来读取它。到目前为止一切顺利。
我使用dataprep
来创建运行synth
所需的数据,以便之后可以使用generate.placebos
函数。后一个函数是问题所在:
- 我正在使用一个软件包从:
install_github('bcastanho/SCtools')
library(SCtools)
字符串
这是为随机化推断创建安慰剂所必需的库。
当我尝试运行generate.placebos时(我相信它只是控件之间的一个排列),我得到一个错误:
Error in svd(c) : infinite or missing values in 'x'
型
似乎只有在某些特定的状态下才会发生这种情况,因为它在多次排列后会弹出。
我试着改变我使用的状态(即,排除其中一些)
我也尝试了一个接一个手动,而不是使用安慰剂功能,它也打破了一些州(如密歇根州)
dataprep.out = dataprep(
foo = texas,
predictors = c("income", "ur", "poverty"),
predictors.op = "mean",
time.predictors.prior = c(1985:1993),
special.predictors = list(
list("bmprison", c(1990,1992,1991,1988), "mean"),
list("alcohol", 1990, "mean"),
list("aidscapita", c(1990,1991), "mean"),
list("bmprison", c(1988,1990:1992), "mean"),
list("alcohol", 1990, "mean"),
list("aidscapita", 1990:1991, "mean"),
list("black", 1991:1992, "mean"),
list("perc1519", 1990, "mean")),
dependent = "bmprison",
unit.variable = "statefip",
unit.names.variable = "state",
time.variable = "year",
treatment.identifier = 48,
controls.identifier = statefiplist[!statefiplist %in% 48],
time.optimize.ssr = 1985:1993,
time.plot = 1985:2000
)
synth.out = synth(dataprep.out)
placebos = generate.placebos(dataprep.out, synth.out)
型
预期的输出是我可以绘制的安慰剂数据。
1条答案
按热度按时间to94eoyn1#
我遇到同样的问题已经有几个星期了,我终于找到了解决这个问题的方法(至少用我的数据)。我只是简单地将参数'Sigf.ipop'从5(默认值)更改为2。这个参数被描述为“ipop优化例程的精度设置”,所以我假设这个更改使优化过程不那么严格。
总的来说,我之前的代码是:
字符串
它返回了相同的错误(svd(c)中的错误:“x”中有无穷多个值或缺少值)。
型
我选择Sigf.ipop = 2是因为这个数字在包的GitHub文档中被多次使用。