Ошибка оценки эффектов лечения, 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
и попытайтесь увидеть, где происходит ошибка, и добавьте это к своему вопросу. Если вы отбросите некоторые необработанные наблюдения, это также может ускорить процесс с целью отладки.