2013-11-27 231 views
0

我试图检查Stata是否在我以前的reg使用的模型NormalReg(样本模型)中取得初始值。但是,在我看来,第0次迭代没有考虑到我的初始值。任何帮助解决这个问题将不胜感激。在Stata中设置ML编程的初始值

set seed 123 
set obs 1000 
gen x = runiform()*2 
gen u = rnormal()*5 
gen y = 2 + 2*x + u 
reg y x 


     Source |  SS  df  MS    Number of obs = 1000 
-------------+------------------------------   F( 1, 998) = 52.93 
     Model | 1335.32339  1 1335.32339   Prob > F  = 0.0000 
    Residual | 25177.012 998 25.227467   R-squared  = 0.0504 
-------------+------------------------------   Adj R-squared = 0.0494 
     Total | 26512.3354 999 26.5388743   Root MSE  = 5.0227 

------------------------------------------------------------------------------ 
      y |  Coef. Std. Err.  t P>|t|  [95% Conf. Interval] 
-------------+---------------------------------------------------------------- 
      x | 1.99348 .2740031  7.28 0.000  1.455792 2.531168 
     _cons | 2.036442 .3155685  6.45 0.000  1.417188 2.655695 
------------------------------------------------------------------------------ 




cap program drop NormalReg 
program define NormalReg 
args lnlk xb sigma2 
qui replace `lnlk' = -ln(sqrt(`sigma2'*2*_pi)) - ($ML_y-`xb')^2/(2*`sigma2') 
end 

ml model lf NormalReg (reg: y = x) (sigma2:) 
ml init reg:x = `=_b[x]' 
ml init reg:_cons = `=_b[_cons]' 
ml max,iter(1) trace 


ml max,iter(1) trace 

initial:  log likelihood =  -<inf> (could not be evaluated) 
searching for feasible values .+ 
feasible:  log likelihood = -28110.03 
rescaling entire vector .+. 
rescale:  log likelihood = -14623.922 
rescaling equations ...+++++. 
rescaling equations .... 
rescale eq: log likelihood = -3080.0872 
------------------------------------------------------------------------------ 
Iteration 0: 
Parameter vector: 
     reg:  reg: sigma2: 
      x _cons _cons 
r1 3.98696  1  32 

                log likelihood = -3080.0872 
------------------------------------------------------------------------------ 
Iteration 1: 
Parameter vector: 
     reg:  reg: sigma2: 
      x  _cons  _cons 
r1 2.498536 1.773872 24.10726 

                log likelihood = -3035.3553 
------------------------------------------------------------------------------ 
convergence not achieved 

                Number of obs =  1000 
                Wald chi2(1) =  86.45 
Log likelihood = -3035.3553      Prob > chi2  =  0.0000 

------------------------------------------------------------------------------ 
      y |  Coef. Std. Err.  z P>|z|  [95% Conf. Interval] 
-------------+---------------------------------------------------------------- 
reg   | 
      x | 2.498536 .2687209  9.30 0.000  1.971853  3.02522 
     _cons | 1.773872 .3086854  5.75 0.000  1.16886 2.378885 
-------------+---------------------------------------------------------------- 
sigma2  | 
     _cons | 24.10726 1.033172 23.33 0.000  22.08228 26.13224 
------------------------------------------------------------------------------ 
Warning: convergence not achieved 

回答

2

显然,如果你想ml评估迭代0的指定初始值的可能性,你还必须提供一个值为sigma2;。更改代码的最后一节:

matrix rmse = e(rmse) 
scalar mse = rmse[1,1]^2 

ml model lf NormalReg (reg: y = x) (sigma2:) 
ml init reg:x = `=_b[x]' 
ml init reg:_cons = `=_b[_cons]' 
ml init sigma2:_cons = `=scalar(mse)' 
ml maximize, trace 

注意西格马^ 2的ML估计会从根本上不同的均方误差,因为ML不知道自由度。 n = 1000 sigma2 =(998/1000)* rmse。

+0

完美。谢谢史蒂夫 – Metrics

1

像这样的东西是非常敏感的。您相信前一次回归的结果在program定义的确切点上仍然可见。这可能会被几种不同的操作直接或间接地破坏。最好把你想用作参数的参数作为参数传递给你的程序,在程序运行时使用程序的选项。

+0

谢谢尼克。我会考虑到这一点。但是,这并没有改变。先定义程序然后运行reg然后运行ml模型给出相同的答案。 – Metrics