stata - 计算 Stata 中的标准偏差以近似 beta 分布

标签 stata survival-analysis markov weibull

我的问题涉及计算转移概率的标准差 (SD),转移概率源自通过 Stata 中的威 bool 回归估计的系数。

过渡概率被用于模拟白血病患者在 40 个 90 天(约 10 年)周期内的疾病进展。我需要概率的标准差(随着马尔可夫模型的运行而变化)来创建 beta 分布,其参数可以使用相应的马尔可夫循环概率及其标准差来近似。然后使用这些分布进行概率敏感性分析,即用它们代替简单概率(每个周期一个),并从中随机抽取可以评估模型成本效益结果的稳健性。

无论如何,使用事件生存时间数据,我使用回归分析来估计可以插入方程以生成转移概率的系数。例如……

. 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])

但这行不通,我正在使用的书没有给出获取这些额外信息的提示。非常感谢任何关于如何更接近的反馈。

最佳答案

第二个答案:2014-03-23

更新:2014-03-26 我修复了负概率:我在转录 Emily 的代码时犯了一个错误。我还展示了 Austin Nichols (http://www.stata.com/statalist/archive/2014-03/msg00002.html) 在 Statalist 上所建议的 nlcom。我对 Austin 的代码进行了一次更正。

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

在示例中,估计了一系列 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
------------------------------------------------------------------------------

关于stata - 计算 Stata 中的标准偏差以近似 beta 分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22108153/

相关文章:

regex - 使用正则表达式进行非贪婪(懒惰)匹配?

r - 由生存包中的 survfit 函数生成的生存曲线

html - R 中的 cox 回归输出表或图

python - 如何计算随机变量模 N 的概率质量函数,其中 N 是素数?

c++ - 除非复制并粘贴文本,否则在C++程序中输入的文本文件将无法工作

python - 如何在多列上实现隐马尔可夫模型?

sql - Stata odbc 获取列注释作为标签

r - 从单个数据集中循环R个多个样本

validation - 确认条件语句适用于 Stata 中 >0 个观测值

r - Cox回归中分层变量的参数估计和方差(层/生存包)