如何在R中使用生存包预测AFT模型?

时间:2018-07-02 16:24:30

标签: r prediction survival-analysis

我正在将accelerated failure time / AFT modelweibull distribution一起使用来预测数据。我正在使用R中的survival package进行此操作。我正在训练和测试中拆分数据,在训练集上进行训练,然后尝试预测测试集的值。为此,我将测试集作为newdata参数传递,如references中所述。我收到一个错误,说newdata与训练数据的大小不同(很明显!)。然后,该函数似乎要评估预测训练集的值。

如何预测新数据的值?

# get data
library(KMsurv)
library(survival)
data("kidtran") 
n = nrow(kidtran)
kidtran <- kidtran[sample(n),] # shuffle row-wise
kidtran.train = kidtran[1:(n * 0.8),]
kidtran.test = kidtran[(n * 0.8):n,]

# create model 
aftmodel <- survreg(kidtransurv~kidtran.train$gender+kidtran.train$race+kidtran.train$age, dist = "weibull")
predicted <- predict(aftmodel, newdata = kidtran.test)

编辑:如Hack-R所述,缺少此行代码

kidtransurv <- Surv(kidtran.train$time, kidtran.train$delta)

1 个答案:

答案 0 :(得分:2)

问题似乎出在您对因变量的说明中。

您的问题中缺少依赖项的数据和代码定义,因此我看不到具体的错误是什么,但是它似乎不是适当的Surv()生存对象(请参阅{{1 }}。

您的代码变体可以解决此问题,对格式进行了一些小的改进,并且运行良好:

?survreg
require(survival)
pacman::p_load(KMsurv)

library(KMsurv)
library(survival)
data("kidtran") 

n = nrow(kidtran)

kidtran       <- kidtran[sample(n),] 
kidtran.train <- kidtran[1:(n * 0.8),]
kidtran.test  <- kidtran[(n * 0.8):n,]

# Whatever kidtransurv was supposed to be is missing from your question,
#   so I will replace it with something not-missing
#   and I will make it into a proper survival object with Surv()

aftmodel  <- survreg(Surv(time, delta) ~ gender + race + age, dist = "weibull", data = kidtran.train)
predicted <- predict(aftmodel, newdata = kidtran.test)


head(predicted)