Come trovare raggruppamenti (traiettorie) tra dati longitudinali?


11

Contesto

Voglio impostare la scena prima di espandere in qualche modo la domanda.

Ho dei dati longitudinali, le misurazioni sono state eseguite su argomenti ogni 3 mesi circa, il risultato primario è numerico (come in continuo a 1dp) nell'intervallo da 5 a 14 con la massa (di tutti i punti dati) compresa tra 7 e 10. Se faccio un la trama degli spaghetti (con l'età sull'asse x e una linea per ogni persona) è ovviamente un disastro dato che ho> 1500 soggetti, ma c'è un passo evidente verso valori più alti con un aumento dell'età (e questo è noto).

La domanda più ampia: ciò che vorremmo fare è in primo luogo essere in grado di identificare i gruppi di tendenza (quelli che iniziano in alto e rimangono in alto, quelli che iniziano in basso e rimangono bassi, quelli che iniziano in basso e aumentano in alto, ecc.) E quindi possiamo esaminare i singoli fattori associati all'adesione al "gruppo di tendenza".

La mia domanda qui riguarda specificamente la prima parte, il raggruppamento per tendenza.

Domanda

  • Come possiamo raggruppare singole traiettorie longitudinali?
  • Quale software sarebbe adatto per implementarlo?

Ho esaminato Proc Traj in SAS e M-Plus suggerito da un collega, che sto esaminando, ma vorrei sapere quali sono gli altri pensieri su questo.


1
È solo un punto di partenza, ma forse dai un'occhiata ad alcune delle risposte a questa domanda: stats.stackexchange.com/questions/2777/…
Jeromy Anglim,

Grazie Jeromy, l'opzione kml è interessante, mi piace l'idea data in R, ma non sono sicuro di poter usare il loro framework con i miei dati, dato che i soggetti arrivano in epoche diverse per le loro visite invece di 'visit 1' ' visita 2 'ecc. e alcuni hanno 10 visite mentre altri hanno 50 + ...
nzcoops il

Controlla il kml pacchetto - che sembra fornire la funzionalità di cui hai bisogno. L'articolo in JoSS lo descrive in dettaglio. Inoltre kml3de kmlShapepotrebbe essere di interesse.
Radek,

Risposte:


11

Ho usato Mfuzz in R per il clustering di set di dati di microarray nel tempo. Mfuzz utilizza il "soft-clustering". Fondamentalmente, gli individui possono apparire in più di un gruppo.

Come sottolinea @Andy nel commento, l'articolo originale utilizza i dati CTN. Tuttavia, sospetto che dovrebbe funzionare correttamente per i tuoi dati discreti. Soprattutto perché stai solo esplorando il set di dati. Ecco un breve esempio in R:

##It's a bioconductor package
library(Mfuzz)
library(Biobase)

## Simulate some data
## 6 time points and 90 individuals
tps = 6;cases = 90
d = rpois(tps*cases, 1)  ##Poisson distribution with mean 1
m = matrix(d, ncol=tps, nrow=cases)

##First 30 individuals have increasing trends
m[1:30,] = t(apply(m[1:30,], 1, cumsum))

##Next 30 have decreasing trends
##A bit hacky, sorry
m[31:60,] = t(apply(t(apply(m[31:60,], 1, cumsum)), 1, rev))

##Last 30 individuals have random numbers from a Po(1)

##Create an expressionSet object
tmp_expr = new('ExpressionSet', exprs=m)

##Specify c=3 clusters
cl = mfuzz(tmp_expr, c=3, m=1.25)
mfuzz.plot(tmp_expr,cl=cl, mfrow=c(2, 2))

Fornisce la seguente trama:

Clustering Mfuzz


Grazie per il riferimento, non mi ero mai imbattuto in questo prima. Questo algoritmo di clustering sarebbe appropriato con dati distribuiti a basso conteggio, come menzionato dall'OP (o dati dicotomici)? Il documento di riferimento (Futschik e Carlisle 2005) utilizzava i dati trasformati in continui.
Andy W,

@Andy: buon punto. Ho incluso una simulazione veloce. Sembra tutto a posto, ma potrebbe esserci una soluzione più ottimale.
csgillespie,

Grazie @csgillespie, cercheremo di provarlo. A proposito, i miei dati sono continui, non discreti, non sei sicuro che la domanda non sia abbastanza chiara o che fosse un errore di battitura nella tua risposta? Devo ripristinare la mia R per installare Mfuzz, che il divertimento abbia inizio.
nzcoops,

@csgillespie - è fantastico. Ci sto giocando con alcuni dati reali. Ti capita di sapere se esiste un modo per stimare il numero di gruppi?
Macro,

4

Mi aspetto che esista un pacchetto MPLUS per fare ciò di cui hai bisogno. C'è un articolo su Psychometrika su quasi esattamente questo argomento

springerlink.com/content/25r110007g417187

tranne che i dati sono binari e le traiettorie sono traiettorie di probabilità. Gli autori utilizzano l'analisi di classe latente (implementata utilizzando un modello di miscela finita penalizzata) per raggruppare le traiettorie. So anche che il primo autore ha scritto altri articoli circa 10 anni fa con Bengt Muthen (creatore di MPLUS) sull'analisi di classe latente in contesti simili (con traiettorie). Per esempio,

http://onlinelibrary.wiley.com/doi/10.1111/j.0006-341X.1999.00463.x/abstract

sembra molto simile a quello di cui stai parlando, tranne che il risultato è binario. Il caso continuo è molto più semplice, quindi farei una ricerca bibliografica all'indietro (cioè guardo i documenti a cui fanno riferimento questi articoli) per trovare qualcosa che corrisponda a ciò che hai descritto più precisamente.

Per saperne di più, puoi chiedere direttamente ai proprietari di MPLUS quale pacchetto devi usare per fare ciò di cui hai bisogno. In genere sono abbastanza veloci a rispondere e sono molto utili:

http://www.statmodel.com/cgi-bin/discus/discus.cgi

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.