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

时间:2016-07-15 15:37:01

标签: stata confidence-interval binomial-coefficients

我正在尝试计算95%二项式威尔逊置信区间,以确定每年完成治疗的人数比例(数据集列于每个人的行列表中)。

我想将结果存储到矩阵中,以便我可以使用putexcel命令将结果导出到现有的Excel电子表格而不更改工作表的格式。我创建了一个二进制变量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)

2 个答案:

答案 0 :(得分:2)

我认为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导出命令。

答案 1 :(得分:1)

这是对使用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结果将显示我们回到了我们开始的地方。