Saya sedang melakukan beberapa penelitian tetapi telah terjebak pada tahap analisis (seharusnya lebih memperhatikan kuliah statistik saya).
Saya telah mengumpulkan dua sinyal simultan: laju aliran terintegrasi untuk volume dan perubahan ekspansi dada. Saya ingin membandingkan sinyal dan akhirnya berharap untuk mendapatkan volume dari sinyal ekspansi dada. Tetapi pertama-tama saya harus menyelaraskan / menyinkronkan data saya.
Karena perekaman tidak dimulai tepat pada waktu yang sama dan ekspansi dada ditangkap untuk periode yang lebih lama, saya perlu menemukan data yang sesuai dengan data volume saya dalam set data ekspansi dada dan memiliki ukuran seberapa baik mereka disejajarkan. Saya tidak yakin bagaimana cara melakukannya jika kedua sinyal tidak mulai pada waktu yang sama, atau antara data pada skala yang berbeda dan pada resolusi yang berbeda.
Saya telah melampirkan contoh dari dua sinyal ( https://docs.google.com/spreadsheet/ccc?key=0As4oZTKp4RZ3dFRKaktYWEhZLXlFbFVKNmllbGVXNHc ), beri tahu saya jika ada hal lain yang bisa saya berikan.
sumber
Jawaban:
Pertanyaannya adalah bagaimana menemukan jumlah yang satu seri waktu ("ekspansi") tertinggal dari yang lain ("volume") ketika seri sampel pada interval reguler tetapi berbeda .
Dalam hal ini kedua seri menunjukkan perilaku yang cukup berkelanjutan, seperti yang ditunjukkan oleh gambar. Ini menyiratkan (1) sedikit atau tidak ada pemulusan awal mungkin diperlukan dan (2) resampling dapat sesederhana interpolasi linier atau kuadratik. Kuadrat mungkin sedikit lebih baik karena kehalusannya. Setelah melakukan resampling, lag ditemukan dengan memaksimalkan korelasi silang , seperti yang ditunjukkan dalam utas, Untuk dua seri data sampel offset, apa estimasi terbaik offset di antara mereka? .
Untuk mengilustrasikannya , kita dapat menggunakan data yang disediakan dalam pertanyaan, yang digunakan
R
untuk kodesemu. Mari kita mulai dengan fungsionalitas dasar, korelasi silang dan resampling:Ini adalah algoritma kasar: perhitungan berbasis FFT akan lebih cepat. Tetapi untuk data ini (melibatkan sekitar 4.000 nilai) cukup baik.
Saya mengunduh data sebagai file CSV yang dipisah koma dan melepas header-nya. (Header menyebabkan beberapa masalah untuk R yang saya tidak mau diagnosa.)
NB Solusi ini mengasumsikan setiap seri data dalam urutan temporal tanpa celah di salah satu dari keduanya. Ini memungkinkannya untuk menggunakan indeks ke dalam nilai sebagai proksi untuk waktu dan untuk skala indeks tersebut dengan frekuensi temporal sampling untuk mengubahnya menjadi waktu.
Ternyata satu atau kedua instrumen ini melayang sedikit dari waktu ke waktu. Ada baiknya untuk menghapus tren seperti itu sebelum melanjutkan. Juga, karena ada pengurangan sinyal volume di bagian akhir, kita harus memotongnya.
Saya menguji ulang seri yang kurang sering untuk mendapatkan hasil yang paling presisi.
Sekarang korelasi silang dapat dihitung - untuk efisiensi kami hanya mencari jendela keterlambatan yang masuk akal - dan kelambatan di mana nilai maksimum ditemukan dapat diidentifikasi.
Output memberi tahu kita bahwa ekspansi memperlambat volume sebesar 1,85 detik. (Jika 3,5 detik terakhir data tidak terpotong, output akan menjadi 1,84 detik.)
Sebaiknya periksa semuanya dengan beberapa cara, terutama secara visual. Pertama, fungsi korelasi silang :
Selanjutnya, mari kita daftarkan dua seri dalam waktu dan plot bersama pada sumbu yang sama .
Terlihat bagus! Namun, kami bisa lebih memahami kualitas pendaftaran dengan sebaran . Saya memvariasikan warna pada waktu untuk menunjukkan perkembangan.
Kami mencari titik untuk melacak bolak-balik sepanjang garis: variasi dari yang mencerminkan nonlinier dalam respons ekspansi volume terhadap waktu yang terlambat. Meskipun ada beberapa variasi, mereka cukup kecil. Namun, bagaimana variasi ini berubah dari waktu ke waktu mungkin merupakan hal yang menarik secara fisiologis. Hal yang luar biasa tentang statistik, terutama aspek eksplorasi dan visualnya, adalah bagaimana statistik cenderung menciptakan pertanyaan dan gagasan yang baik bersama dengan jawaban yang bermanfaat .
sumber
acf
fungsi R.R
ketika saya memposting jawaban ini dan hanya lupa untuk memberikan definisi untuk fungsi itu. Ini aslinya:normalize <- function(x) { x.max <- max(x); x.min <- min(x); dx <- x.max - x.min; if (dx==0) dx <- 1; (x-x.min) / dx }