Saya memiliki satu set data deret waktu. Setiap seri mencakup periode yang sama, meskipun tanggal sebenarnya dalam setiap seri waktu mungkin tidak semuanya 'berbaris' persis.
Dengan kata lain, jika seri Time harus dibaca ke dalam matriks 2D, itu akan terlihat seperti ini:
date T1 T2 T3 .... TN
1/1/01 100 59 42 N/A
2/1/01 120 29 N/A 42.5
3/1/01 110 N/A 12 36.82
4/1/01 N/A 59 40 61.82
5/1/01 05 99 42 23.68
...
31/12/01 100 59 42 N/A
etc
Saya ingin menulis skrip R yang akan memisahkan deret waktu {T1, T2, ... TN} menjadi 'keluarga' di mana sebuah keluarga didefinisikan sebagai serangkaian deret yang "cenderung bergerak dalam simpati" satu sama lain.
Untuk bagian 'pengelompokan', saya perlu memilih / menentukan jenis ukuran jarak. Saya tidak yakin bagaimana cara melakukannya, karena saya berurusan dengan deret waktu, dan sepasang deret yang mungkin bergerak dengan simpati selama satu interval, mungkin tidak melakukannya dalam interval berikutnya.
Saya yakin ada orang yang jauh lebih berpengalaman / pintar daripada saya di sini, jadi saya akan berterima kasih atas saran, ide tentang algoritma / heuristik apa yang digunakan untuk mengukur jarak dan bagaimana menggunakannya dalam pengelompokan deret waktu.
Dugaan saya adalah bahwa TIDAK ada metode statistik kuat yang mapan untuk melakukan ini, jadi saya akan sangat tertarik untuk melihat bagaimana orang mendekati / menyelesaikan masalah ini - berpikir seperti ahli statistik.
Jawaban:
Dalam streaming data dan penambangan basis data deret waktu, pendekatan umum adalah mengubah deret menjadi representasi simbolis, kemudian menggunakan metrik kesamaan, seperti jarak Euclidean, untuk mengelompokkan deret tersebut. Representasi yang paling populer adalah SAX (Keogh & Lin) atau iSAX yang lebih baru (Shieh & Keogh):
Halaman di atas juga mengandung referensi untuk metrik jarak dan pengelompokan. Keogh dan kru terlibat dalam penelitian yang dapat direproduksi dan cukup reseptif untuk merilis kode mereka. Jadi, Anda dapat mengirim email kepada mereka dan bertanya. Saya percaya mereka cenderung bekerja di MATLAB / C ++.
Ada upaya terbaru untuk menghasilkan implementasi Java dan R:
Saya tidak tahu sejauh mana itu - itu diarahkan untuk mencari motif, tetapi, tergantung pada seberapa jauh mereka telah mendapatkan, itu harus memiliki bit yang diperlukan Anda perlu menyatukan sesuatu untuk kebutuhan Anda (iSAX dan metrik jarak: karena bagian ini biasa ditemukan pada pengelompokan dan motif).
sumber
Cara lain untuk mengatakan "cenderung bergerak dalam simpati" adalah "terkointegrasi".
Ada dua cara standar untuk menghitung kointegrasi : Metode Engle-Granger dan prosedur Johansen. Ini tercakup dalam "Analisis Rangkaian Waktu Terpadu dan Terpointegrasi dengan R" (Pfaff 2008) dan paket R urca terkait . Saya sangat merekomendasikan buku ini jika Anda ingin mengejar metode ini di R.
Saya juga menyarankan agar Anda melihat pertanyaan ini pada rangkaian waktu multivarian dan, khususnya, pada kursus Ruey Tsay di U. Chicago yang mencakup semua kode R yang diperlukan.
sumber
Rangkaian waktu pengelompokan dilakukan cukup umum oleh dinamacis populasi, khususnya yang mempelajari serangga untuk memahami tren wabah dan keruntuhan. Cari pekerjaan pada ngengat Gypsy, budoworm Spruce, kumbang pinus gunung dan larch budmoth.
Untuk pengelompokan yang sebenarnya Anda dapat memilih metrik jarak apa pun yang Anda suka, masing-masing mungkin memiliki kekuatan dan minggu itu sendiri relatif terhadap jenis data yang dikelompokkan, Kaufmann dan Rousseeuw 1990. Menemukan kelompok dalam data. Pengantar analisis klaster adalah tempat yang baik untuk memulai. Ingat, metode pengelompokan tidak 'peduli' bahwa Anda menggunakan deret waktu, hanya melihat nilai yang diukur pada titik waktu yang sama. Jika dua seri waktu Anda tidak selaras dengan masa pakainya, mereka tidak akan (dan mungkin tidak boleh) mengelompok.
Di mana Anda akan mengalami masalah adalah menentukan jumlah cluster (keluarga) yang akan digunakan setelah Anda mengelompokkan deret waktu. Ada berbagai cara untuk memilih potongan-potongan kluster informatif, tetapi di sini literaturnya tidak begitu bagus.
sumber
Lihat jawaban saya untuk pertanyaan serupa di sini . Singkatnya, lakukan transformasi Fourier data yang cepat, buang frekuensi berlebihan jika data input Anda dihargai nyata, pisahkan bagian nyata dan imajiner untuk setiap elemen transformasi Fourier cepat, dan gunakan paket Mclust di R untuk melakukan model- pengelompokan berdasarkan pada bagian nyata dan imajiner dari setiap elemen dari setiap seri waktu. Paket mengotomatiskan pengoptimalan terhadap jumlah cluster dan kepadatannya.
sumber
Anda juga bisa menggunakan paket clustDDist, yang melakukan metode pemimpin dan metode pengelompokan hierarkis dengan langkah-langkah kesalahan yang berbeda:
http://r-forge.r-project.org/projects/clustddist/
sumber