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.
cph()
comando.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.Respostas:
@chl apontou para uma resposta específica à sua pergunta. A
cph
função do pacote 'rms' produzirá um Somers-D que pode ser transformado trivialmente em um índice-c. Entretanto, Harrell (que introduziu o índice c na prática bioestatística) acha que isso não é sensato como uma estratégia geral para avaliar medidas prognósticas, porque tem baixo poder de discriminação entre alternativas. Em vez de confiar na literatura cirúrgica para sua orientação metodológica, seria mais sensato procurar a sabedoria acumulada no texto de Harrell, "Estratégias de Modelagem de Regressão" ou "Modelos de Previsão Clínica" de Steyerberg.fonte
Dependendo das suas necessidades, a incorporação de um modelo em um modelo maior e a realização de um teste de taxa de verossimilhança para o valor agregado das variáveis adicionais fornecerão um teste poderoso. Meu livro fala sobre um índice decorrente dessa abordagem (o "índice de adequação").χ2
fonte