使用前缀在 Stata 中存储二项式置信区间的结果

Storing results of binomial confidence interval in Stata using by prefix

我正在尝试计算按年完成治疗的人数比例的 95% 二项式 Wilson 置信区间(数据集是每个人的行列表)。

我想将结果存储到一个矩阵中,这样我就可以使用 putexcel 命令将结果导出到现有的 Excel spreadsheet 而无需更改格式sheet。我创建了一个二进制变量 dscomplete_binary 如果治疗未完成则为 0,如果治疗完成则为 1。

我试过以下方法:

bysort year: ci dscomplete_binary, binomial wilson level(95)

这给出了具有 95% 置信区间的每年的输出。以前我使用 statsby 折叠数据集以将结果存储在变量中,但这会从内存中清除数据集,因此我必须不断地重新打开它。

有没有办法 运行 命令并以表格格式存储结果,以便数据以类似于此的方式存储:

    year     mean        LowerCI     UpperCI
r1  2005    .7031588    .69229454   .71379805
r2  2006    .75532377   .74504232   .7653212
r3  2007    .78125924   .77125096   .79094833
r4  2008    .80014324   .79059798   .80935836
r5  2009    .81860977   .80955398   .82732689
r6  2010    .82641232   .81723672   .83522016
r7  2011    .81854123   .80955547   .82719356
r8  2012    .83497983   .82621944   .8433823
r9  2013    .85411799   .84527379   .86253893
r10 2014    .84461939   .83499599   .85377985

我尝试了以下命令,它们对二项式 Wilson 选项给出了不同的估计:

svyset id2
bysort year: eststo: ci dscomplete_binary, binomial wilson level(95)

我认为 postfile 系列命令可以帮助您。这不会将您的数据保存到矩阵中,但会将 ci 命令的结果保存到一个新的数据集中,您可以为其命名并设置其结构。分析完成后,您可以加载postfile保存的数据,并以您选择的方式导出到Excel。

对于 postfile,您可以循环分析数据,而不是使用 bybysort

假设您的数据中的年份 运行 2005-2014,这里是示例代码:

/*make sure no postfile is open, in case a previous run did not close the file*/
cap postclose ci_results

/*create the postfile that will store results*/
postfile ci_results year mean lowerCI upperCI using ci_results.dta, replace

/*loop through years*/
forval y = 2004/2014 {
    ci dscomplete_binary if year==`y', binomial wilson level(95)
        /*store saved results from ci to postfile.  Make sure the post statement contains results in the same order stated in postfile command.*/
    post (`y') (r(mean)) (r(lb)) (r(ub))
}

/*close the postfile once you've looped through all the cases of interest*/
postclose ci_results
use ci_results.dta, clear

将 ci_results.dta 数据加载到内存后,您可以应用任何 Excel 您喜欢的导出命令。

这是对使用 statsby 的建议的进一步发展。反对意见非常令人费解,因为很容易回到原始数据集。重新加载数据集需要一些机器时间,但有多少个人时间用于寻找替代方案?

缺少我们可以使用的数据集,我提供了一个可重现的示例。

如果您想重复执行此操作,您将编写一个更精细的程序来执行此操作,这就是本论坛的全部内容。

我将如何将结果导出到 Excel 留给那些如此倾向的人:在任何情况下都没有提供所需内容的详细信息。

. sysuse auto, clear 
(1978 Automobile Data)

. preserve 

. statsby mean=r(mean) ub=r(ub) lb=r(lb), by(rep78) : ci foreign, binomial wilson level(95)  
(running ci on estimation sample)

      command:  ci foreign, binomial wilson
         mean:  r(mean)
           ub:  r(ub)
           lb:  r(lb)
           by:  rep78

Statsby groups
----+--- 1 ---+--- 2 ---+--- 3 ---+--- 4 ---+--- 5 
.....

. list 

     +----------------------------------------+
     | rep78       mean         ub         lb |
     |----------------------------------------|
  1. |     1          0   .6576198          0 |
  2. |     2          0   .3244076          0 |
  3. |     3         .1   .2562108   .0345999 |
  4. |     4         .5   .7096898   .2903102 |
  5. |     5   .8181818   .9486323   .5230194 |
     +----------------------------------------+

. restore 

. describe 

describe 结果将表明我们回到了起点。