计算Stata中的标准偏差以近似贝塔分布

计算Stata中的标准偏差以近似贝塔分布,stata,survival-analysis,markov,weibull,Stata,Survival Analysis,Markov,Weibull,我的问题涉及到计算从Stata中通过Weibull回归估计的系数得出的转移概率的标准偏差(SD) 转移概率被用来模拟白血病患者在90天(约10年)的40个周期内的疾病进展。我需要概率的SDs(在马尔可夫模型运行期间发生变化)来创建贝塔分布,其参数可以使用相应的马尔可夫循环概率及其SD进行近似。然后使用这些分布进行概率敏感性分析,即用它们代替简单概率(每个周期一个),从中随机抽取可以评估模型成本效益结果的稳健性 总之,使用事件生存时间数据,我使用回归分析来估计系数,这些系数可以插入到方程中以生成转

我的问题涉及到计算从Stata中通过Weibull回归估计的系数得出的转移概率的标准偏差(SD)

转移概率被用来模拟白血病患者在90天(约10年)的40个周期内的疾病进展。我需要概率的SDs(在马尔可夫模型运行期间发生变化)来创建贝塔分布,其参数可以使用相应的马尔可夫循环概率及其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天,因为我正在治疗白血病患者,他们很可能发生事件,即复发或死亡)

其中λ=p,伽马=(exp(_cons))

关于可变性,我首先计算系数的标准误差

. 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])
但是这不起作用,我正在使用的这本书也没有给出获取这些额外信息的提示。任何关于如何接近的反馈都将不胜感激。

这个答案不正确,但我保留它,因为它产生了一些有用的评论 系统使用自动,清除 发电机u=90+正常值()

播种1234 捕获程序删除所有

程序定义myprog,rclass tempvar结果 reg turn disp/*此处替换您的-streg-语句*/ gen
result'=\u b[disp]*u
总和
结果' 返回标量sd=r(sd) 结束

引导sdr=r(sd):myprog estat引导,bc百分位

注意:在引导程序中,新变量(结果)必须定义为临时变量;否则,gen语句将导致错误,因为为每个引导复制重新创建变量。

第二个答案:2014-03-23 更新:2014-03-26我修正了负面概率:我在抄写艾米丽密码时出错。我还展示了
nlcom
,正如Austin Nichols()在Statalist上所建议的那样。我对奥斯汀的密码做了一处更正

引导仍然是解决方案的关键。目标量是通过公式计算的概率,该公式基于
streg
中估计参数的非线性组合由于估计值不包含在
streg
之后返回的矩阵
e(b)
中,
nlcom
不会估计标准错误。
这是引导的理想情况。采用标准方法:创建一个程序
myprog
来估计参数;然后启动该程序

在该示例中,估计了t值范围内的转移概率pt。用户必须设置
t
范围的最小值和最大值以及标量
u
。可能有趣的是,由于估计参数的数量是可变的,因此在
myprog
中需要
foreach
语句。另外,
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
------------------------------------------------------------------------------

请注意交叉投递。注:只有在先前安装的模型中,
varname
是预测因素的情况下,[varname]才会起作用。这里是这样吗?嗨,不,不是。我把预测器插入到一个方程中,想得到这个方程结果的标准偏差。我想,因为这是一个方程,而不是一个模型,所以与结果没有关联。也许我需要把重点放在得到预测值的联合标准差上。感谢交叉发布信息。一个小小的调整(和加速)是您不需要这里的
summary
detail
选项。SDs是默认计算的。谢谢,尼克。我一直在想——我的意思是——。我已经删除了
详细信息
选项。谢谢,史蒂夫!此方法返回的_consse接近威布尔。然而,我们仍然对组合感兴趣,因此最初的nlcom。临时解决方案是二项式
√(p(1-p)/n)
其中p=过渡概率,但Weibull reg创建了2个用于计算p的系数,自举结果需要是它们的组合<代码>streg,nohr dist(weibull)gen结果'=\u b[\u cons]*u\u b[ln\u p]*u`不起作用,也无法创建以计算过渡的方式组合这两个变量。欢迎您提出进一步的想法,并表示感谢。史蒂夫,感谢您为bootstrapping做的精彩介绍。我现在明白为什么这个程序是必要的了:生成参数估计。由于程序使用的是streg而不是nlcom,因此我将替换_b,并且引导程序的结果将对每个t有一个SE。(但得出的系数不应该是负的,我会努力的。)不客气,艾米丽。请注意,要获得合理的SE(~500),可能需要比默认的50个引导复制多得多的复制,要获得良好的CI,可能需要1000个。此外,如果您悄悄地删除
qui
)前缀,您将看到默认的基于引导正常的标准错误,这些错误与列出的错误相同;然而,相应的CIs a
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
------------------------------------------------------------------------------