Announcement

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

  • Syntax error when programming for ML

    Hi everyone; I use Stata version 16.

    As the title suggests, I am facing syntax issues with programming for maximum likelihood estimation.

    I aim to run the following model:

    Code:
    ml model lf our_ML_crraax (r: choice probMit0 probFix0 ra mfMit0total mfMit1total mfFix0total mfFix1total = ) (LNw: ), cluster(accountid) missing maximize technique(nr) difficult constraint(1)
    The program for such model is:
    Code:
    program our_ML_crraax
    
    args lnf r LNw muRA
    
    tempvar ra proba1 proba2 probb1 probb2 mA1 mA2 mB1 mB2 yA1 yA2 yB1 yB2 wp1 wp2 euF euM euDiff
    
    tempvar w
    
    syntax varlist [if] [in] [fweight pweight] [, noLOg Robust CLuster(varname) svy EForm *]
    
    marksample touse
    
    if "`svy'" !="" {
    
    svymarkout `touse'
    
    }
    
    quietly {
    
    generate double `proba1' = $ML_y2
    
    generate double `proba2' = 1 -`proba1'
    
    generate double `probb1' = $ML_y3
    
    generate double `probb2' = 1 - `probb1'
    
    generate double `ra' = $ML_y4
    
    generate double `mA1' = $ML_y5
    
    generate double `mA2' = $ML_y6
    
    generate double `mB1' = $ML_y7
    
    generate double `mB2' = $ML_y8
    
    generate double `w' = exp(`LNw')
    
    generate double `yA1' = ((`w' + `mA1')^(1-`r'))/(1-`r') if `ra'== 1
    
    generate double `yA2' = ((`w' + `mA2')^(1-`r'))/(1-`r') if `ra'== 1
    
    generate double `yB1' = ((`w' + `mB1')^(1-`r'))/(1-`r') if `ra'== 1
    
    generate double `yB2' = ((`w' + `mB2')^(1-`r'))/(1-`r') if `ra'== 1
    
    replace `yA1' = ln(`w'+`mA1') if `ra' == 1 & `r'==1
    
    replace `yA2' = ln(`w'+`mA2') if `ra' == 1 & `r'==1
    
    replace `yB1' = ln(`w'+`mB1') if `ra' == 1 & `r'==1
    
    replace `yB2' = ln(`w'+`mB2') if `ra' == 1 & `r'==1
    
    generate double `euA' = (`proba1'*`yA1') + (`proba2'*`yA2') if `ra' == 1
    
    generate double `euB' = (`probb1'*`yB1') + (`probb2'*`yB2') if `ra' == 1
    
    generate double `euDiff' = `euF' - `euM'
    
    replace `lnf' = ln(normal(`euDiff')) if `choice' == 2
    
    replace `lnf' = ln(normal(-`euDiff')) if `choice' == 1
    
    replace `lnf' = ln(normal(`euDiff'))/2 + `lnf' = ln(normal(-`euDiff'))/2 if `$ML_y1' & `ra'==1
    
    }
    
    end
    However, when I use ml check to understand what is happening, I receive the following message:

    Code:
    ml check
    
    Test 1:  Calling our_ML_crraay to check if it computes log likelihood and
             does not alter coefficient vector...
             FAILED; our_ML_crraay returned error 198.
    
    Here is a trace of its execution:
    ------------------------------------------------------------------------------
    -> our_ML_crraay __000008 __000009
            - `begin'
            = capture noisily version 16: our_ML_crraay __000008 __000009
              ------------------------------------------------------------------------------------------------------------------------ begin our_ML_crraay ---
              - args lnf r LNw muRA
              - tempvar ra proba1 proba2 probb1 probb2 mA1 mA2 mB1 mB2 yA1 yA2 yB1 yB2 wp1 wp2 euF euM euDiff
              - tempvar w
              - syntax varlist [if] [in] [fweight pweight] [, noLOg Robust CLuster(varname) svy EForm *]
              - marksample touse
              - if "`svy'" !="" {
              = if "" !="" {
                svymarkout `touse'
                }
              - quietly {
              - generate double `proba1' = $ML_y2
              = generate double __00000B = probMit0
              - generate double `proba2' = 1 -`proba1'
              = generate double __00000C = 1 -__00000B
              - generate double `probb1' = $ML_y3
              = generate double __00000D = probFix0
              - generate double `probb2' = 1 - `probb1'
              = generate double __00000E = 1 - __00000D
              - generate double `ra' = $ML_y4
              = generate double __00000A = ra
              - generate double `mA1' = $ML_y5
              = generate double __00000F = mfMit0total
              - generate double `mA2' = $ML_y6
              = generate double __00000G = mfMit1total
              - generate double `mB1' = $ML_y7
              = generate double __00000H = mfFix0total
              - generate double `mB2' = $ML_y8
              = generate double __00000I = mfFix1total
              - generate double `w' = exp(`LNw')
              = generate double __00000S = exp()
    invalid syntax
                generate double `yA1' = ((`w' + `mA1')^(1-`r'))/(1-`r') if `ra'== 1
                generate double `yA2' = ((`w' + `mA2')^(1-`r'))/(1-`r') if `ra'== 1
                generate double `yB1' = ((`w' + `mB1')^(1-`r'))/(1-`r') if `ra'== 1
                generate double `yB2' = ((`w' + `mB2')^(1-`r'))/(1-`r') if `ra'== 1
                replace `yA1' = ln(`w'+`mA1') if `ra' == 1 & `r'==1
                replace `yA2' = ln(`w'+`mA2') if `ra' == 1 & `r'==1
                replace `yB1' = ln(`w'+`mB1') if `ra' == 1 & `r'==1
                replace `yB2' = ln(`w'+`mB2') if `ra' == 1 & `r'==1
                generate double `euA' = (`proba1'*`yA1') + (`proba2'*`yA2') if `ra' == 1
                generate double `euB' = (`probb1'*`yB1') + (`probb2'*`yB2') if `ra' == 1
                generate double `euDiff' = `euF' - `euM'
                replace `lnf' = ln(normal(`euDiff')) if `choice' == 2
                replace `lnf' = ln(normal(-`euDiff')) if `choice' == 1
                replace `lnf' = ln(normal(`euDiff'))/2 + `lnf' = ln(normal(-`euDiff'))/2 if `$ML_y1' & `ra'==1
                }
              -------------------------------------------------------------------------------------------------------------------------- end our_ML_crraay ---
            - `end'
            = set trace off
    
    Fix our_ML_crraax.
    r(198);
    All help is immensely appreciated, thanks in advance
    Last edited by assa martinson; 14 Apr 2022, 03:10.

  • #2
    Hi Assa
    Welcome to Statalist.

    I think there are two possible causes for the error:
    1: You do not need this part of the code
    Code:
    syntax varlist [if] [in] [fweight pweight] [, noLOg Robust CLuster(varname) svy EForm *]
    marksample touse
    if "`svy'" !="" {
    svymarkout `touse'
    }
    2. your program calls for 3 parameters : args lnf r LNw muRA
    but is only receiving 2
    Code:
    ml model lf our_ML_crraax
    first: (r: choice probMit0 probFix0 ra mfMit0total mfMit1total mfFix0total mfFix1total = )
    second: (LNw: )
    , cluster(accountid) missing maximize technique(nr) difficult constraint(1)
    .
    HTH

    Comment

    Working...
    X