全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
1604 1
2013-03-12
各位大侠,,我目前在做demand system方面的工作,正在用stata估计模型参数。我用的是极大似然估计,自己写了一个ml d0 evaluator. 写好程序后,用ml check debug, 总是卡在test 7并且报no observations error,也就是error 2000. 我把code贴在这里,希望大家帮我看一看,问题出在哪里。我研究了很久,都找不到头绪 :(    code有点长,先谢谢了

program define RDS1

   version 11.1
   args todo b lnf
//wi: shares; pi: prices; expfd: total expenditure   
   quietly{

      tempname gammasum tausum etasum alpha_v beta_v theta_v gamma_v tau_v eta_v alpha beta theta gamma tau eta
          tempvar P1 P2 P3 R1 R2 R3
          
          local nm = $NEQN-1
          
          scalar `alpha_v' = `b'[1,1]
          scalar `beta_v' = `b'[1,2]
          scalar `theta_v' = `b'[1,3]
          matrix `gamma_v' = `b'[1,(3+1)..(3+`nm')]
          matrix `tau_v' = `b'[1,(3+`nm'+1)..(3+2*`nm')]
          matrix `eta_v' = `b'[1,(3+2*`nm'+1)..(3+3*`nm')]
          
          scalar `alpha' = exp(`alpha_v')
          scalar `beta' = invlogit(`beta_v')
          scalar `theta' = invlogit(`theta_v')
          matrix `gamma' = J(1,$NEQN,1)
          matrix `tau' = J(1,$NEQN,1)
          matrix `eta' = J(1,$NEQN,1)
          
          scalar `gammasum' = 0 //the sum in the reparameterization of gamma
          forvalues i = 1/`nm' {
             scalar `gammasum' = `gammasum' + exp(`gamma_v'[1,`i'])
          }
          
          matrix `gamma'[1,1] = 1/(1+`gammasum')
          forvalues i = 2/$NEQN {
             matrix `gamma'[1,`i'] = exp(`gamma_v'[1,(`i'-1)])/(1+`gammasum')
          }
          
          scalar `tausum' = 0 //the sum in the reparameterization of tau
          forvalues i = 1/`nm' {
             scalar `tausum' = `tausum' + exp(`tau_v'[1,`i'])
          }
          
          matrix `tau'[1,1] = 1/(1+`tausum')
          forvalues i = 2/$NEQN {
             matrix `tau'[1,`i'] = exp(`tau_v'[1,(`i'-1)])/(1+`tausum')
          }
          
          
          scalar `etasum' = 0 //the sum in the reparameterization of eta
          forvalues i = 1/`nm' {
             scalar `etasum' = `etasum' + exp(`eta_v'[1,`i'])
          }
          
          matrix `eta'[1,1] = 1/(1+`etasum')
          forvalues i = 2/$NEQN {
             matrix `eta'[1,`i'] = exp(`eta_v'[1,(`i'-1)])/(1+`etasum')
          }
          
          /* Form the price index variable P1.*/
          gen double `P1' = p1^`gamma'[1,1]
          forvalues i = 2/$NEQN{
             replace `P1' = `P1'*(p`i'^`gamma'[1,`i'])
          }
          
          /* Form the price index variable P2.*/
          gen double `P2' = p1^`tau'[1,1]
          forvalues i = 2/$NEQN{
             replace `P2' = `P2'*(p`i'^`tau'[1,`i'])
          }
          
          /* Form the price index variable P3.*/
          gen double `P3' = p1*`eta'[1,1]
          forvalues i = 2/$NEQN{
             replace `P3' = `P3'+(p`i'*`eta'[1,`i'])
          }
          
          /*gen R1*/
          gen double `R1' = `alpha'*expfd^`alpha'*`P1'^(-`alpha'-1)
          
          /*gen R2*/
          gen double `R2' = `beta'*expfd^(-`beta')*`P2'^(`beta'-1)
          
          /*gen R3*/
          gen double `R3' = `theta'*expfd^(-`theta')*`P3'^(`theta'-1)
          
          /*Now generate the error terms.*/
          forvalues i = 1/`nm' {
             tempvar lnl_eps`i'
                 gen double `lnl_eps`i'' = w`i' - (`gamma'[1,`i']*`R1'*`P1'+`tau'[1,`i']*`R2'*`P2'+`eta'[1,`i']*`R3'*p`i')/(`R1'*`P1'+`R2'*`P2'+`R3'*`P3')
          }
          
          local allofem ""
          forvalues i = 1/`nm' {
             local allofem "`allofem' `lnl_eps`i''"
          }
          
          /*Form sigma.*/
          matrix accum sigma = `allofem', noconstant
          local nobs = r(N)
          matrix sigma = sigma/`nobs'
          
           /* Finally, compute the likelihood function. */
      scalar `lnf' = -1*`nobs'/2*(`nm'*(1+ln(2*_pi)) + ln(det(sigma)))
   }

end

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-3-13 06:59:35
之前的邮件忘记把我的do file也贴出来,所以即便有人想帮我也无从下手,真是不好意思。我的do file如下:
use food, clear

glo NEQN = 4   /* Number of equations. */

ml model d0 RDS1 () /beta_v /theta_v /ga_v1 /ga_v2  /*
                    */ /ga_v3 /ta_v1 /ta_v2 /ta_v3 /et_v1 /et_v2 /et_v3
                                       
ml search

ml maximize

这样,各位大侠很容易就可以跑一下我的ml evaluator, 看到报error 2000
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群