<>
Try -which emlatentclass- to check whether Stata sees it... -set trace on- to make sense of the error...
HTH
Martin
-----Original Message-----
From: [email protected] [mailto:[email protected]] On Behalf Of László Sándor
Sent: Freitag, 6. November 2009 23:05
To: [email protected]
Subject: st: ado file from my personal folder not loading
Thank you for all your help today.
I have another quick question. I saved my first ever user-written ado
file in my personal folder. The proof is the output:
. personal dir
your personal ado-directory is ~/ado/personal/
emlatentclass.ado
But when I would run it (under Stata 11), I get:
. emlatentclass d_fdeic treat, by(taxproid07)
last estimates not found
(error occurred while loading emlatentclass.ado)
r(301);
I tried to catch basic syntax errors, to no avail so far. I'd be
grateful for any quick guesses what are the usual suspects, or you
might even skim my draft of code below. Thank you!
Laszlo
program emlatentclass, eclass
                version 11
                syntax varlist [if] [in], BY(varname)
                marksample touse
                markout touse `varlist' `by'
                tokenize `varlist'
                local lhs `1'
                macro shift
                local rhs `*'
                local k: word count `rhs'
qui sum touse
local nobs = r(sum)
gen prob_class1 = 0.5
local mix "prob_class1"
set matadebug on
mata:
mata set matalnum on
void function estep(real rowvector b1, real rowvector b2, real scalar
s1, real scalar s2, string scalar lhs, string scalar rhs, string
scalar mix, string scalar by) {
            real scalar logli_l, logli_h
            real vector y
            real matrix X
            st_view(id,.,by)
            info = panelsetup(id, 1)
            st_view(X,.,rhs)
            st_view(y,.,lhs)
            st_view(pi,.,mix)
            index_hi = normalden(y:-X*b1', 0, sqrt(s1))
            index_li = normalden(y:-X*b2', 0, sqrt(s2))
            for (i=1;i<=rows(info);i++) {
                index_l = panelsubmatrix(index_li,i,info)
                index_h = panelsubmatrix(index_hi,i,info)
                panelsubview(pi_i,pi,i,info)
                logli_l = quadcolsum(log(index_l))
                logli_h = quadcolsum(log(index_h))
                pi_i[.] =
J(rows(nu_i),1,exp(logli_h)/(exp(logli_h)+exp(logli_l)))
            }
}
mata mosave estep, replace
function mstep(transmorphic M,
                 real rowvector b,
                 real colvector lnf)
              {
                      real colvector  p1, p2
                      real scalar s1, s2
                      real colvector  y1
                      p1 = moptimize_util_xb(M, b, 1)
                      p2 = moptimize_util_xb(M, b, 2)
                      s1 = moptimize_util_xb(M, b, 3)
                      s2 = moptimize_util_xb(M, b, 4)
                      y = moptimize_util_depvar(M, 1)
                      st_view(mix,.,moptimize_util_userinfo(M,1))
                      lnf = ln(mix:*normalden(y:-p1, 0,
sqrt(s1))+(1:-mix):*normalden(y:-p2, 0, sqrt(s2)))
              }
mata mosave mstep, replace
b1 = J(1,`k',1)
b2 = J(1,`k',1)
s1 = 1
s2 = 1
d = 1
while d>10^(-3)) {
// E-step
    estep(b1,b2,s1,s2,"`lhs'","`rhs'","`mix'","`by'")
// M-step
    M = moptimize_init()
    moptimize_init_evaluator(M, &mstep())
    moptimize_init_evaluatortype(M,"lf")
    moptimize_init_touse(M, "touse")
    moptimize_init_ndepvars(M, 1)
    moptimize_init_depvar(M, 1, "`lhs'")
    moptimize_init_eq_n(M, 4)
    moptimize_init_eq_indepvars(M, 1, "`rhs'")
    moptimize_init_eq_cons(M, 1, "on")
    moptimize_init_eq_indepvars(M, 2, "`rhs'")
    moptimize_init_eq_cons(M, 2, "on")
    moptimize_init_eq_name(M, 1, "class1")
    moptimize_init_eq_name(M, 2, "class2")
    moptimize_init_eq_name(M, 3, "se1")
    moptimize_init_eq_name(M, 4, "se2")
//    moptimize_init_by(M, "`by'")
    moptimize_init_eq_coefs(M, 1, b1)
    moptimize_init_eq_coefs(M, 2, b2)
    moptimize_init_eq_coefs(M, 3, s1)
    moptimize_init_eq_coefs(M, 4, s2)
    moptimize_init_search(M, "on")
    moptimize_init_search_random(M, "on")
    moptimize_init_search_bounds(M, 3, (0,.))
    moptimize_init_search_bounds(M, 4, (0,.))
    moptimize_init_valueid(M, "LogL with given mixing")
    moptimize_init_nuserinfo(M, 1)
    moptimize_init_userinfo(M, 1, "`mix'")
    _moptimize(M)
    moptimize_result_post(M)
    b1n = moptimize_result_coefs(M,1)
    b2n = moptimize_result_coefs(M,2)
    s1n = moptimize_result_coefs(M,3)
    s2n = moptimize_result_coefs(M,4)
    d = sum(abs((b1n-b1,b2n-b2,s1n-s1,s2n-s2)))
    b1 = b1n
    b2 = b2n
    s1 = s1n
    s2 = s2n
}
end
// ereturn post b V, esample(touse) o(`nobs')
ereturn display
end
exit
*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/
*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/