[英]How to compute the mean survival time
我正在使用survival
庫。 在計算生存 function 的 Kaplan-Meier 估計量后:
km = survfit(Surv(time, flag) ~ 1)
我知道如何計算百分位數:
quantile(km, probs = c(0.05,0.25,0.5,0.75,0.95))
但是,如何計算平均生存時間?
平均存活時間通常取決於為最大存活時間選擇的值。 您可以通過print(km, print.rmean=TRUE)
獲得受限制的平均生存時間print(km, print.rmean=TRUE)
。 默認情況下,這假設最長生存時間等於數據中最長的生存時間。 您可以通過添加rmean
參數將其設置為不同的值(例如, print(km, print.rmean=TRUE, rmean=250)
)。
回應你的評論:我最初認為可以通過查看print(km, print.rmean=TRUE)
返回的對象print(km, print.rmean=TRUE)
來提取平均生存時間,但事實證明print.survfit
不會返回列表對象但是只是將文本返回到控制台。
相反,我查看了print.survfit
的代碼(您可以通過在控制台中鍵入getAnywhere(print.survfit)
來查看代碼)以查看平均生存時間的計算位置。 事實證明,一個名為survmean
的函數會處理這個問題,但它不是一個導出的函數,這意味着當你嘗試像“普通”函數那樣運行它時,R將無法識別該函數。 因此,要訪問該函數,您需要運行下面的代碼(您需要在rmean
顯式設置rmean
):
survival:::survmean(km, rmean=60)
您將看到該函數返回一個列表,其中第一個元素是具有多個命名值的矩陣,包括均值的均值和標准誤差。 因此,要提取平均生存時間,您可以:
survival:::survmean(km, rmean=60) [[1]]["*rmean"]
print.survfit
的幫助提供了有關選項以及如何計算受限平均值的詳細信息:
?print.survfit
均值及其方差基於截斷的估計。 也就是說,如果最后一次觀察不是死亡,那么生存曲線估計不會變為零並且平均值是不確定的。 有四種可能的解決方法,由rmean選項選擇。 第一種是將上限設置為常數,例如rmean = 365。 在這種情況下,報告的平均值將是每組中將經歷的前365天的預期天數。 如果興趣集中在固定期間,這將非常有用。 其他選項是“無”(無估計),“共同”和“個人”。 “common”選項使用對象中所有曲線的最大時間作為auc計算的公共上限。 對於“單個”選項,平均值計算為每條曲線下的面積,范圍從0到該曲線的最大觀察時間。 由於終點是隨機的,因此不同曲線的值不具有可比性,並且打印的標准誤差是低估的,因為它們沒有考慮這種隨機變化。 此選項主要用於向后兼容性,因為此估計值是早期版本代碼中的默認值(僅)。 請注意,SAS(自版本9.3起)使用每個曲線的最后一個事件時間的積分; 我們認為這是最糟糕的選擇,並沒有提供該計算的選項。
使用尾部公式(並且由於我們的變量是非負的),您可以將均值計算為 1-CDF 從 0 到無窮大的積分,它等於 Survival function 的積分。
如果我們用非參數 KM 估計替換參數生存曲線,則生存曲線只會延伸到我們數據集中的最后一個時間點。 從那里開始,它“假設”該線繼續筆直。 因此,我們只能以“受限”方式使用尾部公式,直到我們可以定義某個截止點(默認為數據集中的最后一個時間點)。
您可以使用打印 function 或手動計算它:
print(km, print.rmean=TRUE) # print function
sum(diff(c(0,km$time))*c(1,km$surv[1:(length(km$surv)-1)])) # manually
我在時間向量的開頭添加 0,在生存向量的開頭添加 1,因為它們不包括在內。 我只將生存向量帶到最后一點,因為那是最后一塊。 這基本上計算了到數據中最后一個時間點的生存曲線下的面積。
如果您在最后一個點之后設置一個手動截止點,它會簡單地添加該區域; 例如,這里:
print(km, print.rmean=TRUE, rmean=4) # gives out 1.247
print(km, print.rmean=TRUE, rmean=4+2) # gives out 1.560
1.247+2*min(km$surv) # gives out 1.560
如果截止值低於最后一個值,它將只計算到該點的 KM 曲線下的面積。
無需使用“隱藏的” survival:::survmean(km, rmean=60)
。
僅使用summary(km)$table[,5:6]
,它會為您提供 RMST 及其 SE。 可以使用正態分布的適當分位數計算 CI。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.