[英]Calculate the proc lifetest 95%CI for median survival time using R survival package
我一直在嘗試使用R( survival
軟件包和survifit
函數)在SAS中復制proc lifetest
的結果-尤其是計算中位生存時間的95%置信區間。
我知道SAS使用以下公式來計算中位數的置信區間:
*abs(g(S(t))-g(1-0.5)/g'(S(t))σ(S(t)))<=1.96*
其中g'(x)是g(x)的一階導數,而σ(S(t))是生存曲線的標准誤差,並且SAS中g的默認變換是g(x)=log(-log(x))
因此,絕對值內的公式變為:
(log(-log(S(t)))-log(-log(0.5)))*S(t)*log(S(t))/σ(S(t))
這是使用survival
包中kidney
數據的示例:
fit1 = survfit(Surv(kidney$time,kidney$status)~kidney$sex, data=kidney)
print(fit1)
BCinds<-abs((log(-log(fit1$surv))-log(-log(0.5)))*fit1$surv*log(fit1$surv)/fit1$std.err)<=1.96
當我運行從print(fit1)
獲得的代碼時:
n events median 0.95LCL 0.95UCL
kidney$sex=1 20 18 22 12 63
kidney$sex=2 56 40 130 66 190
但是,當我通過BCinds
計算它時,對於性別= 1和性別= 2,我得到的差異BCinds
非常不同且更寬,CI為( BCinds
)。
sex=1 95%CI: (9, 154) sex=2 95%CI: (39, 511)
SAS代碼還會為同一數據集的中位生存時間產生不同的置信區間:
ods graphics on;
proc lifetest data=work.test
plots=survival(nocensor cb=hw cl strata=panel);
strata sex/group=sex;
time time*status(0);
run;
ods graphics off;
結果如下:
sex=1: median=22 and 95%CI: (12, 30)
sex=2: median=130 and 95%CI: (58,185)
關於為什么我得到如此不同結果的任何想法嗎? 還可以建議我如何使方法的最后一步自動化嗎? 目前,我以視覺方式進行操作,但是我想將其循環放置,所以我需要自動進行操作。
謝謝!
更新資料
因此,在R代碼中“隨機”鍵入參數后,我設法解決了部分問題。
因此, survfit
使用上面給出的公式的對數轉換來計算中值時間置信區間,這就是為什么R和SAS的區間(默認使用對數-對數轉換)之間存在分歧的原因。
因此,通過在R代碼中添加自變量,我們可以強制R以與SAS相同的方式計算置信區間。 因此,對於我上面給出的有關kidney
數據的示例,我們有:
`survfit(Surv(kidney$time,kidney$status)~kidney$sex, conf.type="log-log"
+ )
Call: survfit(formula = Surv(kidney$time, kidney$status) ~ kidney$sex,
conf.type = "log-log")
n events median 0.95LCL 0.95UCL
kidney$sex=1 20 18 22 12 30
kidney$sex=2 56 40 130 58 185`
我們可以從survfit
得到的其他置信區間類型是: “log”, “log-log”, “plain”, “none”
我仍然沒有弄清楚我用來獲得置信區間的代碼有什么問題,所以如果有人知道它有什么問題,我將不勝感激。
我想這是因為的fit1$std.err
部分BCinds
。 在這里,你應該以適合的標准誤差S(t)
-但fit1$std.err
(根據的R文件survfit.object )為您提供了累積風險或-log(存活)的標准誤差。 嘗試改用summary(fit1)$std.err
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.