我的问题涉及计算从Stata中通过Weibull回归估计的系数导出的转移概率的标准差(SD)。
转换概率被用于模拟白血病患者的疾病进展超过40天(约10年)的40个周期。我需要概率的SD(在马尔可夫模型的运行中改变)来创建β分布,其参数可以使用相应的马尔可夫循环概率及其SD来近似。然后使用这些分布进行概率灵敏度分析,即它们代替简单概率(每个循环一个),随机抽取它们可以评估模型成本效益结果的稳健性。
无论如何,利用时间到事件生存数据,我已经使用回归分析来估计可以插入方程中以生成转移概率的系数。例如......
. streg, nohr dist(weibull)
failure _d: event
analysis time _t: time
Fitting constant-only model:
Iteration 0: log likelihood = -171.82384
Iteration 1: log likelihood = -158.78902
Iteration 2: log likelihood = -158.64499
Iteration 3: log likelihood = -158.64497
Iteration 4: log likelihood = -158.64497
Fitting full model:
Iteration 0: log likelihood = -158.64497
Weibull regression -- log relative-hazard form
No. of subjects = 93 Number of obs = 93
No. of failures = 62
Time at risk = 60250
LR chi2(0) = -0.00
Log likelihood = -158.64497 Prob > chi2 = .
------------------------------------------------------------------------------
_t | Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------
-------------+------
_cons | -4.307123 .4483219 -9.61 0.000 -5.185818 -3.428429
-------------+----------------------------------------------------------
-------------+------
/ln_p | -.4638212 .1020754 -4.54 0.000 -.6638854 -.263757
-------------+----------------------------------------------------------
-------------+------
p | .628876 .0641928 .5148471 .7681602
1/p | 1.590139 .1623141 1.301812 1.942324
然后我们用方程式()创建概率,使用p和_cons以及t用于时间(即马尔可夫循环数)和u用于周期长度(通常是一年,我的工作时间为90天)与白血病患者很有可能发生事件,即复发或死亡。
所以lambda = p,gamma =(exp(_cons))
gen result = (exp((lambda*((t-u)^ (gamma)))-(lambda*(t^(gamma)))))
gen transitions = 1-result
转向可变性,我首先计算系数的标准误差
. nlcom (exp(_b[_cons])) (exp(_b[/ln_p]))
_nl_1: exp(_b[_cons])
_nl_2: exp(_b[/ln_p])
------------------------------------------------------------------------------
_t | Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------
-------------+------
_nl_1 | .0116539 .0044932 2.59 0.009 .0028474 .0204604
_nl_2 | .6153864 .054186 11.36 0.000 .5091838 .721589
但我真正追求的是转换值的标准错误,例如,
nlcom (_b[transitions])
但是这不起作用,我正在使用的这本书没有提供有关获取这些额外信息的提示。任何关于如何接近的反馈都将非常感激。
答案 0 :(得分:1)
sysuse auto,clear gen u = 90 + rnormal()
设置种子1234 捕获程序drop _all
程序定义myprog,rclass
tempvar结果
reg turn disp / *这里替换你的-streg-语句* /
gen result' = _b[disp]*u
sum
结果'
return scalar sd = r(sd)
端
bootstrap sdr = r(sd):myprog estat bootstrap,bc百分位数
值得注意的是:在bootstrapped程序中,必须将新变量(您的结果)定义为临时变量;否则gen语句将导致错误,因为每个bootstrap复制都会重新创建变量。
答案 1 :(得分:1)
更新时间:2014-03-26 我修正了否定概率:我在抄写Emily的代码时犯了错误。我还按照Austin Nichols(http://www.stata.com/statalist/archive/2014-03/msg00002.html)在Statalist上的建议显示nlcom
。我对奥斯汀的代码做了一次更正。
Bootstrapping仍然是解决方案的关键。目标量是通过公式计算的概率,该公式基于来自streg
的估计参数的非线性组合。 由于估算值未包含在 这是自举的理想情况。采用标准方法:创建一个程序e(b)
之后返回的矩阵streg
中,nlcom
将无法估算标准误差。myprog
来估计参数;然后bootstrap
该程序。
在该示例中,估计一系列t值的转移概率pt。用户必须设置t
范围的最小值和最大值以及标量u
。有趣的是,由于估计参数的数量是可变的,因此foreach
内需要myprog
语句。此外,bootstrap
需要一个由myprog
返回的估算列表组成的参数。此列表也在foreach
循环中构建。
/* set u and minimum and maximum times here */
scalar u = 1
local tmin = 1
local tmax = 3
set linesize 80
capture program drop _all
program define myprog , rclass
syntax anything
streg , nohr dist(weibull)
scalar lambda = exp(_b[ln_p:_cons])
scalar gamma =exp(_b[_t:_cons])
forvalues t = `1'/`2'{
scalar p`t'= 1 - ///
(exp((lambda*((`t'-u)^(gamma)))-(lambda*(`t'^(gamma)))))
return scalar p`t' = p`t'
}
end
webuse cancer, clear
stset studytime, fail(died)
set seed 450811
/* set up list of returned probabilities for bootstrap */
forvalues t = `tmin'/`tmax' {
local p`t' = "p" + string(`t')
local rp`t'= "`p`t''" + "=" + "("+ "r(" + "`p`t''" +"))"
local rlist = `"`rlist' `rp`t''"'
}
bootstrap `rlist', nodots: myprog `tmin' `tmax'
forvalues t = `tmin'/`tmax' {
qui streg, nohr dist(weibull)
nlcom 1 - ///
(exp((exp(_b[ln_p:_cons])*((`t'-u)^(exp(_b[_t:_cons]))))- ///
(exp(_b[ln_p:_cons])*(`t'^(exp(_b[_t:_cons]))))))
}
结果:
Bootstrap results Number of obs = 48
Replications = 50
command: myprog 1 3
p1: r(p1)
p2: r(p2)
p3: r(p3)
------------------------------------------------------------------------------
| Observed Bootstrap Normal-based
| Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
p1 | .7009447 .0503893 13.91 0.000 .6021834 .7997059
p2 | .0187127 .007727 2.42 0.015 .0035681 .0338573
p3 | .0111243 .0047095 2.36 0.018 .0018939 .0203548
------------------------------------------------------------------------------
/* results of nlcom */
------------------------------------------------------------------------------
_t | Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
_nl_1 | .7009447 .0543671 12.89 0.000 .594387 .8075023
-------------+----------------------------------------------------------------
_nl_1 | .0187127 .0082077 2.28 0.023 .0026259 .0347995
-------------+----------------------------------------------------------------
_nl_1 | .0111243 .0049765 2.24 0.025 .0013706 .0208781
------------------------------------------------------------------------------