Announcement

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

  • KAPPALATE: module to estimate the local average treatment effect (LATE) using Abadie's kappa approach

    I would like to announce that kappalate, a Stata module to estimate the local average treatment effect (LATE) using Abadie's kappa approach and other weighting estimators, is now available in SSC.

    kappalate estimates the local average treatment effect (LATE) using methods based on inverse probability weighting, including (but not limited to) Abadie's (2003) kappa approach. The program computes analytic standard errors for each estimator. kappalate supports estimating the instrument propensity score using maximum likelihood or the covariate balancing approach of Imai and Ratkovic (2014). The estimators implemented by kappalate are described in a paper by Słoczyński, Uysal, and Wooldridge (2023), "Abadie's Kappa and Weighting Estimators of the Local Average Treatment Effect," which is available here: https://arxiv.org/abs/2204.07672.

    Many thanks to Derya Uysal and Tymon Słoczyński for taking the lead on producing this module.


  • #2
    Amazing, thank you so much for this!

    Is it possible to get summary statistics on the compliers?
    Last edited by Henry Strawforrd; 01 Nov 2023, 18:09.

    Comment


    • #3
      Thanks Henry. I'll get back to you on this.

      Comment


      • #4
        Sorry, another question: It seems I only get the other five estimators from this code and unfortunately the one you recommend is missing

        Code:
        kappalate d`o' $X1 $X2 $X3 (`M' = `Z'), zmodel(probit) vce(robust) std(on) which(all)
        Code:
        ------------------------------------------------------------------------------
          dUrate_DEU | Coefficient  Std. err.      z    P>|z|     [95% conf. interval]
        -------------+----------------------------------------------------------------
               tau_a |   .0000668   .0065285     0.01   0.992    -.0127289    .0128624
             tau_a,1 |    .000069   .0067535     0.01   0.992    -.0131676    .0133057
             tau_a,0 |   .0000665   .0065018     0.01   0.992    -.0126767    .0128097
            tau_a,10 |  -.0004141   .0061354    -0.07   0.946    -.0124393    .0116111
          tau_t,norm |  -.0003908    .006711    -0.06   0.954    -.0135441    .0127625
        ------------------------------------------------------------------------------
        Do you know why this might be? (Might it be related to the fact that if I try the propensity score estimation nonparametrically I get convergence issues?)

        Comment


        • #5
          *Not the one...

          Comment


          • #6
            Originally posted by Henry Strawforrd View Post
            Sorry, another question: It seems I only get the other five estimators from this code and unfortunately the one you recommend is missing

            Code:
            kappalate d`o' $X1 $X2 $X3 (`M' = `Z'), zmodel(probit) vce(robust) std(on) which(all)
            Code:
            ------------------------------------------------------------------------------
            dUrate_DEU | Coefficient Std. err. z P>|z| [95% conf. interval]
            -------------+----------------------------------------------------------------
            tau_a | .0000668 .0065285 0.01 0.992 -.0127289 .0128624
            tau_a,1 | .000069 .0067535 0.01 0.992 -.0131676 .0133057
            tau_a,0 | .0000665 .0065018 0.01 0.992 -.0126767 .0128097
            tau_a,10 | -.0004141 .0061354 -0.07 0.946 -.0124393 .0116111
            tau_t,norm | -.0003908 .006711 -0.06 0.954 -.0135441 .0127625
            ------------------------------------------------------------------------------
            Do you know why this might be? (Might it be related to the fact that if I try the propensity score estimation nonparametrically I get convergence issues?)
            Let me respond to this one as Jeff's coauthor on this paper. For the estimator we recommend, please replace "zmodel(probit)" with "zmodel(cbps)". The recommended estimator will be referred to as "tau_t,norm".

            Comment


            • #7
              Thanks a lot for responding! So, using cbps and tau_t,norm will be the tau_cb from the paper?

              Comment


              • #8
                Originally posted by Henry Strawforrd View Post
                Thanks a lot for responding! So, using cbps and tau_t,norm will be the tau_cb from the paper?
                Yes, that's exactly right! We plan to clean up the notation in the next draft of the paper and make it 100% compatible with the command. Sorry for the confusion.

                Comment


                • #9
                  Henry: You can also trick the current version of the command to estimate the complier means. We will add an option that's more computationally efficient in future versions. For now, apply one of the normalized estimators using D*Xj as the dependent variable where D is the treatment and Xj is the covariate.

                  Code:
                  gen D_Xj = D*Xj
                  kappalate D_Xj X1 X2 ... Xj ... Xk (X = Z), zmodel(cbps)
                  The reported estimate is the estimated mean in the complier subpopulation.

                  Comment


                  • #10
                    Originally posted by Jeff Wooldridge View Post
                    Henry: You can also trick the current version of the command to estimate the complier means. We will add an option that's more computationally efficient in future versions. For now, apply one of the normalized estimators using D*Xj as the dependent variable where D is the treatment and Xj is the covariate.

                    Code:
                    gen D_Xj = D*Xj
                    kappalate D_Xj X1 X2 ... Xj ... Xk (X = Z), zmodel(cbps)
                    The reported estimate is the estimated mean in the complier subpopulation.
                    That's great, thank you!!

                    Comment


                    • #11
                      Correction in #9: The last X should be the treatment indicator, D:

                      Code:
                      gen D_Xj = D*Xj
                      kappalate D_Xj X1 X2 ... Xj ... Xk (D = Z), zmodel(cbps)

                      Comment


                      • #12
                        Is there anything similar for the continuous case?

                        Comment


                        • #13
                          (Sorry, if this is a naive question) It probably won't be possible, but could I use this module in any way to find the kappa LATE in a panel data setting? I just have 2 waves of data...

                          Comment


                          • #14
                            You need to decide whether you setup permits identification of LATE. Is the IV always zero in the first period and only turns on in the second? Mechanically, you can apply kappalate and use vce(cluster id).

                            Comment


                            • #15
                              Yes, it is always 0 in the first and turns on only in the second. Thank you!

                              Comment

                              Working...
                              X