R svd(c)中的错误:';x';使用Synth软件包应用合成控制时

R svd(c)中的错误:';x';使用Synth软件包应用合成控制时,r,R,我正在尝试使用本网站提供的Texas.dta实施synth对照试验和安慰剂试验: 我下载了synth文件texas13.dta,并使用readstata13包来读取它。到目前为止还不错 我使用dataprep创建运行synth所需的数据,以便以后可以使用generate.placebos功能。后一种功能就是问题所在: -我使用的软件包来自: install_github('bcastanho/SCtools') library(SCtools) 这是创建随机推断安慰剂所必需的库 当我尝试运行

我正在尝试使用本网站提供的Texas.dta实施synth对照试验和安慰剂试验:

我下载了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'
似乎只有在某些特定的状态下才会发生这种情况,因为它会在多次排列后弹出

我尝试过改变我使用的状态(即排除其中一些状态)

我还尝试了一个接一个的手动操作,而不是使用安慰剂功能,而且在某些州(如密歇根州)也会出现故障


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

我认为这表明您缺少一些数据,使用
svd
的函数无法工作。你需要说
na.omit(德克萨斯州)
complete.cases(德克萨斯州)
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)