Modelo de Histórico de Eventos em Tempo Discreto (Sobrevivência) em R

10

Estou tentando ajustar um modelo de tempo discreto no R, mas não sei como fazê-lo.

Eu li que você pode organizar a variável dependente em linhas diferentes, uma para cada observação no tempo, e usar a glmfunção com um link logit ou cloglog. Neste sentido, tem três colunas: ID, Event(1 ou 0, em cada tempo-OBS) e Time Elapsed(desde o início da observação), mais as outras variáveis.

Como escrevo o código para ajustar-se ao modelo? Qual é a variável dependente? Eu acho que eu poderia usar Eventcomo variável dependente e incluir o Time Elapsednas covariáveis. Mas o que acontece com o ID? Eu preciso disso?

Obrigado.

Fran Villamil
fonte
Quando você diz "Estou tentando ajustar um modelo de tempo discreto" ... qual modelo você deseja ajustar? (Se for para algum assunto, adicione a self-studytag.)
Glen_b -Reinstate Monica
Quero ajustar um modelo de sobrevivência em tempo discreto da Logit.
precisa saber é o seguinte
11
Parece improvável que o ID seja relevante, mas depende do que, exatamente, representa e se é algo que você deseja modelar.
Glen_b -Reinstate Monica

Respostas:

8

Você está basicamente certo sobre a organização de dados. Se você tem casos organizados assim:

ID M1 M2 M3 EVENT

Você provavelmente desejará reorganizar os dados para que fiquem assim:

ID TIME EVENT
1  1    0
1  2    1
1  3    1
2  1    0
2  2    0
.  .    .
.  .    .

Eu chamo isso de conversão de um formato amplo para um formato longo. Isso é feito facilmente em R usando a reshape()função ou ainda mais facilmente com o reshape2pacote.

Pessoalmente, eu manteria o IDcampo por seu uso potencial na identificação de uma fonte de variação em um modelo de efeitos mistos. Mas isso não é necessário (como apontado por @BerndWeiss). O seguinte pressupõe que você deseja fazer isso. Caso contrário, ajuste um modelo semelhante glm(...,family=binomial)sem os termos do efeito aleatório.

O lme4pacote em R ajustará um modelo de regressão logística de efeitos mistos semelhante ao que você está falando, exceto com um efeito aleatório ou dois para explicar a variabilidade dos coeficientes entre os sujeitos ( ID). O exemplo a seguir seria um código de exemplo para ajustar um modelo de exemplo se seus dados forem armazenados em um quadro de dados chamado df.

require(lme4)
ans <- glmer(EVENT ~ TIME + (1+TIME|ID), data=df, family=binomial)

Esse modelo em particular permite que os coeficientes TIMEe os interceptcoeficientes variem aleatoriamente através do ID. Em outras palavras, esse é um modelo linear hierárquico de medidas aninhadas em indivíduos.

Uma forma alternativa de um modelo de histórico de eventos de tempo discreto divide TIMEem manequins discretos e se encaixa em cada um como parâmetro. Este é essencialmente o caso discreto do modelo Cox PH, porque a curva de risco não se restringe a ser linear (ou quadrática, ou, no entanto, você pode imaginar o tempo de transformação). No entanto, você pode agrupar TIMEem um conjunto gerenciável (por exemplo, pequeno) de períodos discretos, se houver muitos deles.

Alternativas adicionais envolvem a transformação do tempo para acertar sua curva de risco. O método anterior basicamente o impede de fazer isso, mas o método anterior é menos parcimonioso do que isso (e o caso linear original que eu coloquei) porque você pode ter muitos pontos no tempo e, portanto, muitos parâmetros incômodos.

Uma excelente referência sobre esse tópico é a Análise Longitudinal de Dados Aplicada de Judith Singer e John Willet : Modelando Mudanças e Ocorrência de Eventos .

ndoogan
fonte
4
Você não precisa de um "modelo de regressão logística de efeitos mistos" para estimar um modelo simples de tempo discreto (a Fiona Steel publicou alguns artigos sobre " Análise multinível de histórico de eventos em tempo discreto "). Você tem uma referência? Na etapa de preparação dos dados, também sugiro dar uma olhada na função survSplit .
precisa saber é o seguinte
6

Singer e Willett foram publicados bastante sobre esse assunto. Eu recomendo que você leia alguns de seus artigos . Você também pode querer obter o livro "Análise de dados longitudinal aplicada: modelagem de alterações e ocorrência de eventos" . Claramente, um dos melhores livros didáticos nesse campo.

Para a maioria dos capítulos de livros, há um código de amostra R (consulte os capítulos 11 e seguintes) que demonstra como seus dados devem ser estruturados ("formato de período de pessoa") e como analisar esse tipo de dados. Para um modelo de tempo discreto padrão, você não precisa da variável ID e também não precisa estimar um modelo de efeitos mistos, conforme sugerido por @ndoogan. Um simples glm(event ~ time + ..., family = "binomial")funciona muito bem. Singer e Willett também discutem muitas questões sobre como modelar a variável de tempo (linear, quadrática, ...)

Para citar mais duas referências que eu recomendo:

Bernd Weiss
fonte
1

Você pode dividir o tempo em intervalos e executar um modelo de logit multiperiodo como em Shumway (2001) . Por exemplo, os intervalos de tempo são . Eu implementei isso em R, que é diretamente aplicável se você tiver dados iniciais em uma configuração típica de evento de parada usada na análise de sobrevivência. observe que as estatísticas t do modelo resultante não possuem a correção mencionada em Shumway (2001).(0,1],(1,2],dynamichazard::static_glm

Esse método difere do @ndoogan com manequins de tempo, pois você só recebe uma interceptação comum em todos os períodos de tempo dynamichazard::static_glm. Você pode, contudo, obter um manequim para cada período chamando dynamichazard::get_survival_case_weights_and_datacom o argumento use_weights = FALSE, adicione o indicador manequim tempo a si mesmo para o retornou data.framee depois chamar por exemplo glm.

Benjamin Christoffersen
fonte
Além disso, você pode estar interessado nesta vinheta no meu pacote dynamichazard.
Benjamin Christoffersen
0

Isso é chamado de dados do "processo de contagem". O pacote de sobrevivência tem uma função tmerge () muito boa. É muito útil inserir covariáveis ​​dependentes do tempo ou cumulativas e dividir o tempo de acompanhamento de acordo. O processo está muito bem explicado nesta vinheta

Koray
fonte