Modello di storia degli eventi a tempo discreto (Sopravvivenza) in R


10

Sto cercando di adattare un modello a tempo discreto in R, ma non sono sicuro di come farlo.

Ho letto che puoi organizzare la variabile dipendente in diverse righe, una per ogni osservazione temporale e utilizzare la glmfunzione con un collegamento logit o cloglog. In questo senso, ho tre colonne: ID, Event(1 o 0, in ogni tempo-obs) e Time Elapsed(dall'inizio dell'osservazione), più le altre covariate.

Come faccio a scrivere il codice per adattarlo al modello? Qual è la variabile dipendente? Immagino che potrei usare Eventcome variabile dipendente e includere il Time Elapsednelle covariate. Ma cosa succede con il ID? Ne ho bisogno?

Grazie.


Quando dici "Sto cercando di adattarmi a un modello temporale discreto" ... quale modello vuoi adattare? (Se questo è per qualche argomento, si prega di aggiungere il self-studytag.)
Glen_b -Reinstate Monica

Voglio adattarmi a un modello di sopravvivenza a tempo discreto logit.
Fran Villamil,

1
Sembra improbabile che l'ID sia pertinente, ma dipende da cosa, esattamente rappresenta e se è qualcosa che vuoi modellare.
Glen_b -Restate Monica

Risposte:


8

Hai praticamente ragione sull'organizzazione dei dati. Se hai casi organizzati in questo modo:

ID M1 M2 M3 EVENT

Probabilmente vorrai riorganizzare i dati in modo che appaiano così:

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

Io chiamo questo una conversione da un formato ampio a un formato lungo. È fatto facilmente in R usando la reshape()funzione o ancora più facilmente con il reshape2pacchetto.

Personalmente terrei il IDcampo per il suo potenziale utilizzo nell'identificare una fonte di variazione in un modello di effetti misti. Ma questo non è necessario (come sottolineato da @BerndWeiss). Quanto segue presume che tu voglia farlo. Altrimenti, adatta un modello simile glm(...,family=binomial)senza i termini dell'effetto casuale.

Il lme4pacchetto in R si adatta a un modello di regressione logistica a effetti misti simile a quello di cui stai parlando, tranne con un effetto casuale o due per tenere conto della variabilità dei coefficienti tra i soggetti ( ID). Il seguente sarebbe un codice di esempio per adattare un modello di esempio se i tuoi dati sono memorizzati in un frame di dati chiamato df.

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

Questo particolare modello consente ai TIMEei interceptcoefficienti variano casualmente tra ID. In altre parole, questo è un modello misto lineare gerarchico di misure nidificate negli individui.

Una forma alternativa di un modello di cronologia di eventi a tempo discreto si divide TIMEin manichini discreti e si adatta a ciascuno come parametro. Questo è essenzialmente il caso discreto del modello Cox PH perché la curva di rischio non si limita ad essere lineare (o quadratica, o comunque si può immaginare di trasformare il tempo). Tuttavia, potresti voler raggruppare TIMEin un insieme gestibile (cioè piccolo) di periodi di tempo discreti se ce ne sono molti.

Ulteriori alternative comportano la trasformazione del tempo per ottenere la curva del pericolo corretta. Il metodo precedente sostanzialmente ti allevia dal doverlo fare, ma il metodo precedente è meno parsimonioso di questo (e il caso lineare originale che ho proposto) perché potresti avere molti punti temporali e quindi molti parametri fastidiosi.

Un eccellente riferimento su questo argomento è l' analisi dei dati longitudinali applicati di Judith Singer e John Willet : modellazione del cambiamento e occorrenza di eventi .


4
Non è necessario un "modello di regressione logistica a effetti misti" per stimare un semplice modello a tempo discreto (Fiona Steel ha pubblicato alcuni articoli su " Analisi della cronologia degli eventi a tempo discreto multilivello "). Hai un riferimento? Per quanto riguarda la fase di preparazione dei dati, suggerisco anche di dare un'occhiata alla funzione survSplit .
Bernd Weiss,

6

Singer e Willett sono stati pubblicati molto su questo argomento. Consiglio vivamente di leggere alcuni dei loro articoli . Potresti anche ottenere il loro libro "Applied Longitudinal Data Analysis: Modeling Change and Event Occurrence" . Chiaramente uno dei migliori libri di testo in questo campo.

Per la maggior parte dei capitoli di libri è disponibile un codice R di esempio (vedere i capitoli 11 e seguenti) che dimostra come i dati devono essere strutturati ("formato periodo persona") e come analizzare quel tipo di dati. Per un modello standard a tempo discreto non è necessaria la variabile ID e non è inoltre necessario stimare un modello a effetti misti come suggerito da @ndoogan. Un semplice glm(event ~ time + ..., family = "binomial")funziona bene. Singer e Willett discutono anche di molte questioni su come modellare la variabile temporale (lineare, quadratica, ...)

Per citare altri due riferimenti che consiglio vivamente:


1

(0,1],(1,2],...dynamichazard::static_glm

Questo metodo differisce da quello di @ndoogan con i manichini temporali poiché ottieni solo un'intercettazione comune in tutti i periodi di tempo con dynamichazard::static_glm. Tuttavia, puoi ottenere un manichino per ogni periodo chiamando dynamichazard::get_survival_case_weights_and_datacon argomento use_weights = FALSE, aggiungi tu stesso l'indicatore del tempo fittizio al reso data.framee quindi chiama ad es glm.


Inoltre, potresti essere interessato a questa vignetta nel mio pacchetto dynamichazard.
Benjamin Christoffersen,

0

Questo si chiama "processo di conteggio" dei dati. Il pacchetto di sopravvivenza ha una funzione tmerge () molto bella. È molto utile inserire le covariate dipendenti dal tempo o cumulative e il tempo di follow-up della partizione di conseguenza. Il processo è molto ben spiegato in questa vignetta

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.