Announcement

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

  • Formal test for overlapping of propensity scores and rule of thumbs for trimming data

    Dear all, I have a question.
    I thank you in advance.

    I am trying to estimate a causal effect using
    Code:
    teffects ipw
    .

    I wonder if there is a formal test to evaluate the overlap of the propensity scores.

    To my knowledge, teffects warns you if the overlap assumption is violated (it says something like "treatment overlap assumption has been violated; use option osample() to identify the overlap violators").

    I have a situation like the one below, and I am wondering if there is a way to test the overlap.



    In addition, I wonder if there are any rules of thumb for trimming the sample.
    In my case, I would keep subjects with propensity scores between 0.2 and 0.8, but I am curious if there are any established rules, beyond visual inspection, for choosing the trimming interval.

  • #2
    Not that I know of. There is a trade-off between internal validity (restricting overlap to highly similar units) and efficiency and external validity, which is including almost everyone. Trimming may induce a certain selection bias though.

    However, when overlap is low, OLS relies heavily on functional form to extrapolate. That is not good.

    Comment


    • #3
      Thank you Maxence Morlet .
      Since I have poor experience at this regard, do you think my overlap Is too poor? My variables are pretty balanced in terms of SMD.
      Thanks for your opinion.
      Last edited by Gianfranco Di Gennaro; 05 Mar 2025, 03:36.

      Comment


      • #4
        In the highly popular kmatch ado by Ben Jann, the common support option for PS works as follows:

        Code:
                // common support
                if "`comsup'"!="" {
                    tempname PS2
                    quietly gen double `PS2' = `PS' if `touse'
                    if "`comsup2'"=="" {
                        tempname comsup_lb comsup_ub
                        forv i = 1 / `nover' {
                            if `"`over'"'!="" {
                                local l: word `i' of `overlevels'
                                local touse1 "`touse' & (`over'==`l')"
                            }
                            else local touse1 `touse'
                            su `PS' if `treat'==1 & `touse1', meanonly
                            scalar `comsup_lb' = r(min)
                            scalar `comsup_ub' = r(max)
                            su `PS' if `treat'==0 & `touse1', meanonly
                            scalar `comsup_lb' = max(r(min),`comsup_lb')
                            scalar `comsup_ub' = min(r(max),`comsup_ub')
                            quietly replace `PS2' = . if ///
                                (`PS'<`comsup_lb' | `PS'>`comsup_ub') & `touse1'
                        }
                    }
        To me, this seems like a very simple definition of CS, which is fine. If you would like to have more insights, I suggest a graphical reporting of the propensity scores. I think it is also OK to make individual decisions based on such a figure and justify your selection as a trade off between bias and variance as #2 suggests.
        Best wishes

        Stata 18.0 MP | ORCID | Google Scholar

        Comment

        Working...
        X