xtnb_fe.ado
来自「是一个经济学管理应用软件 很难找的 但是经济学学生又必须用到」· ADO 代码 · 共 82 行
ADO
82 行
*! version 1.0.1 17mar1999
program define xtnb_fe /* fixed-effects xtnbreg log likelihood */
version 6
args todo b lnf g H
tempvar lam sumlam sumy f
mleval `lam' = `b'
local y "$ML_y1"
local by "by $S_XTby"
quietly {
/* Calculate the log-likelihood. */
replace `lam' = exp(`lam') if $ML_samp
`by': gen double `sumlam' = cond(_n==_N,sum(`lam'),.) /*
*/ if $ML_samp
`by': gen double `sumy' = cond(_n==_N,sum(`y'),.) if $ML_samp
/* Note: missing values for _n < _N
makes evaluations below fast
*/
`by': gen double `f' = cond(_n==_N, sum(cond(`y'==0, 0, /*
*/ lngamma(`lam'+`y') - lngamma(`lam') - lngamma(`y'+1))) /*
*/ + lngamma(`sumlam') + lngamma(`sumy'+1) /*
*/ - lngamma(`sumlam'+`sumy'), 0) if $ML_samp
capture assert `f' < 0 if `sumy'!=.
if _rc {
scalar `lnf' = .
exit
}
mlsum `lnf' = `f'
if `todo' == 0 | `lnf'==. { exit }
/* Calculate gradient. */
drop `f'
`by': gen double `f' = digamma(`sumlam') /*
*/ - digamma(`sumlam'+`sumy') if _n==_N & $ML_samp
`by': replace `f' = `f'[_N] + digamma(`lam'+`y') /*
*/ - digamma(`lam') if $ML_samp
mlvecsum `lnf' `g' = `lam'*`f'
if `todo' == 1 | `lnf'==. { exit }
/* Calculate negative hessian. */
replace `f' = `f' + `lam'*(trigamma(`lam'+`y') /*
*/ - trigamma(`lam')) if $ML_samp
replace `sumy' = trigamma(`sumlam') - trigamma(`sumlam'+`sumy')
capture mat drop `H'
tempname Hi
local names : colnames(`b')
tokenize `names'
local i 1
while "``i''"!="" {
if "``i''"=="_cons" { local `i' 1 }
`by': replace `sumlam' = sum(`lam'*``i'') if $ML_samp
`by': replace `sumlam' = -`lam'*(`f'*``i'' /*
*/ + `sumy'[_N]*`sumlam'[_N]) if $ML_samp
mlvecsum `lnf' `Hi' = `sumlam'
if `lnf'==. { exit }
mat `H' = nullmat(`H') \ `Hi'
local i = `i' + 1
}
mat `H' = 0.5*(`H' + `H'') /* make perfectly symmetric */
}
end
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?