2017-08-10 3 views
1

私はmlrと他のパッケージを使用して生存解析を行っています。 mlrでは、私はsurv.rpartとsurv.glmboostを使用します。私も元のパッケージrpartとmboostを使ってこれを行います。彼らの結果は違っている。次の例を見てみてください:mlrを使用し、rpartとmboostのような他のパッケージをRで使用しているときに異なる結果を挿入する方法

> myData2 <- data.frame(DaySum=c(3,2,1,6,3,2,2,5,2,7,2), 
         DaysDiff=c(24,4,5,12,3,31,131,6,35,18,19), 
         Status='TRUE') 
> myData2$Status <- as.logical(myData2$Status) 
> myTrain <- c(1:(nrow(myData2)-1)) 
> myTest <- nrow(myData2) 

私はMLRでsurv.rpartを使用すると、結果は次のとおりです。

> surv.task <- makeSurvTask(data=myData2,target=c('DaysDiff','Status')) 
> surv.lrn <- makeLearner("surv.rpart") 
> mod <- train(learner=surv.lrn,task=surv.task,subset=myTrain) 
> surv.pred <- predict(mod,task=surv.task,subset=myTest) 
> surv.pred 
Prediction: 1 observations 
predict.type: response 
threshold: 
time: 0.00 
    id truth.time truth.event response 
11 11   19  TRUE  1 

私は元RPARTパッケージを使用する場合、結果は次のとおりです。

> train <- myData2[1:(nrow(myData2)-1),] 
> test <- myData2[nrow(myData2),] 
> fit <- rpart(DaysDiff~DaySum,data=train) 
> predict(fit,newdata=test) 
[1] 26.9 

どのように2つの異なる結果が得られましたか? rpartパッケージのように見えますが、mlrの結果に何らかの変換があるのに対し、私は望む結果を直接与えてくれます。私はsurv.glmboostを使用するときに同じことが起こります:ここで

> surv.task <- makeSurvTask(data=myData2,target=c('DaysDiff','Status')) 
Warning messages: 
1: Unknown or uninitialised column: 'Weibull'. 
2: Unknown or uninitialised column: 'Cox'. 
3: Unknown or uninitialised column: 'Month2'. 
4: Unknown or uninitialised column: 'Month2'. 
5: Unknown or uninitialised column: 'Month'. 
6: Unknown or uninitialised column: 'Month'. 
7: Unknown or uninitialised column: 'MonthsDiff'. 
8: Unknown or uninitialised column: 'Weibull'. 
9: Unknown or uninitialised column: 'Cox'. 
> surv.lrn <- makeLearner("surv.glmboost") 
> mod <- train(learner=surv.lrn,task=surv.task,subset=myTrain) 
Warning message: 
In names(data) != all.vars(formula[[2]]) : 
    longer object length is not a multiple of shorter object length 
> surv.pred <- predict(mod,task=surv.task,subset=myTest) 
> surv.pred 
Prediction: 1 observations 
predict.type: response 
threshold: 
time: 0.00 
    id truth.time truth.event response 
11 11   19  TRUE -0.1946239 

がmboostパッケージを使用した結果である:

> train <- myData2[1:(nrow(myData2)-1),] 
Warning messages: 
1: Unknown or uninitialised column: 'Weibull'. 
2: Unknown or uninitialised column: 'Cox'. 
3: Unknown or uninitialised column: 'Month2'. 
4: Unknown or uninitialised column: 'Month2'. 
5: Unknown or uninitialised column: 'Month'. 
6: Unknown or uninitialised column: 'Month'. 
7: Unknown or uninitialised column: 'MonthsDiff'. 
8: Unknown or uninitialised column: 'Weibull'. 
9: Unknown or uninitialised column: 'Cox'. 
> test <- myData2[nrow(myData2),] 
> fit <- glmboost(DaysDiff~DaySum,data=train) 
> predict(fit,newdata=test) 
     [,1] 
[1,] 33.08294 

これは私がこれまでに見つかったものです。これはsurv.cforestのような他の関数にも起こる可能性があります。私の質問です:なぜこれは起こりますか?そして、mlrパッケージを使用すると、rpartやmboostのような結果をどのように得ることができますか?

+0

を.. –

答えて

1

問題は、rpartとglmboostで生存モデルを適合させるのではなく、単純な回帰モデルです。 RPARTでの生存モデルをあてはめる

は次のようになります。

fit = rpart(Surv(DaysDiff, event = Status) ~ DaySum,data=train, method = "exp") 
predict(fit,newdata=test) 

だから、完全な比較コードは同じ結果(それぞれが1を予測する)を与える:彼らは異なるパラメータを使用しているため、おそらく

library(mlr) 
myData2 = data.frame(DaySum=c(3,2,1,6,3,2,2,5,2,7,2), 
    DaysDiff=c(24,4,5,12,3,31,131,6,35,18,19), 
    Status='TRUE') 
myData2$Status = as.logical(myData2$Status) 
train = myData2[1:(nrow(myData2)-1),] 
test = myData2[nrow(myData2),] 
surv.task = makeSurvTask(data=train,target=c('DaysDiff','Status')) 
surv.lrn = makeLearner("surv.rpart") 
mod = train(learner=surv.lrn,task=surv.task,subset=myTrain) 
surv.pred = predict(mod,newdata = test) 
surv.pred 
library(rpart) 
library(survival) 
fit = rpart(Surv(DaysDiff, event = Status) ~ DaySum,data=train, method = "exp") 
predict(fit,newdata=test) 
+0

これは素晴らしいことです。どうもありがとう。 –

関連する問題