Bagaimana menemukan pengelompokan (lintasan) di antara data longitudinal?

11

Konteks

Saya ingin mengatur adegan sebelum sedikit memperluas pertanyaan.

Saya memiliki data longitudinal, pengukuran dilakukan pada subjek kira-kira setiap 3 bulan, hasil primer adalah numerik (seperti dalam kontinu hingga 1dp) dalam kisaran 5 hingga 14 dengan bulk (dari semua titik data) antara 7 dan 10. Jika saya melakukan plot spaghetti (dengan usia pada sumbu x dan garis untuk setiap orang) jelas berantakan karena saya memiliki> 1500 subjek, tetapi ada tapak yang jelas menuju nilai yang lebih tinggi dengan bertambahnya usia (dan ini diketahui).

Pertanyaan yang lebih luas: Apa yang ingin kita lakukan adalah pertama-tama dapat mengidentifikasi kelompok yang sedang tren (kelompok yang mulai tinggi dan tetap tinggi, yang mulai rendah dan tetap rendah, yang mulai rendah dan naik ke tinggi dll) dan kemudian kita bisa lihat faktor-faktor individual yang terkait dengan keanggotaan 'kelompok tren'.

Pertanyaan saya di sini secara khusus berkaitan dengan bagian pertama, pengelompokan berdasarkan tren.

Pertanyaan

  • Bagaimana kita bisa mengelompokkan lintasan individual longitudinal?
  • Perangkat lunak apa yang cocok untuk mengimplementasikan ini?

Saya telah melihat Proc Traj di SAS dan M-Plus yang disarankan oleh seorang kolega, yang saya cari, tetapi saya ingin tahu apa pendapat orang lain tentang hal ini.

nzcoops
sumber
1
Ini hanya titik awal, tetapi mungkin periksa beberapa jawaban untuk pertanyaan ini: stats.stackexchange.com/questions/2777/…
Jeromy Anglim
Terima kasih Jeromy, opsi kml menarik, saya suka ide yang diberikan itu dalam R, tetapi saya tidak yakin saya bisa menggunakan kerangka kerja mereka dengan data saya, mengingat subjek datang dalam usia yang berbeda untuk kunjungan mereka dan bukan 'kunjungan 1' ' kunjungi 2 'dll dan beberapa memiliki 10 kunjungan sementara yang lain memiliki 50 + ...
nzcoops
Periksa kml paket - yang tampaknya menyediakan fungsionalitas yang Anda butuhkan. Makalah dalam JoSS menjelaskannya secara rinci. Juga kml3d& kmlShapemungkin menarik.
radek

Jawaban:

11

Saya telah menggunakan Mfuzz dalam R untuk mengelompokkan set data microarray kursus-waktu. Mfuzz menggunakan "soft-clustering". Pada dasarnya, individu dapat muncul dalam lebih dari satu kelompok.

Seperti yang ditunjukkan oleh @Andy dalam komentar, makalah asli menggunakan data CTN. Namun, saya menduga bahwa itu harus bekerja OK untuk data diskrit Anda. Terutama karena Anda hanya menjelajahi kumpulan data. Berikut ini contoh cepat dalam 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))

Berikan plot berikut:

Pengelompokan Mfuzz

csgillespie
sumber
Terima kasih untuk referensi, saya belum pernah menemukan ini sebelumnya. Apakah algoritma pengelompokan ini sesuai dengan data terdistribusi jumlah rendah seperti yang disebutkan OP (atau data dikotomis)? Makalah referensi (Futschik & Carlisle 2005) menggunakan data yang ditransformasikan menjadi berkelanjutan.
Andy W
@Andy: Poin bagus. Saya sudah memasukkan simulasi cepat. Segalanya tampak baik-baik saja, tetapi mungkin ada solusi yang lebih optimal.
csgillespie
Terima kasih @csgillespie, akan mencoba ini. Ngomong-ngomong, data saya kontinu bukan diskrit, tidak yakin apakah pertanyaannya tidak cukup jelas atau apakah itu salah ketik dalam jawaban Anda? Harus mengembalikan R saya untuk menginstal Mfuzz, biarkan mulai bersenang-senang.
nzcoops
@csgillespie - ini sangat keren. Saya bermain-main dengannya sekarang pada beberapa data nyata. Apakah Anda tahu apakah ada cara untuk memperkirakan jumlah kelompok?
Makro
4

Saya berharap ada paket MPLUS untuk melakukan apa yang Anda butuhkan. Ada sebuah makalah di Psychometrika tentang hampir tepatnya subjek ini

springerlink.com/content/25r110007g417187

kecuali datanya biner dan lintasannya adalah lintasan probabilitas. Para penulis menggunakan analisis kelas laten (diimplementasikan dengan menggunakan model campuran hingga dihukum) untuk mengelompokkan lintasan. Saya juga tahu penulis pertama menulis beberapa makalah lain sekitar 10 tahun yang lalu dengan Bengt Muthen (pencipta MPLUS) tentang analisis kelas laten dalam pengaturan yang sama (dengan lintasan). Sebagai contoh,

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

terdengar sangat mirip dengan apa yang Anda bicarakan, kecuali hasilnya adalah biner. Kasus kontinu jauh lebih sederhana, jadi saya akan melakukan pencarian literatur mundur (yaitu melihat makalah referensi makalah ini) untuk menemukan sesuatu yang cocok dengan apa yang telah Anda jelaskan lebih tepat.

Untuk mengetahui lebih lanjut, Anda dapat menanyakan langsung kepada pemilik MPLUS paket apa yang perlu Anda gunakan untuk melakukan apa yang Anda butuhkan. Mereka umumnya cukup cepat merespons dan sangat membantu:

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

Makro
sumber