2017-04-17 4 views
1

J'essaie de générer un tracé reliant la séquence d'états ne2 en ce qui concerne une date d'incidence dans ne3 (données ci-dessous). J'ai des données couvrant une période de 11 ans de 2004-2015. La date d'incidence (ne3$date_inc) est également dans cette période de 11 ans, mais ces dates d'incidence ne sont pas égales pour les différents id's. J'aimerais avoir la date d'incidence comme référence, afin que la distribution des états avant et après cette date d'incidence pour chaque identifiant puisse être visualisée en utilisant seqdplot où l'axe x a alors une référence mutuelle en fonction de la date d'incidence (ie mois avant et après la date d'incidence). Toutefois, le fait de référencer les dates d'état en fonction de la date d'incidence en tant que zéro entraîne des valeurs négatives pour les états survenant avant l'incidence. Toute idée si cela peut être fait en utilisant TraMineR? Ou d'autres suggestions?Visualisation séquence d'états en fonction d'une date d'incidence en utilisant TraMineR

library(TraMineR) 
ne2 <- structure(list(id = c(4885109L, 4885109L, 4885109L, 7673891L, 
    11453161L, 13785017L, 13785017L, 16400365L), status = structure(c(4L, 
    2L, 3L, 4L, 4L, 1L, 5L, 4L), .Label = c("A", "B", "C", "D", "E" 
    ), class = "factor"), date_start = structure(c(12432, 15262, 
    15385, 12432, 12432, 12432, 14318, 12432), class = "Date"), date_end = structure(c(15262, 
    15385, 16450, 16450, 16450, 14318, 16450, 16450), class = "Date")), class = "data.frame", .Names = c("id", 
    "status", "date_start", "date_end"), row.names = c(NA, -8L)) 

ne3 <- structure(list(id = c(4885109L, 7673891L, 11453161L, 13785017L, 
     16400365L), date_inc = structure(c(15170, 13406, 13528, 13559, 
     15598), class = "Date")), .Names = c("id", "date_inc"), class = "data.frame", row.names = c(NA, 
     -5L)) 

Répondre

1

Voici comment vous pouvez aligner les séquences sur leur date d'incidence.

Nous commençons par transformer vos données SPELL au format STS utilisé par TraMineR. Puisque les séquences sont plus longues que 100, nous devons spécifier le nombre maximum de colonnes (limit) de la table qui va stocker les séquences. Nous avons donc d'abord calculer la longueur maximale des séquences

limit <- max(ne2$date_end) - min(ne2$date_start) 

Maintenant, nous transformons les données orthographiques dans le formulaire STS

ne2.sts <- seqformat(ne2, id='id', begin='date_start', end='date_end', status='status', 
        from='SPELL', to='STS', limit=as.numeric(limit), process=FALSE) 

dim(ne2.sts) 
## [1] 5 4019 

Notez que depuis les dates de début et de fin sont fournis au format de données, un la granularité quotidienne est utilisée. En conséquence, nous obtenons de très longues séquences de 4019 jours.

Maintenant, nous devons déplacer les séquences pour aligner leur date d'incidence. Cela peut être fait avec la fonction seqstart de TraMineRextras.

Le décalage est la différence entre la date d'incidence et son minimum. Nous avons donc la nouvelle date de départ comme

ne3$bd <- ne3$date_inc - min(ne3$date_inc) + min(ne2$date_start) 

On charge TraMineRextras pour accéder à seqstart

library(TraMineRextras) 

Nous déplaçons les séquences, créer l'objet de séquence d'états et tracer avec seqdplot. Nous définissons également les étiquettes x en nombre de jours à partir de la date d'incidence.

ne2.sts.a <- seqstart(ne2.sts, data.start=min(ne2$date_start), new.start=ne3$bd) 
inc.pos <- as.numeric(ne3$date_inc[1] - ne3$bd[1]) 
xtlab <- 1:ncol(ne2.sts.a) - inc.pos + 1 
ne2.a.seq <- seqdef(ne2.sts.a, xtstep=365, cnames=xtlab) 
seqdplot(ne2.a.seq, border=NA) 

chronogram of shifted sequences

Notez qu'en raison de la longueur des séquences, il faut quelques minutes pour tracer la courbe. Je suggère d'utiliser des données mensuelles plutôt que des données quotidiennes.