簡體   English   中英

如何計算平均生存時間

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM