Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
From | Nick Cox <njcoxstata@gmail.com> |
To | statalist@hsphsun2.harvard.edu |
Subject | Re: st: Capture failing on xtmixed |
Date | Mon, 28 Jan 2013 14:36:11 +0000 |
Thanks for the detail. On your evidence here -xtmixed- failed with error code 503. That's not evidence of a bug. The question you raised of a loop remains. How to report what you think is a bug is documented at http://www.stata.com/support/faqs/technical-support/ The Statalist FAQ does recommend looking at the FAQs before posting. Nick On Mon, Jan 28, 2013 at 2:25 PM, Adrian Sayers <adrian.sayers@bristol.ac.uk> wrote: > Hi Nick, > > I think you see why i find it so strange. > > Just to be clear the code sits in a loop > e.g. forvalues i = 1/1000 { > capture xtmixed ..... > } > It just seems very odd that in this situation stata exits opposed to > skipping to the next line of code. > > I am quite happy that xtmixed is unable to converge, i just dont want it to > kick me out of my loop. > > > To add some more detail to my problem, I have traced the code to try and > understand what is happening. > > However i think this is one of those things that is a bit beyond me. > > It seems like a proper bug, and perhaps its something that statacorp needs > to fix, but i am unclear about how to report this? > > Thanks for any advice > > bw > Adrian > > > ------------------------------------------------------------------------- > begin mixed_ll --- > - version 8.2 > - args todo b lnf > - tempname s d err theta drho rho > - scalar `s' = -1 > = scalar __00001F = -1 > - if $XTM_ctheta { > = if 6 { > - mat `theta' = `b'[1, 1..$XTM_ctheta] > = mat __00001I = __00001A[1, 1..6] > - } > - else { > mata: _xtm_null_rowvector("`theta'") > } > - if $XTM_res { > = if 0 { > mat `drho' = `b'[1, `=$XTM_ctheta+1'...] > } > - else { > - mat `drho' = 0 > = mat __00001J = 0 > - } > - mata: _xtm_drho_to_rho("`drho'", "`rho'", "`err'") > = mata: _xtm_drho_to_rho("__00001J", "__00001K", "__00001H") > - if scalar(`err') == 1 { > = if scalar(__00001H) == 1 { > scalar `lnf' = . > } > - mata: _xtm_theta_to_delta(`"`d'"',`"`theta'"',"`err'") > = mata: > _xtm_theta_to_delta(`"__00001G"',`"__00001I"',"__00001H") > - if scalar(`err') == 1 { > = if scalar(__00001H) == 1 { > scalar `lnf' = . > } > - else { > - mata: _xtm_mixed_ll(`"`d'"',"`rho'","`s'",0) > = mata: _xtm_mixed_ll(`"__00001G"',"__00001K","__00001F",0) > - scalar `lnf' = r(ll) > = scalar __00001B = r(ll) > - } > > --------------------------------------------------------------------------- > end mixed_ll --- > Hessian is not negative semidefinite > > -------------------------------------------------------------------------- > end mopt.MaxMin --- > } > > ---------------------------------------------------------------------------- > - end mopt.Model --- > - if c(rc) { > - local rc = c(rc) > - Clear > > --------------------------------------------------------------------------- > begin mopt.Clear --- > - syntax [, NOTANOPTION] > - capture drop $ML_w > = capture drop __00000Y > - capture drop $ML_samp > = capture drop __00000Y > - capture drop $ML_subv > = capture drop > - capture drop $ML_grp > = capture drop > - mata: Mopt_drop_external() > - macro drop ML_* > > ---------------------------------------------------------------------------- > - end mopt.Clear --- > - exit `rc' > = exit 430 > } > exit > } > > ---------------------------------------------------------------------------- > --------- end mopt --- > exit > } > > ---------------------------------------------------------------------------- > ------------- end ml --- > - if _rc | "`e(converged)'" == "0" { > = if _rc | "" == "0" { > - if _rc == 1 { > exit 1 > } > - local noconv noconv > - mat `delta' = `deltaf' > = mat __00000L = __00000M > - mat `theta' = `thetaf' > = mat __00000N = __00000O > - } > - tempname bb > - mat `bb' = e(b) > = mat __00000Y = e(b) > - if $XTM_ctheta { > = if 6 { > - mat `theta' = `bb'[1,1..$XTM_ctheta] > = mat __00000N = __00000Y[1,1..6] > conformability error > } > else { > mata: _xtm_null_rowvector("`theta'") > } > if $XTM_res { > mat `rho' = `bb'[1,`=$XTM_ctheta+1'...] > } > mata: _xtm_theta_to_delta("`delta'", "`theta'","`err'") > local opt `e(opt)' > local ml_method `e(ml_method)' > local technique `e(technique)' > } > if $XTM_res { > tempname rho2 > mata: _xtm_drho_to_rho("`rho'","`rho2'","`err'") > mat `rho' = `rho2' > } > scalar `s' = -1 > mata: _xtm_mixed_ll("`delta'","`rho'","`s'",0) > local ll_1 = r(ll) > scalar `s' = r(mse) > local ll_2 = `ll_1' > mata: _xtm_theta_to_gamma("`gamma'","`theta'","`s'") > tempname initfinal > mat `initfinal' = `gamma' > if $XTM_res { > mat `initfinal' = `gamma', `rho' > } > if "`emonly'" == "" & "`stderr'" == "" { > if _caller() >= 11 { > mat `h' = e(ml_scale), 1 > } > else { > mat `h' = e(ml_d0_s), 1 > } > local c = colsof(`theta') > forvalues i = 1/`c' { > mat `h'[1,`i'] = `h'[1,`i'] * abs(`gamma'[1,`i']/`theta'[1,`i']) > } > `q' di > `q' di as txt "Computing standard errors:" > `vv' cap ml model d0 mixed_ll_reparm `eqlist' /lnsig_e `reqlist', max > init(`initfinal',copy) search( >> off) iter(0) `dscale' collinear missing nopreserve `mlopts' > if _rc { > if _rc == 1 { > exit 1 > } > local nostd nostd > local ll_2 = `ll_1' > } > else { > local ll_2 = e(ll) > if reldif(`ll_1',`ll_2') > 1e-10 { > local nostd nostd > } > } > if "`nostd'" != "" { > di as err "standard-error calculation failed" > if $XTM_res { > ereturn clear > error 430 > } > } > } > mata: _xtm_mixed_ll("`delta'","`rho'","`s'",1) > mata: _xtm_beta("`beta'","`Vbeta'","`s'") > if "`emonly'"=="" & "`nostd'" == "" & "`stderr'"=="" { > mat `gamma' = e(b) > mat `V' = e(V) > } > else { > local eqnames : subinstr local eqlist "/" "", all > mat coleq `gamma' = `eqnames' lnsig_e > mat colnames `gamma' = _cons > local c = colsof(`gamma') > mat `V' = J(`c',`c',0) > } > } > > ---------------------------------------------------------------------------- > - end xtmixed.Estimate --- > - local rc = _rc > - ereturn local cmdline `"xtmixed `0'"' > = ereturn local cmdline `"xtmixed obs_ht age_1 age_2 || id: age_1 age_2 , > cov(unstruct)"' > - capture mata: _xtm_cleanup() > - capture mac drop XTM_* > - exit `rc' > = exit 503 > ---------------------------------------------------------------------------- > ------------ end xtmixed --- > r(503); > * * For searches and help try: * http://www.stata.com/help.cgi?search * http://www.stata.com/support/faqs/resources/statalist-faq/ * http://www.ats.ucla.edu/stat/stata/