Jak znaleźć grupy (trajektorie) wśród danych podłużnych?

11

Kontekst

Chcę ustawić scenę, zanim nieco rozwinę pytanie.

Mam dane podłużne, pomiary wykonywane na osobach co około 3 miesiące, pierwotny wynik jest liczbowy (jak ciągły do ​​1dp) w zakresie od 5 do 14, a większość (wszystkich punktów danych) wynosi od 7 do 10. Jeśli zrobię wykres spaghetti (z wiekiem na osi x i linią dla każdej osoby) to oczywiście bałagan, ponieważ mam> 1500 przedmiotów, ale istnieje wyraźny krok w kierunku wyższych wartości wraz ze wzrostem wieku (i jest to znane).

Szersze pytanie: Chcielibyśmy przede wszystkim być w stanie zidentyfikować grupy trendów (te, które zaczynają się wysoko i pozostają na wysokim poziomie, te, które zaczynają się na niskim poziomie i pozostają na niskim poziomie, te, które zaczynają się na niskim poziomie i rosną na wysokim poziomie itp.) przyjrzyj się poszczególnym czynnikom związanym z członkostwem w „grupie trendów”.

Moje pytanie dotyczy konkretnie pierwszej części, grupowania według trendów.

Pytanie

  • Jak możemy grupować indywidualne trajektorie wzdłużne?
  • Jakie oprogramowanie byłoby odpowiednie do wdrożenia tego?

Spojrzałem na Proc Traja w SAS i M-Plus zasugerowany przez kolegę, którego szukam, ale chciałbym wiedzieć, jakie są na ten temat myśli innych.

nzcoops
źródło
1
To tylko punkt wyjścia, ale być może sprawdź niektóre odpowiedzi na to pytanie: stats.stackexchange.com/questions/2777/...
Anglim
Dzięki Jeromy, opcja kml jest interesująca, podoba mi się pomysł, ponieważ jest on w R, ale nie jestem pewien, czy mogę użyć ich frameworku z moimi danymi, biorąc pod uwagę, że badani są w różnym wieku dla swoich wizyt, a nie dla „wizyty 1”. odwiedzić 2 'itd., a niektórzy mają 10 wizyt, podczas gdy inni mają 50 + ...
nzcoops,
Sprawdź kml pakiet - wydaje się, że zapewnia funkcjonalność, której potrzebujesz. Artykuł w JoSS szczegółowo to opisuje. Również kml3di kmlShapemoże być interesujące.
radek

Odpowiedzi:

11

Użyłem Mfuzz w R do grupowania zestawów danych mikromacierzy przebiegu czasowego. Mfuzz używa „miękkiego klastrowania”. Zasadniczo osoby mogą występować w więcej niż jednej grupie.

Jak wskazuje @Andy w komentarzu, oryginalny artykuł wykorzystuje dane CTN. Podejrzewam jednak, że powinno działać OK dla twoich dyskretnych danych. Zwłaszcza, że ​​właśnie eksplorujesz zestaw danych. Oto szybki przykład w 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))

Daje następujący wykres:

Klastrowanie Mfuzz

csgillespie
źródło
Dzięki za referencje, nie spotkałem się z tym wcześniej. Czy ten algorytm grupowania byłby odpowiedni w przypadku danych rozproszonych o małej liczbie, jak wspominał PO (lub danych dychotomicznych)? W dokumencie referencyjnym (Futschik i Carlisle 2005) wykorzystano dane, które przekształcono na ciągłe.
Andy W
@Andy: Dobra uwaga. Zawarłem szybką symulację. Wszystko wydaje się w porządku, ale może być bardziej optymalne rozwiązanie.
csgillespie
Dzięki @csgillespie, postaram się spróbować. Nawiasem mówiąc, moje dane są ciągłe, nie dyskretne, nie jestem pewien, czy pytanie nie było wystarczająco jasne lub czy to była literówka w twojej odpowiedzi? Muszę wycofać mój R, aby zainstalować Mfuzz, niech rozpocznie się zabawa.
nzcoops
@csgillespie - to jest bardzo fajne. Gram teraz z tym na prawdziwych danych. Czy zdarza ci się wiedzieć, czy istnieje sposób, aby oszacować liczbę grup?
Makro
4

Spodziewałbym się, że jest pakiet MPLUS do robienia tego, czego potrzebujesz. W Psychometrze jest artykuł na prawie dokładnie ten temat

springerlink.com/content/25r110007g417187

z wyjątkiem danych binarnych, a trajektorie są trajektoriami prawdopodobieństwa. Autorzy wykorzystują ukrytą analizę klas (zaimplementowaną za pomocą karanego modelu skończonej mieszanki) do grupowania trajektorii. Wiem też, że pierwszy autor około 10 lat temu napisał kilka innych artykułów z Bengtem Muthenem (twórcą MPLUS) na temat analizy ukrytych klas w podobnych ustawieniach (z trajektoriami). Na przykład,

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

brzmi bardzo podobnie do tego, o czym mówisz, ale wynik jest binarny. Ciągły przypadek jest znacznie prostszy, dlatego przeszukałbym literaturę wstecz (tj. Spojrzałem na dokumenty, do których odnoszą się te dokumenty), aby znaleźć coś, co pasuje do tego, co opisałeś dokładniej.

Aby dowiedzieć się więcej, możesz bezpośrednio zapytać właścicieli MPLUS, jakiego pakietu należy użyć, aby zrobić to, czego potrzebujesz. Zazwyczaj reagują bardzo szybko i są bardzo pomocne:

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

Makro
źródło