Как я могу предсказать, используя модель AFT с пакетом выживания в R? - PullRequest
0 голосов
/ 02 июля 2018

Я использую ускоренное время отказа / модель AFT с распределением Вейбулла для прогнозирования данных. Я делаю это, используя пакет выживания в R. Я делю свои данные на тренировку и тестирование, тренируюсь на тренировочном наборе и после этого пытаюсь предсказать значения для тестового комплекта. Для этого я передаю набор тестов в качестве параметра newdata, как указано в ссылки . Я получаю сообщение об ошибке, говорящее, что 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 голосов
/ 02 июля 2018

Кажется, проблема в вашей спецификации зависимой переменной.

В вашем вопросе отсутствовало определение данных и кода зависимого лица, поэтому я не вижу, в чем заключалась конкретная ошибка, но это не был правильный 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
...