Modèle d'historique d'événement à temps discret (survie) dans R

10

J'essaie d'adapter un modèle à temps discret dans R, mais je ne sais pas comment le faire.

J'ai lu que vous pouvez organiser la variable dépendante dans différentes lignes, une pour chaque observation de temps, et utiliser la glmfonction avec un lien logit ou cloglog. En ce sens, j'ai trois colonnes: ID, Event(1 ou 0, à chaque fois, obs) et Time Elapsed(depuis le début de l'observation), ainsi que les autres covariables.

Comment écrire le code pour l'adapter au modèle? Quelle est la variable dépendante? Je suppose que je pourrais utiliser Eventcomme variable dépendante et inclure le Time Elapseddans les covariables. Mais que se passe-t-il avec le ID? En ai-je besoin?

Merci.

Fran Villamil
la source
Quand vous dites "j'essaye d'adapter un modèle temporel discret" ... quel modèle voulez-vous adapter? (S'il s'agit d'un sujet, veuillez ajouter la self-studybalise.)
Glen_b -Reinstate Monica
Je veux adapter un modèle de survie à temps discret logit.
Fran Villamil
1
Il semble peu probable que l'ID soit pertinent, mais cela dépend de ce qu'il représente exactement et de ce que vous voulez modéliser.
Glen_b -Reinstate Monica

Réponses:

8

Vous avez fondamentalement raison sur l'organisation des données. Si vous avez des cas organisés comme ceci:

ID M1 M2 M3 EVENT

Vous souhaiterez probablement réorganiser les données afin qu'elles ressemblent à ceci:

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

J'appelle cela une conversion d'un format large à un format long. Cela se fait facilement en R en utilisant la reshape()fonction ou encore plus facilement avec le reshape2package.

Personnellement, je garderais le IDchamp de son utilisation potentielle pour identifier une source de variation dans un modèle à effets mixtes. Mais ce n'est pas nécessaire (comme l'a souligné @BerndWeiss). Ce qui suit suppose que vous voudriez le faire. Sinon, ajustez un modèle similaire glm(...,family=binomial)sans les termes à effet aléatoire.

Le lme4package dans R s'adaptera à un modèle de régression logistique à effets mixtes similaire à celui dont vous parlez, sauf avec un effet aléatoire ou deux pour tenir compte de la variabilité des coefficients entre les sujets ( ID). Voici un exemple de code pour ajuster un exemple de modèle si vos données sont stockées dans un bloc de données appelé df.

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

Ce modèle permet aux TIMEet les interceptcoefficients varient de façon aléatoire à travers ID. En d'autres termes, il s'agit d'un modèle mixte hiérarchique linéaire de mesures imbriqué chez des individus.

Une autre forme de modèle d'historique d'événement temporel discret se divise TIMEen variables muettes et s'adapte à chacune comme paramètre. C'est essentiellement le cas discret du modèle Cox PH parce que la courbe de risque n'est pas limitée à être linéaire (ou quadratique, ou cependant vous pouvez imaginer transformer le temps). Cependant, vous souhaiterez peut-être vous regrouper TIMEen un ensemble gérable (c'est-à-dire petit) de périodes discrètes s'il y en a beaucoup.

D'autres alternatives impliquent de transformer le temps pour obtenir la bonne courbe de risque. La méthode précédente vous évite d'avoir à le faire, mais la méthode précédente est moins parcimonieuse que celle-ci (et le cas linéaire d'origine que j'ai posé) car vous pouvez avoir beaucoup de points dans le temps et donc beaucoup de paramètres de nuisance.

Une excellente référence sur ce sujet est l' analyse appliquée des données longitudinales de Judith Singer et John Willet : Modélisation du changement et de l'occurrence d'événements .

ndoogan
la source
4
Vous n'avez pas besoin d'un "modèle de régression logistique à effets mixtes" pour estimer un modèle simple en temps discret (Fiona Steel a publié quelques articles sur "l' analyse historique des événements en temps discret à plusieurs niveaux "). Avez-vous une référence? Concernant l'étape de préparation des données, je suggère également de jeter un œil à la fonction survSplit .
Bernd Weiss
6

Singer et Willett ont beaucoup publié sur ce sujet. Je vous recommande fortement de lire certains de leurs articles . Vous voudrez peut-être également obtenir leur livre "Analyse des données longitudinales appliquées: Modélisation des changements et des événements" . Clairement l'un des meilleurs manuels dans ce domaine.

Pour la plupart des chapitres de livres, il existe un exemple de code R (voir les chapitres 11 et suivants) qui montre comment vos données doivent être structurées («format personne-période») et comment analyser ce type de données. Pour un modèle à temps discret standard, vous n'avez pas besoin de la variable ID et vous n'avez pas non plus besoin d'estimer un modèle à effets mixtes comme suggéré par @ndoogan. Un simple glm(event ~ time + ..., family = "binomial")fonctionne très bien. Singer et Willett discutent également de nombreuses questions sur la façon de modéliser la variable temporelle (linéaire, quadratique, ...)

Pour citer deux autres références que je recommande fortement:

Bernd Weiss
la source
1

Vous pouvez diviser le temps et le temps en intervalles et effectuer un modèle logit multipériode comme dans Shumway (2001) . Par exemple, vos intervalles de temps sont . J'ai implémenté ceci dans R qui est directement applicable si vous avez des données initiales dans une configuration typique d'événement d'arrêt utilisée dans l'analyse de survie. Do notez que les t-stats du modèle résultant n'ont pas la correction mentionnée dans Shumway (2001).(0,1],(1,2],dynamichazard::static_glm

Cette méthode diffère de celle de @ndoogan avec les nuls temporels car vous n'obtenez qu'une seule interception commune dans toutes les périodes avec dynamichazard::static_glm. Vous pouvez cependant obtenir un mannequin pour chaque période en appelant dynamichazard::get_survival_case_weights_and_dataavec argument use_weights = FALSE, en ajoutant vous-même l'indicateur de temps à celui renvoyé data.frame, puis en appelant par exemple glm.

Benjamin Christoffersen
la source
De plus, vous pourriez être intéressé par cette vignette dans mon colis dynamichazard.
Benjamin Christoffersen
0

C'est ce qu'on appelle des données de "processus de comptage". Le paquet de survie a une très bonne fonction tmerge (). Il est très utile d'insérer des covariables dépendantes du temps ou cumulatives et de partitionner le temps de suivi en conséquence. Le processus est très bien expliqué dans cette vignette

Koray
la source