pre_limit_mult в пакете synth_runner stata не работает - PullRequest
0 голосов
/ 28 апреля 2018

Я бы хотел исключить плацебо с RMSPE перед лечением, который в 2 раза выше, чем у моего аппарата. Однако, когда я использую команду synth_runner с pre_limit_mult (2) и точно следую примеру, который они приводят в статье, каждое плацебо все еще включается в график. Кто-нибудь знает, в чем может быть проблема?

1 Ответ

0 голосов
/ 02 мая 2018

Вот пример с MCVE.

Как объяснено в файле справки, pre_limit_mult(K) исключит состояния плацебо из логического вывода , если качество совпадения этого состояния (измеренное по среднеквадратичной прогнозной ошибке до обработки) больше K раз соответствие качества обработанной единицы. Это не влияет на то, какие линии плацебо наносятся на график, а только снижает значения p.

Однако вы можете просто отбросить те, которые вы не хотите показывать на графике, например:

use "smoking.dta", clear
tsset state year

local K = 2 // pre_limit_mult factor

/* all 38 placebos */
synth_runner cigsale beer(1984(1)1988) lnincome(1972(1)1988) retprice age15to24 cigsale(1988) cigsale(1980) cigsale(1975), trunit(3) trperiod(1989) gen_vars
di e(n_pl)              // The number of placebo averages used for comparison
di e(avg_pre_rmspe_p)   // The proportion of placebos that have a pre-treatment RMSPE at least as large as the average of the treated units
single_treatment_graphs
graph export "raw_all.pdf", name(raw) replace
drop pre_rmspe post_rmspe lead effect cigsale_synth

/* same as above, but p-values change when we exclude 17 states */
synth_runner cigsale beer(1984(1)1988) lnincome(1972(1)1988) retprice age15to24 cigsale(1988) cigsale(1980) cigsale(1975), trunit(3) trperiod(1989) gen_vars pre_limit_mult(`K')
di e(n_pl)              // The number of placebo averages used for comparison
di e(avg_pre_rmspe_p)   // The proportion of placebos that have a pre-treatment RMSPE at least as large as the average of the treated units
single_treatment_graphs
graph export "raw_all2.pdf", name(raw) replace

/* exclude 17 states from graph */
preserve
    sum pre_rmspe if state=="California":state, meanonly
    gen in_sample = cond(pre_rmspe < = r(mean)*`K',1,0)
    distinct state if in_sample == 1 // CA is counted as in sample, so this matches 21 above
    drop if in_sample == 0
    single_treatment_graphs
    graph export "raw_limited.pdf", name(raw) replace
restore

Альтернативой может быть написание оболочки для графовых команд, которая сделает это за вас и примет опцию if. Может стоить ваших усилий, если вы планируете делать это много.

Возможно, вам потребуется ssc install distinct, поскольку это пользовательская команда.

...