Ошибка оценки эффектов лечения, synth_runner

Я использую synth_runner оценить эффект обработки политики сохранения леса, используя данные о земном покрове временных рядов (три периода времени). Я хочу сравнить фермы, которые зарегистрированы в программе консервации (обработано в t=3), с синтетическим контролем. В моем наборе данных ~1500 наблюдений, и я использую только три ковариаты на код:

synth_runner percent_oldforest total_ha slope_mean dist_hwy, d(DID)

где DID является фиктивной переменной, указывающей, лечили или нет в последний период времени. Для запуска модели требуется ~ 15 минут, и она постоянно заканчивается ошибкой: Ошибка оценки эффекта лечения для блока 363 или некоторого другого блока.

Есть ли способ выяснить причину ошибки, и как я могу определить и удалить любые наблюдения, которые могут вызвать эту ошибку? Я увеличил свой matsize до 2000

1 ответ

Ошибки для этой удивительной команды могут быть крайне загадочными. Возможно, это связано с тем, что он является оберткой для synth,

Трудно сказать наверняка, так как я не могу воспроизвести ваш анализ, но если бы мне пришлось угадывать, это связано с отсутствующими данными о результатах или слишком длинными именами единиц или отсутствием вариации в ковариате. Возможно, есть другие способы получить эту ошибку, которую я не перечислил.

Вот пример, показывающий первую проблему:

use "synth_smoking.dta", clear
xtset state year
gen byte D = (state==3 & year>=1989)
synth_runner cigsale beer(1984(1)1988) lnincome(1972(1)1988) retprice age15to24 cigsale(1988) cigsale(1980) cigsale(1975), d(D)
replace cigsale =. if state=="Alabama":state & year==1985
synth_runner cigsale beer(1984(1)1988) lnincome(1972(1)1988) retprice age15to24 cigsale(1988) cigsale(1980) cigsale(1975), d(D)

Вы можете получить похожую ошибку, когда имена устройств слишком длинные:

egen state2 = group(state state state), label
xtset state2 year
synth_runner cigsale beer(1984(1)1988) lnincome(1972(1)1988) retprice age15to24 cigsale(1988) cigsale(1980) cigsale(1975), d(D)

Наконец, если ковариата постоянна для всех единиц за один период времени, та же проблема:

replace beer = 0 if year==1979
synth_runner cigsale beer(1979) beer(1984(1)1988) lnincome(1972(1)1988) retprice age15to24 cigsale(1988) cigsale(1980) cigsale(1975), d(D)

Все это дает:

Error estimating treatment effect for unit 3
invalid syntax
r(198);

Если это не помогает, попробуйте set trace on и попытайтесь увидеть, где происходит ошибка, и добавьте это к своему вопросу. Если вы отбросите некоторые необработанные наблюдения, это также может ускорить процесс с целью отладки.

Другие вопросы по тегам