Announcement

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

  • Bivariate Probit Regression using IV

    Hello

    I am trying to estimate the impact of birth order of children on child labor and schooling outcomes where for birth order I've used two indicator (dummy) variables for the child being either first-born(0/1) or Last-born(0/1). I have two main dependent variables; school attendance dummy (0/1) and child labor dummy (0/1). I run the following bivariate probit regression along with other control variables and few if conditions in Stata12.0

    biprobit school work First-born Last-born ChildAge MotherAge FatherAge MotherEducation FatherEducation RuralDummy FamilySize if ChildAge>=6 & Couple'sMarriedLifeYears<=15 , cl(HHID)

    Here FamilySize is endogenous and I have an IV for that which is a dummy variable (0/1) if the first born child is a son.

    However I am unable to figure out how to run a bivariate model using the IV. Because other model allow it with commands like ivprobit etc but can someone please specify the commands and steps to perform bivariate regression using the IV.

    Regards
    Last edited by Maida Basharat; 03 Oct 2017, 03:09.

  • #2
    Maida: try using Christopher F Baum's sspecialreg (download by typing SSC install sspecialreg) which is an implementation of Lewbel and Dong’s ‘simple special regressor’ method. You can read more about this method and the user written command by typing help sspecialreg (after you have installed it).

    Comment


    • #3
      Hello Abdul Adam. Thank you for your reply but I looked into sspecialreg and it seems that this technique is also using just one dependent variable.
      Whereas I have two dependent variables "school" and "work" which is why I had problem using the IV

      Comment


      • #4
        I would take a look at user-written -cmp- command.

        Comment


        • #5
          My other suggestion, on top of what has already been laid out is to use a two-step ML approach of the reduced form of your model.
          This means, run the first stage model(s), grab the residuals, add them to as explanatory variables to biprobit model. This Control function approach would be similar to the IVPROBIT, twostep process.
          For the correction of the errors, you can estimate the whole model using Maximum Likelihood. See the code below:
          Code:
          webuse school, clear
          set seed 1 
          capture program drop mybiprobit
          program mybiprobit
          args lnf m1   m2  athrho  zb1 lns1 
          tempvar rho
          qui:gen double `rho'=tanh(`athrho')
          qui:replace `lnf'=ln(normalden($ML_y3,`zb1',exp(`lns1')))
          qui:replace `lnf'=`lnf'+ln(binormal(`m1',`m2',`rho')) if $ML_y1==1 & $ML_y2==1
          qui:replace `lnf'=`lnf'+ln(binormal(`m1',-`m2',-`rho')) if $ML_y1==1 & $ML_y2==0
          qui:replace `lnf'=`lnf'+ln(binormal(-`m1',`m2',-`rho')) if $ML_y1==0 & $ML_y2==1
          qui:replace `lnf'=`lnf'+ln(binormal(-`m1',-`m2',`rho')) if $ML_y1==0 & $ML_y2==0
          end
          **Here I am creating an artificial IV
          gen z=logptax-rnormal()
          ml model lf mybiprobit (private:private=logptax loginc years)   (vote:vote=logptax loginc years)   /athrho (zb1:logptax=loginc  years z) /lns1
            
          ml maximize,
          matrix b=e(b)
          
          capture program drop mybiprobitiv
          program mybiprobitiv
          args lnf mm1 g1  mm2  g2 athrho  zb1 lns1 
          tempvar rho
          qui:gen double `rho'=tanh(`athrho')
          qui:replace `lnf'=ln(normalden($ML_y3,`zb1',exp(`lns1')))
          tempvar m1 m2
          qui:gen double `m1'=`mm1'+`g1'*($ML_y3-`zb1')
          qui:gen double `m2'=`mm2'+`g2'*($ML_y3-`zb1')
          qui:replace `lnf'=`lnf'+ln(binormal(`m1',`m2',`rho')) if $ML_y1==1 & $ML_y2==1
          qui:replace `lnf'=`lnf'+ln(binormal(`m1',-`m2',-`rho')) if $ML_y1==1 & $ML_y2==0
          qui:replace `lnf'=`lnf'+ln(binormal(-`m1',`m2',-`rho')) if $ML_y1==0 & $ML_y2==1
          qui:replace `lnf'=`lnf'+ln(binormal(-`m1',-`m2',`rho')) if $ML_y1==0 & $ML_y2==0
          end
          
          
          ml model lf mybiprobitiv (private:private=logptax loginc years) (g1:)  (vote:vote=logptax loginc years)  (g2:) /athrho (zb1:logptax=loginc  years z  ) /lns1, init(b)
          ml maximize
          
          . ml maximize
          
          initial:       log likelihood = -94.714871
          rescale:       log likelihood = -94.714871
          rescale eq:    log likelihood = -94.714871
          Iteration 0:   log likelihood = -94.714871  
          Iteration 1:   log likelihood = -93.692931  
          Iteration 2:   log likelihood = -93.452944  
          Iteration 3:   log likelihood = -93.447472  
          Iteration 4:   log likelihood = -93.447463  
          
                                                          Number of obs     =         95
                                                          Wald chi2(3)      =       1.68
          Log likelihood = -93.447463                     Prob > chi2       =     0.6416
          
          ------------------------------------------------------------------------------
                       |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
          -------------+----------------------------------------------------------------
          private      |
               logptax |  -2.564119   2.789807    -0.92   0.358    -8.032041    2.903803
                loginc |   1.227862   1.095336     1.12   0.262    -.9189563    3.374681
                 years |  -.0289742   .0339655    -0.85   0.394    -.0955453     .037597
                 _cons |      4.497   10.85697     0.41   0.679    -16.78227    25.77626
          -------------+----------------------------------------------------------------
          g1           |
                 _cons |   2.681308   2.929296     0.92   0.360    -3.060006    8.422622
          -------------+----------------------------------------------------------------
          vote         |
               logptax |   1.104724   2.093851     0.53   0.598    -2.999148    5.208597
                loginc |   .1970153   .8263684     0.24   0.812    -1.422637    1.816668
                 years |  -.0017752   .0210316    -0.08   0.933    -.0429963    .0394459
                 _cons |  -9.283065   8.629106    -1.08   0.282     -26.1958    7.629672
          -------------+----------------------------------------------------------------
          g2           |
                 _cons |  -2.609884   2.166247    -1.20   0.228    -6.855651    1.635883
          -------------+----------------------------------------------------------------
               /athrho |  -.2521366   .2459324    -1.03   0.305    -.7341553     .229882
          -------------+----------------------------------------------------------------
          zb1          |
                loginc |   .3187565   .0683069     4.67   0.000     .1848775    .4526356
                 years |  -.0058193   .0029529    -1.97   0.049    -.0116068   -.0000317
                     z |   .0681495   .0245932     2.77   0.006     .0199478    .1163512
                 _cons |   3.343251   .6953307     4.81   0.000     1.980428    4.706075
          -------------+----------------------------------------------------------------
                 /lns1 |  -1.361456   .0725476   -18.77   0.000    -1.503647   -1.219265
          ------------------------------------------------------------------------------
          Hope it helps.
          Fernando

          Comment

          Working...
          X