如何在Stata中用stcurve在一张图表中绘制不同的图形?

如何在Stata中用stcurve在一张图表中绘制不同的图形?,stata,Stata,我在Stata中使用stcurve绘制生存概率。我需要绘制所有数据的图表,然后绘制特定变量的图表。我可以在两个不同的图表中生成图形,但我需要在一个图表中将所有三条线放在一起 我尝试了addplot()选项,但得到的错误是stcurve不是twoway图形。你知道怎么做吗 这是我使用的代码,它分别在两个不同的图表中生成图形: stcurve, survival graphregion(lcolor(white) ilcolor(white) ifcolor(white) ) plot

我在Stata中使用
stcurve
绘制生存概率。我需要绘制所有数据的图表,然后绘制特定变量的图表。我可以在两个不同的图表中生成图形,但我需要在一个图表中将所有三条线放在一起

我尝试了
addplot()
选项,但得到的错误是
stcurve
不是
twoway
图形。你知道怎么做吗

这是我使用的代码,它分别在两个不同的图表中生成图形:

stcurve, survival   graphregion(lcolor(white)  ilcolor(white)    ifcolor(white) )  plotregion( lcolor(black))  title("Survival Function", size(vlarge))  ytitle("Survival probabilities", size(large))  xtitle("Time", size(large))  xlabel(,labsize(medium))  ylabel(,labsize(medium))

stcurve, survival at1( def=0) at2( def=1) graphregion(lcolor(white) ilcolor(white)   ifcolor(white) )  plotregion( lcolor(black)) legend(label(1 "X Firms") label(2 "Y Firms"))  legend(size(large))  lwidth(thin thick)  title("Survival Function", size(vlarge))  ytitle("Survival probabilities", size(large))  xtitle("Time", size(large))  xlabel(,labsize(medium))  ylabel(,labsize(medium))

我不确定我是否正确理解了你的要求。如果您在运行
stcurve
之前添加了所需的
stset
stcox
代码,那么它会很有用

如果Kaplan-Meier危险图与您的第一个
stcurve、survival
相同,您可以通过生成一个变量(例如:

sts gen s2=s
运行后
stset

然后将其绘制为一条与时间变量相对的直线。i、 e.将其添加到第二个图表的末尾:

addplot(line s2 your_timevar, sort c(J) title("Survival probabilities"))
仅当第一个图的预测值不超过
stset
中的
failvar
时,KM危险和Cox危险的相等性才成立。因此,如果您运行
stcox,则在
stset timevar、failvar)id(idvar)
之后估计
,它会工作,但如果
stcox
调用中有更多变量,则不会给出正确的绘图

编辑: 由于上述快速解决方案不起作用,还有另一个棘手的解决办法:将
stcurve
的结果保存在文件中(选项
outfile
),然后将“新”数据绘制为
双向
图形。大概是这样的:

stcurve, survival name("surv1") outfile(stcurve1.dta, replace)
stcurve, survival name("surv2") at1( def=0) at2( def=1) outfile(stcure2.dta, replace)

use stcurve1.dta, clear
rename surv1 surv1_A 
rename _t _tA
append using stcurve2.dta
twoway line surv1 _t, sort || line surv1_A _tA, sort

我不知道这是否适用于您的数据:可能是您需要以某种方式操纵outfile中的新变量以获得所需的结果,并且您需要将您想要的选项添加到
双向
图中。当您在单独的数据文件中拥有图形的数据时,当然有许多更好、更简单的方法来绘制此图,但这是第一个想到的解决方案

你可能想检查一下。请注意,
addplot()
仅用于“双向
graph twoway
的任何子命令”,因此它不能用于对
stcurve
的另一个调用。如果需要,请澄清:1)在单个组合图中并排显示两个图;或者2)一个图中有两条不同的曲线,一条Y轴(生存比例)和一条X轴(时间)。嗨,史蒂夫,我想要的是数字2,即一个图中的所有曲线都有相同的Y轴和X轴。实际上,我需要一个图形中的三条曲线,一条用于整个数据,另外两条曲线由def=0和def=1分隔。现在,使用上面的代码,我可以在一个图中为整个数据生成一个,在另一个图中生成下两个。但我需要所有三合一图表!谢谢你的帮助!谢谢你的回答。我试过了,但没用。如果有帮助的话,这就是我用来估算生存率的方法!:gen cn=公司编号//xtset cn time\U id//gen k=time\U id-1//gen j=time\U id//stset j,故障(def==1)来源(k)id(cn)//stcox Var1 Var2 Var3,nohr nolog vce(稳健)非常感谢您的帮助。我完全可以把这三条曲线放在一张图上。我还可以添加选项,但lwidth和lpattern不起作用。这是真的吗?Roberto Ferrer给出的链接也是一个解决方案(由May Bogges提供)。lwidth和lpattern处理双向图。我怀疑您在编写它时会像在
stcurve
中那样,而不是像在
twoway
中那样正确。在代码中添加选项
connect(lwidth(瘦)lpattern(实心))
。类似这样:
two-waylinesurv1\u t,sort c(lw(thin)lp(solid))| | linesurv1\u A\tA,sort c(lw(thing)lp(dash))
Perfect,它现在可以工作了。关于我的德语错误,你是对的。