Plot Stata事件研究图形代码

Plot Stata事件研究图形代码,plot,graph,regression,stata,Plot,Graph,Regression,Stata,我正试图为Stata的一个事件研究编写代码,但我不能完全得到我想要的。Jacobson、LaLonde和Sullivan(1993),第698页图3(),有一个与我想要的非常相似的图,除了我还想添加置信区间 基于本教程,我编写了以下代码: sysuse auto, clear egen t = fill(1,2,3,4,1,2,3,4) quietly regress price ib2.t trunk weight if foreign==0 estimates store domestic

我正试图为Stata的一个事件研究编写代码,但我不能完全得到我想要的。Jacobson、LaLonde和Sullivan(1993),第698页图3(),有一个与我想要的非常相似的图,除了我还想添加置信区间

基于本教程,我编写了以下代码:

sysuse auto, clear
egen t = fill(1,2,3,4,1,2,3,4)
quietly regress price ib2.t trunk weight if foreign==0
estimates store domestic
quietly regress price ib2.t trunk weight if foreign==1
estimates store foreign
coefplot (domestic, label(Domestic Cars)) (foreign, label(Foreign Cars)), drop(_cons) xline(0) vertical omitted baselevels
这就产生了我想要的东西,但存在以下问题:

  • 点估计值和置信区间是并排的,而不是相互重叠的(如果这是唯一的问题,这可能很好)
  • 我的时间变量t出现在每个x标签中(t=1,t=2,等等),但我只想让它说(1,2,等等),而不是t=
  • 在这个玩具示例中,我必须从1开始t编号,因为与
    I
    运算符组合的因子变量必须是非负的。我希望我的时间变量能够取负数
  • 我不希望
    trunk
    weight
    出现在绘图中。把它们放在
    下拉(…)
    中可以吗
  • 我也希望能够在回归残差中完成这一切,而不是我上面所说的
  • 我想用直线连接点估计值

  • 我根本没有嫁给
    coefplot
    命令。其他技术,特别是使用内置Stata命令也完全可以接受。

    希望我正确地回答了你的问题,也许我误解了一些东西,但我的答案如下:

    (我没有解决5题,因为我不确定你想问的问题是什么,但也许在看到我的解决方案后就会明白了)

    代码:

    人们可能希望改进这一点的一些方法是:

    • 有了标签定义,就可以对比这更长的时间序列使用for循环,这样就不必全部手工完成

    • 我不是statsby方面的专家,所以也许有一种更简单的方法来获得置信区间,并忽略躯干、重量和常数

    至于残差,这个答案的基本直觉是,您需要一个包含系数和置信区间的数据集。因此,如果可以计算残差及其CI的值并将其放入数据集中,则可以使用相同类型的双向图

    // load data same as before
    sysuse auto, clear
    egen t = fill(1,2,3,4,1,2,3,4)
    
    // get coefficients and standard errors of regressions over foreign
    statsby _b _se , clear by(foreign): regress price ib2.t trunk weight
    
    // there are some extra variables we don't need/want
    drop *_trunk *_weight *_cons
    
    // generate confidence intervals and rename coefficient variables
    forvalues i = 1/4 {
        local j = `i'+7
        gen ci_low`i' = _stat_`i' - 1.96*_stat_`j'
        gen ci_high`i' = _stat_`i' + 1.96*_stat_`j'
        rename _stat_`i' coef`i'
    
    }
    // no longer in need of standard error variables
    drop  _stat_8 _stat_9 _stat_10 _stat_11
    
    // now, we want our data in long format so we can do a twoway graph
    reshape long coef ci_low ci_high, i(foreign) j(t)
    
    // we can label the t values so that they start below 1
    lab def timeseries 1 "-1" 2 "0" 3 "1" 4 "2"
    lab values t timeseries
    
    // now graph, note each factor has two  pieces, a scatter (with connecting lines) 
    // and an rcap for the confidence intervals
    twoway (sc coef t if foreign == 1, mcolor(navy) lcolor(navy) connect(direct)) ///
            (rcap ci_low ci_high t if foreign == 1, lcolor(navy)) ///
        (sc coef t if foreign == 0, mcolor(maroon) lcolor(maroon) connect(direct)) ///
            (rcap ci_low ci_high t if foreign == 0, lcolor(maroon)), ///
        legend(lab(1 "Foreign") lab(2 "Foreign CI") lab(3 "Domestic") lab(4 "Domestic CI")) ///
        xlab(,val)