*! _firthlogit.ado Version 1.0 JRC 2008-07-11 program define firthlogit_ll version 9.2 args todo b lnL tempvar xb mu se tempname I mleval `xb' = `b', eq(1) quietly { generate double `mu' = invlogit( `xb') if $ML_y1 == 1 replace `mu' = invlogit(-`xb') if $ML_y1 == 0 mlsum `lnL' = ln(`mu') generate double `se' = sqrt(`mu' * (1 - `mu')) local mataccumlist foreach var of global firthlogitpredictors { tempvar `var' generate double ``var'' = `var' * `se' local mataccumlist `mataccumlist' ``var'' } matrix accum `I' = `mataccumlist' `se', noconstant scalar define `lnL' = `lnL' + ln(det(`I')) / 2 } end