Eu criei alguns modelos de regressão de Cox e gostaria de ver o desempenho desses modelos e pensei que talvez uma curva ROC ou uma estatística c possa ser útil semelhante ao uso deste artigo:
Armitage usou regressão logística, mas me pergunto se é possível usar um modelo do pacote de sobrevivência, o survivalROC dá uma dica disso, mas não consigo descobrir como fazer isso funcionar com uma regressão Cox regular.
Ficaria muito grato se alguém me mostrasse como fazer uma análise ROC neste exemplo:
library(survival)
data(veteran)
attach(veteran)
surv <- Surv(time, status)
fit <- coxph(surv ~ trt + age + prior, data=veteran)
summary(fit)
Se possível, eu apreciaria a saída c-statics bruta e um bom gráfico
Obrigado!
Atualizar
Muito obrigado pelas respostas. @ Dwin: Gostaria apenas de ter certeza de que entendi bem antes de selecionar sua resposta.
O cálculo como eu o entendo de acordo com a sugestão de DWin:
library(survival)
library(rms)
data(veteran)
fit.cph <- cph(surv ~ trt + age + prior, data=veteran, x=TRUE, y=TRUE, surv=TRUE)
# Summary fails!?
#summary(fit.cph)
# Get the Dxy
v <- validate(fit.cph, dxy=TRUE, B=100)
# Is this the correct value?
Dxy = v[rownames(v)=="Dxy", colnames(v)=="index.corrected"]
# The c-statistic according to the Dxy=2(c-0.5)
Dxy/2+0.5
Não estou familiarizado com a função validar e a inicialização, mas depois de analisar o prof. A resposta de Frank Harrel aqui no R-help eu achei que provavelmente é o caminho para obter o Dxy. A ajuda para validar estados:
... A correlação de classificação Dxy de Somers deve ser calculada a cada nova amostra (isso leva um pouco mais do que as estatísticas baseadas em probabilidade). Os valores correspondentes à linha Dxy são iguais a 2 * (C - 0,5), onde C é o índice C ou a probabilidade de concordância.
Acho que estou principalmente confuso com as colunas. Achei que o valor corrigido é o que devo usar, mas ainda não entendi a saída validada:
index.orig training test optimism index.corrected n
Dxy -0.0137 -0.0715 -0.0071 -0.0644 0.0507 100
R2 0.0079 0.0278 0.0037 0.0242 -0.0162 100
Slope 1.0000 1.0000 0.2939 0.7061 0.2939 100
...
Na pergunta R-help, entendi que deveria ter "surv = TRUE" no cph se tiver estratos, mas não tenho certeza sobre qual é o objetivo do parâmetro "u = 60" na função validate. Ficaria muito grato se você pudesse me ajudar a entender isso e verificar se não cometi nenhum erro.
index.corrected
é o que deve ser enfatizado. Essas são estimativas de provável desempenho futuro. u=60
não é necessário, validate
pois você não possui estratos. Se você tivesse estratos, as curvas de sobrevivência podem se cruzar e é necessário especificar um ponto de tempo específico para obter a área ROC generalizada.
cph()
comando.