R语言 svd(c)中的错误:使用Synth包应用合成控制时,“x”中存在无穷值或缺失值

nfeuvbwi  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(103)

我正试图使用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)


预期的输出是我可以绘制的安慰剂数据。

to94eoyn

to94eoyn1#

我遇到同样的问题已经有几个星期了,我终于找到了解决这个问题的方法(至少用我的数据)。我只是简单地将参数'Sigf.ipop'从5(默认值)更改为2。这个参数被描述为“ipop优化例程的精度设置”,所以我假设这个更改使优化过程不那么严格。
总的来说,我之前的代码是:

placebo <- generate_placebos(
  dataprep.out_baseline,
  synth.out_baseline,
  Sigf.ipop = 5,
  strategy = "multicore"
)

字符串
它返回了相同的错误(svd(c)中的错误:“x”中有无穷多个值或缺少值)。

placebo <- generate_placebos(
  dataprep.out_baseline,
  synth.out_baseline,
  Sigf.ipop = 2,
  strategy = "multicore"
)


我选择Sigf.ipop = 2是因为这个数字在包的GitHub文档中被多次使用。

相关问题