Ошибка в svd (c): бесконечные или отсутствующие значения в 'x' при применении синтетического контроля с использованием пакета Synth - PullRequest
0 голосов
/ 26 мая 2019

Я пытаюсь реализовать тесты на синтез и контроль плацебо, используя Texas.dta, доступный на этом сайте:

https://www.scunning.com/mixtape.html

Я скачал синтезаторный файл 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)

Ожидаемый вывод - данные плацебо, которые я могу построить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...