Pesquisei o pacote de mouses e ainda não descobri uma maneira de usar as várias imputações para criar um modelo de Cox e validá-lo com a função do pacote rmsvalidate()
. Aqui está um código de amostra do que tenho até agora, usando o conjunto de dados veteran
:
library(rms)
library(survival)
library(mice)
remove(veteran)
data(veteran)
veteran$trt=factor(veteran$trt,levels=c(1,2))
veteran$prior=factor(veteran$prior,levels=c(0,10))
#Set random data to NA
veteran[sample(137,4),1]=NA
veteran[sample(137,4),2]=NA
veteran[sample(137,4),7]=NA
impvet=mice(veteran)
survmod=with(veteran,Surv(time,status))
#make a CPH for each imputation
for(i in seq(5)){
assign(paste("mod_",i,sep=""),cph(survmod~trt+celltype+karno+age+prior,
data=complete(impvet,i),x=T,y=T))
}
#Now there is a CPH model for mod_1, mod_2, mod_3, mod_4, and mod_5.
Agora, se eu estivesse trabalhando apenas com um modelo de CPH, faria o seguinte:
validate(mod_1,B=20)
O problema que estou enfrentando é como usar os 5 modelos de CPH (1 para cada imputação) e poder criar um modelo em pool com o qual eu possa usar rms
. Eu sei que o mice
pacote tem alguns built-in pooling funções, mas eu não acredito que eles trabalham com o cph
objeto rms
. A chave aqui é poder ainda usar rms
após o pool. Procurei usar a aregImpute()
função de Harrell, mas estou tendo problemas para seguir os exemplos e a documentação; mice
parece mais simples de usar.
Respostas:
A
fit.mult.impute
função noHmisc
pacote desenhará imputações criadas a partirmice
da mesma forma que a partir dearegImpute
.cph
vai trabalhar comfit.mult.impute
. A questão mais difícil é como fazer a validação por meio de reamostragem ao fazer imputações múltiplas. Não acho que alguém tenha realmente resolvido isso. Normalmente, tomo o caminho mais fácil e uso a imputação única para validar o modelo, usando aHmisc transcan
função, mas usando a imputação múltipla para ajustar o modelo final e obter erros padrão.fonte
fit.mult.impute()
:: Use isso para agrupar oscph()
modelos (5 deles, com base em 5 imputaçõesmice
) e obter taxas de risco agrupadas e erros padrão.transcan()
: Use isso para criar uma única imputação e validar isso. Parece que isso fornece uma validação suficientemente boa. Tudo isso está correto? Realmente aprecio sua ajuda, Dr. Harrell.