代码之家  ›  专栏  ›  技术社区  ›  User12547645

我怎样才能用一个在R中有生存包的AFT模型来预测呢?

  •  2
  • User12547645  · 技术社区  · 7 年前

    我用的是 accelerated failure time / AFT model 用一个 weibull distribution 预测数据。我用的是 survival package 在R中,我将在训练和测试中分割数据,对训练集进行训练,然后尝试预测测试集的值。为此,我将通过测试集作为 newdata 参数,如 references . 我听到一个错误,说 新数据 与培训数据的大小不同(显然!)然后,该函数似乎对训练集的预测值进行了评估。

    如何预测新数据的值?

    # 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 回复  |  直到 7 年前
        1
  •  2
  •   Hack-R    7 年前

    问题似乎在您的因变量规范中。

    您的问题中缺少依赖项的数据和代码定义,因此我看不出具体的错误是什么,但它似乎不是正确的 Surv() 生存物体(见 ?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)
    
           302        636        727        121         85        612 
     33190.413  79238.898 111401.546  16792.180   4601.363  17698.895