stata中的ml命令在被告知时不添加常量

时间:2013-05-30 10:50:31

标签: max stata cox-regression

我正在尝试编写一个小程序来执行Cox比例风险模型,最终目的是能够解决当前程序无法管理的问题。尽管我试图重现stcox的基本功能,但我在第一个障碍时已经失败了。使用stcox检查它是否正常工作我可以证明可能性是正确的,因为最大值使用ml plot位于同一位置。但是从这一点开始,它就会崩溃。变量drug取值1或0,因为它是Cox模型,所以不能拟合常数,因此在等式中指定。但是,通过每次计算对数似然时观察 Xb 值,可以看出控制臂和治疗臂的值都是变化的,实际上它们之间的差异是固定的,只是一个常数变化很大。

clear all
webuse drugtr

*Show st settings
stset

*Fit Cox proportional hazards model
stcox drug, breslow 

gen timem = -_t
sort timem


capture program drop mlcox
program mlcox
version 10
args lnf Xb
tempvar risk sumrisk sumrisk2
qui gen double `risk'=exp(`Xb')
qui gen double `sumrisk'=0
local N=_N
forval j=1/`N' {
     qui replace `sumrisk'=`sumrisk' + exp(`Xb'[`j']) if _t[`j']>=_t
}
tab `Xb'
qui replace `lnf' = 0                       if $ML_y1==0
qui replace `lnf' = `Xb' - log(`sumrisk')   if $ML_y1==1
end

ml model lf mlcox ( died = drug, noconstant)
ml plot -4 1 30

ml maximize

编辑:更正了最大似然的编码,但仍然存在收敛问题。

0 个答案:

没有答案