2017-07-19 22 views
1

私はrandomForestSRCの中央生存率を計算しようとします。randomForestSRCの中央値生存率を計算する方法

library(randomForestSRC) 
data(veteran, package = "randomForestSRC") 
train <- sample(1:nrow(veteran), round(nrow(veteran) * 0.80)) 
veteran.grow <- rfsrc(Surv(time, status) ~ ., veteran[train, ], ntree = 100) 
veteran.pred <- predict(veteran.grow, veteran[-train , ]) 
print(veteran.grow) 
print(veteran.pred) 

問題私は

veteran.pred$survival 

生存関数を取得し、私は生存関数(値veteran.pred$survival== 0.5veteran.pred$time.interest)の中央値を取得したい、十分なため、最初の行の

a = as.data.frame(veteran.pred$time.interest) 
b= as.data.frame(veteran.pred$survival[1,]) 
df =cbind(a, b) 
df <-rename(df, `time` =`veteran.pred$time.interest`) 
df$`veteran.pred$survival[1, ]` = round(df$`veteran.pred$survival[15, ]`, 2) 
subset(df, df$`veteran.pred$survival[1, ]`== 0.5)$time 

生存関数はまったく重要ではありません0.5 私たちの場合は

[1] 1.00 1.00 1.00 0.95 0.95 0.95 0.95 0.93 0.93 0.93 0.93 0.93 0.93 0.93 0.90 0.90 0.90 0.87 0.87 0.87 
[21] 0.87 0.87 0.86 0.76 0.76 0.67 0.67 0.67 0.67 0.67 0.67 0.66 0.66 0.66 0.66 0.66 0.65 0.64 0.57 0.57 
[41] 0.57 0.57 0.57 0.57 0.57 0.48 0.45 0.39 0.39 0.32 0.32 0.29 0.29 0.29 0.29 0.26 0.26 0.25 0.25 0.25 
[61] 0.25 0.25 0.25 0.25 0.20 0.20 0.20 0.20 0.20 0.20 0.18 0.18 0.18 0.16 0.16 0.16 0.14 0.14 0.14 0.11 
[81] 0.07 0.07 

だから我々は、生存期間の中央値を計算するためにどのように最も近い値0.57 & 0.48 がありますか?

答えて

1

time.interestは、長さが検証セットのケース数よりもずっと長くなっているため、この目的に使用する正しい項目ではないと思います。 (それは私が本当にあなたを伝えることになっている正確に何か分からない、と述べた。)あなたはstr(veteran.pred)の出力を見ればあなたが一番上に表示さ:

str(veteran.pred) 
List of 32 
$ call   : language generic.predict.rfsrc(object = object, newdata = newdata, outcome.target = outcome.target,  importance = impo| __truncated__ ... 
$ family  : chr "surv" 
$ n    : int 27 
$ ntree   : num 100 
$ yvar   :'data.frame': 27 obs. of 2 variables: 
    ..$ time : int [1:27] 100 384 123 22 21 139 31 51 54 132 ... 
    ..$ status: int [1:27] 0 1 0 1 1 1 1 1 1 1 ... 
$ yvar.names : chr [1:2] "time" "status" 
$ xvar   :'data.frame': 27 obs. of 6 variables: 
    ..$ trt  : int [1:27] 1 1 1 1 1 1 1 1 1 1 ... 
    ..$ celltype: int [1:27] 1 2 2 2 2 2 2 2 2 3 ... 
    ..$ karno : int [1:27] 70 60 40 60 40 80 75 60 70 80 ... 
    ..$ diagtime: int [1:27] 6 9 3 4 2 2 3 1 1 5 ... 
    ..$ age  : int [1:27] 70 42 55 68 55 64 65 67 67 50 ... 
    ..$ prior : int [1:27] 0 0 0 0 10 0 0 0 0 0 ... 
$ xvar.names : chr [1:6] "trt" "celltype" "karno" "diagtime" ... 
# --- snipped 

が、私は27以来の数であることを考えますあなたは、予測リストにyvarアイテムを使用する必要がveteran[-train , ]の行は、:

str(veteran.pred$yvar) 
#'data.frame': 27 obs. of 2 variables: 
# $ time : int 100 384 123 22 21 139 31 51 54 132 ... 
# $ status: int 0 1 0 1 1 1 1 1 1 1 ... 
?survfit 
survfit(Surv(time,status)~1 , data=veteran.pred$yvar) 
#Call: survfit(formula = Surv(time, status) ~ 1, data = veteran.pred$yvar) 
# 
     n events median 0.95LCL 0.95UCL 
    27  24  54  49  139 
plot(survfit(Surv(time,status)~1 , data=veteran.pred$yvar)) 

enter image description here

私は、この手順を推薦について真剣に予約を持っています。そのリストのフォレストノード内にyvarという別のアイテムがあり、110行あることに注意してください(元のデータです)。あなたはあなたが得る未調整analsysisに伝統的なKM曲線の結果を見てIOF:

survfit(Surv(time,status)~1 , data=veteran.pred$forest$yvar) 
Call: survfit(formula = Surv(time, status) ~ 1, data = veteran.pred$forest$yvar) 

     n events median 0.95LCL 0.95UCL 
    110  104  87  53  111 

私は戦略が、特に、中央値のために非常に不安定な推定方法を提供するつもりさ80:20 CVから27例を考えますカテゴリの予測子があるとき。また、ランダムフォレストのパラダイムは、データの相互検証型分割を使用せずに、データセット全体から有用な予測を導くことができるはずであるとも考えています。

+0

私はあなたに同意しますが、私は 'rfsrc'がもっと正確な値を与えてくれると思います。ベテランはおもちゃの例です – Edward

+0

その理由はありますか? –

関連する問題