Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Average Treatment on the Treated (ATT) using psmatch2 and teffects psmatch

    Hi all. I have a question regarding the coefficient for the Average Treatment Effect on the Treated (ATT) when using psmatch2 in comparison to “teffects psmatch”.

    I’m running matching models to estimate the impact of a binary treatment, existence of dry law in a municipality (“lei_seca”), on the outcome “turnout”. I’ve used both psmatch2 and teffects psmatch to do the analyses.

    Code:
    psmatch2 lei_seca pop_urb_perc ln_child_mort_census10 poor_perc_census10 eleitores_analf_perc ln_r_pib_per_cap idhm coal_pres ideo_na pol_pi, outcome(turnout) neighbor(1)
    Code:
    teffects psmatch (turnout) (lei_seca pop_urb_perc ln_child_mort_census10 poor_perc_census10 eleitores_analf_perc ln_r_pib_per_cap idhm coal_pres ideo_na pol_pi, probit), nneighbor(1) atet
    Whereas teffetcs psmatch presents a coefficient for the ATT, psmatch2 presents means for Treat, Control, and the Difference.

    Question: Is the “Difference” from psmatch2’s output equivalent to the ATT’s coefficient when running teffects psmatch?

    I need to be 100% sure about that.

    Thank you.

  • #2
    Yes, both approaches use the same model to estimate the propensity scores as well as the same weighting scheme. To illustrate,
    Code:
    sysuse auto, clear
    
    *psmatch2
    psmatch2 foreign mpg turn, outcome(price) n(1)
    
    *teffects
    teffects psmatch (price) (foreign mpg turn, probit), nneighbor(1) atet
    
    *regress
    *estimate propensity scores
    sysuse auto, clear
    probit foreign mpg turn
    predict double ps
    g n = _n
    tempfile n
    save `n'
    
    *retain nearest neighbor in terms of estimated propensity scores
    forval i = 53 / 74 {
    use `n' if !foreign|n==`i', clear
    sum ps if n==`i'
    gen diff = abs(ps-r(min))
    sum diff if n!=`i'
    keep if diff == r(min) & !foreign
    tempfile n`i'
    save `n`i''
    }
    
    use `n' if foreign, clear
    forval i = 53 / 74 {
    append using `n`i''
    }
    
    gen w_atet=1
    collapse price foreign mpg turn (sum) w_atet, by(make)
    
    regress price foreign [pw=w_atet]

    Comment


    • #3
      Great Øyvind, thank you.

      Comment

      Working...
      X