2017-04-17 53 views
1

我試圖生成一個關於ne2狀態序列的圖表,因爲它與ne3(下面的數據)中的發生日期有關。我的數據跨越了2004 - 2015年的11年。發病日期(ne3$date_inc)也在這11年內,但這些發病日期並不相同的不同身份證。我希望將發病日期作爲參考,以便使用seqdplot可以將每個id的發病日期前後的狀態分佈可視化,其中x軸根據發病日期具有相互參照(即前幾個月和發病日期之後)。然而,將根據發病日期的狀態日期引用爲零會導致發生前發生的狀態爲負值。任何想法,如果這可以使用TraMineR?還是其他建議?使用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)) 

回答

1

下面是如何使序列在發病日期對齊。

我們首先將您的SPELL數據轉換爲TraMineR使用的STS格式。由於序列長度超過100個,我們必須指定將存儲序列的表的最大列數(limit)。 所以我們首先計算序列的最大長度

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

現在我們該法術的數據轉換爲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 

應當注意,由於數據格式提供的開始和結束日期,一個每日時間粒度被使用。結果,我們得到了長達4019天的很長序列。

現在,我們需要移動序列來調整它們的發生日期。這可以使用TraMineRextrasseqstart函數完成。

該轉變是發病日期與其最小值之間的差異。因此,我們開始新的開始日期爲

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

我們裝載TraMineRextras來訪問seqstart

library(TraMineRextras) 

我們轉移序列,創建狀態序列對象,並使用seqdplot繪製。我們還在發生日期後的天數中定義x標籤。

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

注意的是,由於序列的長度,它需要幾分鐘的時間來生成的情節。我建議使用每月數據而不是每日數據。