1

我正在尝试编写一个小程序来进行 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

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

4

0 回答 0