Announcement

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

  • Problem with 'ml init'

    Hi All,

    I'm using Stata/IC 13.1.

    I'm having an odd issue with setting initial values using 'ml init'. My code works just fine as it is, taking starting values from a user-written programme 'sfcross', but when I try to tweak it slightly so that starting values are taken from Stata's built-in frontier command, I'm getting an error message, and I can't figure out the reason for this. The full code is:

    Code:
    program cnsf2, eclass
            version 13.1 
            if !replay() {
            syntax varlist(numeric fv ts) [if] [in] [, Level(cilevel) LCLASS(integer 2) COST PRODuction]
            local s                =    -1
            if "`cost'"=="" local s        =    1
            global cost_s `s'
            global class_num `lclass'
            marksample touse
            gettoken yvar xvars : varlist
            local mlmodel_list /lnsigma_v1
            forval i            =    2/`lclass' {
            local mlmodel_list `mlmodel_list' /lnsigma_v`i'
            }
            local probs = `lclass'-1
            forval i            =    1/`probs' {
            local mlmodel_list `mlmodel_list' /logprob`i'
            }
            local diparm_list diparm(lnsigma_v1, exp label(sigma_v1) prob) 
            forval i            =    2/`lclass' {
            local diparm_list `diparm_list' diparm(lnsigma_v`i', exp label(sigma_v`i') prob)
            }
            forval i            =    1/`probs' {
            local diparm_list `diparm_list' diparm(logprob`i', invlogit label(prob`i') prob)
            }
            ml model d1 cnsf2_ll (mu:`yvar'=`xvars') /lnsigma_u `mlmodel_list', title(Stoch. frontier contaminated normal/half normal model) diparm(lnsigma_u, exp label(sigma_u) prob) `diparm_list'
            quietly{
            //net install sfcross, all from(http://www.econometrics.it/stata) replace
            //sfcross `yvar' `xvars', cost d(h)
            frontier `yvar' `xvars', cost d(h)
            scalar _b_cons=_b[_cons]
            forval i            =    1/`lclass' {
            scalar _lnsigma_v`i'        =    ln(e(sigma_v))+ln(`i'^2/`lclass')
            }
            forval i            =    1/`probs'  {
            scalar _logprob`i'        =    -ln(1/(1/2)^`i'-1)
            }
            scalar _lnsigma_u        =    ln(e(sigma_u))
            foreach x in `xvars'{
            scalar _b_`x'            =    _b[`x']
            }
            foreach x in `xvars'{
            ml init mu:`x'            =    `=_b_`x''
            }
            ml init mu:_cons        =    `=_b_cons'
            local mlinit_list /lnsigma_v1=`=_lnsigma_v1'
            forval i            =    2/`lclass' {
            local mlinit_list `mlinit_list' /lnsigma_v`i'=`=_lnsigma_v`i''
            }
            forval i            =    1/`probs' {
            local mlinit_list `mlinit_list' /logprob`i'=`=_logprob`i''
            }
            ml init /lnsigma_u=`=_lnsigma_u' `mlinit_list'
            }
            }
            ml search
            ml maximize, difficult
            tempname b V y
            matrix `b'                =    e(b)
            matrix `V'                =    e(V)
            ereturn post `b' `V', esample(`touse')
            ereturn local predict     "cnsf2_p"
            ereturn local cmd        "cnsf2"
            global ML_y1 `yvar'
    end
    Note that when i change

    Code:
            //net install sfcross, all from(http://www.econometrics.it/stata) replace
            //sfcross `yvar' `xvars', cost d(h)
            frontier `yvar' `xvars', cost d(h)
    to

    Code:
            net install sfcross, all from(http://www.econometrics.it/stata) replace
            sfcross `yvar' `xvars', cost d(h)
            //frontier `yvar' `xvars', cost d(h)
    everything works as intended. Here is the section of code where I find the error message, after using 'set trace on':


    Code:
        - if "`subcmd'" == "init" {
        = if "init" == "init" {
        - Init `0'
        = Init  mu:lnq = .9658624953033792
          ------------------------------------------------------ begin mopt.Init ---
          - tempname b0
          - mata: Mopt_get_b0()
    model not defined
          -------------------------------------------------------- end mopt.Init ---
          exit
          }
        --------------------------------------------------------------- end mopt ---
        exit
        }
      ------------------------------------------------------------------- end ml ---
    Can anyone figure this out? Thanks,

    Alex
Working...
X