Announcement

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

  • heterofactor and ML maximization

    I am using the heterofactor command (https://www.stata-journal.com/articl...article=st0431), but it is not interacting properly with mle maximize options. For example, I want to stop after one iteration and I write:


    local dep_vars "ln_mean_wage high_shool college black latino hgc_mother_1979"
    local controls "black latino hgc_mother_1979 highest_grade_complete"
    local testslist " asvab_8_1981 asvab_6_1981 asvab_5_1981 asvab_4_1981 asvab_10_1981 rotter_score_1979 rosenberg_esteem_score_1980"

    heterofactor unwanted `dep_vars' , indvarsc(`controls') scores(`testslist') factors(2) numf1tests(5) numf2tests(2) triangular difficult fdistonly initialreg nohats nochoice nodes(4)"

    but the output that I get is:

    Estimating Initial Values Vector
    Running Factor Model

    Twostep option specified
    Step: 1

    Factor: 1

    Iteration 0: log likelihood = -41281.163 (not concave)
    Iteration 1: log likelihood = -40578.565 (not concave)
    Iteration 2: log likelihood = -39899.142 (not concave)
    Iteration 3: log likelihood = -39490.265 (not concave)
    Iteration 4: log likelihood = -39334.409 (not concave)
    Iteration 5: log likelihood = -39276.052 (not concave)
    Iteration 6: log likelihood = -39235.622 (not concave)
    Iteration 7: log likelihood = -39198.96
    Iteration 8: log likelihood = -39130.351 (not concave)
    Iteration 9: log likelihood = -39113.587
    Iteration 10: log likelihood = -39095.938
    Iteration 11: log likelihood = -39085.982
    Iteration 12: log likelihood = -39083.795
    Iteration 13: log likelihood = -39072.259

    I have the same problem with ltolerance(#) or any maximize option.

    Does someone know how to solve it?
    Last edited by Agustin Diaz; 25 Jun 2022, 15:26.

  • #2
    I note that the example code in post #1 does not in fact include the mle maximize iterate() option which would cause the output to stop after iteration #1. Here is an example that has iterate(1) specified and which stops after iteration #1. This is the first example from the SJ article cited in post #1.
    Code:
    clear all
    cls
    set seed 12345
    set obs 5000
    generate u1=runiform()
    generate u2=runiform()
    generate f1 = rnormal()*sqrt(1)+1 if u1<0.3
    replace f1 = rnormal()*0.622269-0.42857143 if u1>=0.3
    generate f2 = invnormal(runiform())*sqrt(1) + 0.5 if u2<0.5
    replace f2 = invnormal(runiform())*0.70710678 -0.5 if u2>=0.5
    drop u?
    generate X=rnormal()
    generate Q=rnormal()
    generate Z=rnormal()
    generate uv=rnormal()
    generate u1=rnormal()
    generate u0=rnormal()
    forvalues i=1/12{
         generate e`i'=rnormal()
    }
    generate t1=0.1 +0.1 *Q +1.1*f1+e1
    generate t2=0.5 +0.1 *Q +1.4*f1+e2
    generate t3=0.4 +0.3 *Q + f1+e3
    generate t4=0.3 +0.11*Q +3 *f2 +e7
    generate t5=0.4 +0.21*Q +1.6*f2 +e8
    generate t6=0.1 +0.31*Q + f2 +e9
    generate t7=0.3 +0.11*Q +3.1*f1 + 3*f2 +e7
    generate t8=0.4 +0.21*Q +1.2*f1 + 1.6*f2 +e8
    generate t9=0.1 +0.31*Q +2*f1 + f2 +e9
    generate D=(0.5*Z + f1 + uv>0)
    generate Y11=2 +2*X + 2*f1 + u1
    generate Y10=1.5 + X + f1 + u0
    generate Y1=D*Y11 + (1-D)*Y10
    generate d2=(0.5*Z + f1 + f2 + uv>0)
    generate Y21=2 +2*X + 2*f1 + 2*f2 + u1
    generate Y20=1.5 + X + f1 + f2 + u0
    generate Y2=d2*Y21 + (1-d2)*Y20
    
    heterofactor Y1 X, treatind(D) instrum(Z) scores(t1 t2 t3) indvarsc(Q) ///
        factors(1) difficult initialreg iterate(1)
    Code:
    . heterofactor Y1 X, treatind(D) instrum(Z) scores(t1 t2 t3) indvarsc(Q) ///
    >     factors(1) difficult initialreg iterate(1)
    Estimating Initial Values Vector
    Running Factor Model
    
    Iteration 0:   log likelihood =  -40440.35  (not concave)
    Iteration 1:   log likelihood = -38151.621  (not concave)
    convergence not achieved
    
                                                            Number of obs =  5,000
                                                            Wald chi2(1)  = 329.20
    Log likelihood = -38151.621                             Prob > chi2   = 0.0000
    Incidentally, iterate(0) causes it to stop after iteration 0.

    Software version info:
    Code:
    . which heterofactor
    /Users/lisowskiw/Library/Application Support/Stata/ado/plus/h/heterofactor.ado
    *! heterofactor program
    *! version 1.2.6.1
    *!              Modified from version 1.2.6 after comments from Stata referee.
    *!              Uses LIML Incorporates the residuals to save time
    *!      Uses Simulated destibutions for steps where distributions already known 
    *! Sep 2014
    *! Miguel Sarzosa & Sergio UrzĂșa
    
    . about
    
    Stata/SE 17.0 for Mac (Intel 64-bit)
    Revision 01 Jun 2022

    Comment


    • #3
      Hi William,

      Thank you for your reply. If I run the same code, but with two factors, I get

      Code:
      clear all
      cls
      set seed 12345
      set obs 5000
      generate u1=runiform()
      generate u2=runiform()
      generate f1 = rnormal()*sqrt(1)+1 if u1<0.3
      replace f1 = rnormal()*0.622269-0.42857143 if u1>=0.3
      generate f2 = invnormal(runiform())*sqrt(1) + 0.5 if u2<0.5
      replace f2 = invnormal(runiform())*0.70710678 -0.5 if u2>=0.5
      drop u?
      generate X=rnormal()
      generate Q=rnormal()
      generate Z=rnormal()
      generate uv=rnormal()
      generate u1=rnormal()
      generate u0=rnormal()
      forvalues i=1/12{
           generate e`i'=rnormal()
      }
      generate t1=0.1 +0.1 *Q +1.1*f1+e1
      generate t2=0.5 +0.1 *Q +1.4*f1+e2
      generate t3=0.4 +0.3 *Q + f1+e3
      generate t4=0.3 +0.11*Q +3 *f2 +e7
      generate t5=0.4 +0.21*Q +1.6*f2 +e8
      generate t6=0.1 +0.31*Q + f2 +e9
      generate t7=0.3 +0.11*Q +3.1*f1 + 3*f2 +e7
      generate t8=0.4 +0.21*Q +1.2*f1 + 1.6*f2 +e8
      generate t9=0.1 +0.31*Q +2*f1 + f2 +e9
      generate D=(0.5*Z + f1 + uv>0)
      generate Y11=2 +2*X + 2*f1 + u1
      generate Y10=1.5 + X + f1 + u0
      generate Y1=D*Y11 + (1-D)*Y10
      generate d2=(0.5*Z + f1 + f2 + uv>0)
      generate Y21=2 +2*X + 2*f1 + 2*f2 + u1
      generate Y20=1.5 + X + f1 + f2 + u0
      generate Y2=d2*Y21 + (1-d2)*Y20
      
      heterofactor Y1 X, treatind(D) instrum(Z) scores(t1 t2 t3 t4 t5 t6) indvarsc(Q) ///
          factors(2) difficult initialreg iterate(1)
      
      Twostep option specified 
         Step: 1
      
      Factor:  1
      
      Iteration 0:   log likelihood = -27727.863  (not concave)
      Iteration 1:   log likelihood = -26335.071  (not concave)
      Iteration 2:   log likelihood = -25252.342  (not concave)
      Iteration 3:   log likelihood = -25195.507  
      Iteration 4:   log likelihood = -25173.594
      Code:
      Stata/BE 17.0 for Mac (Intel 64-bit)
      Revision 01 Jun 2022
      Copyright 1985-2021 StataCorp LLC
      Thanks
      Agustin

      Originally posted by William Lisowski View Post
      I note that the example code in post #1 does not in fact include the mle maximize iterate() option which would cause the output to stop after iteration #1. Here is an example that has iterate(1) specified and which stops after iteration #1. This is the first example from the SJ article cited in post #1.
      Code:
      clear all
      cls
      set seed 12345
      set obs 5000
      generate u1=runiform()
      generate u2=runiform()
      generate f1 = rnormal()*sqrt(1)+1 if u1<0.3
      replace f1 = rnormal()*0.622269-0.42857143 if u1>=0.3
      generate f2 = invnormal(runiform())*sqrt(1) + 0.5 if u2<0.5
      replace f2 = invnormal(runiform())*0.70710678 -0.5 if u2>=0.5
      drop u?
      generate X=rnormal()
      generate Q=rnormal()
      generate Z=rnormal()
      generate uv=rnormal()
      generate u1=rnormal()
      generate u0=rnormal()
      forvalues i=1/12{
      generate e`i'=rnormal()
      }
      generate t1=0.1 +0.1 *Q +1.1*f1+e1
      generate t2=0.5 +0.1 *Q +1.4*f1+e2
      generate t3=0.4 +0.3 *Q + f1+e3
      generate t4=0.3 +0.11*Q +3 *f2 +e7
      generate t5=0.4 +0.21*Q +1.6*f2 +e8
      generate t6=0.1 +0.31*Q + f2 +e9
      generate t7=0.3 +0.11*Q +3.1*f1 + 3*f2 +e7
      generate t8=0.4 +0.21*Q +1.2*f1 + 1.6*f2 +e8
      generate t9=0.1 +0.31*Q +2*f1 + f2 +e9
      generate D=(0.5*Z + f1 + uv>0)
      generate Y11=2 +2*X + 2*f1 + u1
      generate Y10=1.5 + X + f1 + u0
      generate Y1=D*Y11 + (1-D)*Y10
      generate d2=(0.5*Z + f1 + f2 + uv>0)
      generate Y21=2 +2*X + 2*f1 + 2*f2 + u1
      generate Y20=1.5 + X + f1 + f2 + u0
      generate Y2=d2*Y21 + (1-d2)*Y20
      
      heterofactor Y1 X, treatind(D) instrum(Z) scores(t1 t2 t3) indvarsc(Q) ///
      factors(1) difficult initialreg iterate(1)
      Code:
      . heterofactor Y1 X, treatind(D) instrum(Z) scores(t1 t2 t3) indvarsc(Q) ///
      > factors(1) difficult initialreg iterate(1)
      Estimating Initial Values Vector
      Running Factor Model
      
      Iteration 0: log likelihood = -40440.35 (not concave)
      Iteration 1: log likelihood = -38151.621 (not concave)
      convergence not achieved
      
      Number of obs = 5,000
      Wald chi2(1) = 329.20
      Log likelihood = -38151.621 Prob > chi2 = 0.0000
      Incidentally, iterate(0) causes it to stop after iteration 0.

      Software version info:
      Code:
      . which heterofactor
      /Users/lisowskiw/Library/Application Support/Stata/ado/plus/h/heterofactor.ado
      *! heterofactor program
      *! version 1.2.6.1
      *! Modified from version 1.2.6 after comments from Stata referee.
      *! Uses LIML Incorporates the residuals to save time
      *! Uses Simulated destibutions for steps where distributions already known
      *! Sep 2014
      *! Miguel Sarzosa & Sergio UrzĂșa
      
      . about
      
      Stata/SE 17.0 for Mac (Intel 64-bit)
      Revision 01 Jun 2022

      Comment


      • #4
        I'm guessing this is an (unintended? unfortunate? unavoidable?) consequence of the forced use of the twostep option when the number of factors exceeds 1. Adding the twostep option to my example with a single factor also causes the optimization options to be ignored. You could follow up with the authors at the email addresses in the output of help heterofactor.

        Comment


        • #5
          Originally posted by William Lisowski View Post
          I'm guessing this is an (unintended? unfortunate? unavoidable?) consequence of the forced use of the twostep option when the number of factors exceeds 1. Adding the twostep option to my example with a single factor also causes the optimization options to be ignored. You could follow up with the authors at the email addresses in the output of help heterofactor.
          Thanks!

          Comment

          Working...
          X