Bagaimana cara mengatasi kesenjangan / NaN dalam data deret waktu ketika menggunakan Matlab untuk autokorelasi dan jaringan saraf?

9

Saya memiliki serangkaian pengukuran waktu (seri ketinggian-satu dimensi). Pada periode pengamatan, proses pengukuran turun untuk beberapa titik waktu. Jadi data yang dihasilkan adalah vektor dengan NaNs di mana ada kesenjangan dalam data. Menggunakan MATLAB, ini menyebabkan saya masalah ketika menghitung autokorelasi ( autocorr) dan menerapkan jaringan saraf ( nnstart).

Bagaimana cara mengatasi Kesenjangan ini? Haruskah saya menghapus ini dari vektor? Atau ganti entri mereka dengan nilai interpolasi? (jika demikian bagaimana di MATLAB)

Vass
sumber

Jawaban:

4

Saya tidak akan menyentuh data sama sekali. Gunakan ini untuk autokorelasi dengan NaNs:

http://www.mathworks.com/matlabcentral/fileexchange/43840-autocorrelation-and-partial-autocorrelation-with-nans/content/nanautocorr.m

"not touch the data" berarti tidak menghapus data atau langkah-waktu atau mengganti dengan 0 atau rata-rata, itu akan membahayakan informasi tentang ketergantungan linear lag waktu-spesifik. Saya juga akan menghindari simulasi nilai-nilai dalam celah, jika Anda tertarik pada autokorelasi "SAMPLE", bagaimanapun juga teknik simulasi terbaik tidak akan menambahkan informasi lebih lanjut tentang autokorelasi, yang didasarkan pada data itu sendiri. Saya mengkode ulang sebagian matlab (tautan di atas) fungsi autokorelasi dan autokorelasi parsial untuk menangani NaN: setiap pasangan data termasuk NaN dikecualikan dari perhitungan. Ini dilakukan untuk setiap jeda. Ini berhasil untuk saya. Setiap saran diterima dengan baik.

Fabio
sumber
Welcome @Fabio: Bisakah Anda memberikan penjelasan lebih lanjut tentang apa yang Anda maksud dengan "not touch the data"? Apakah Anda bermaksud untuk tidak menghapus apa pun? Ini juga akan membantu untuk memperkenalkan konten yang Anda tautkan dan menjelaskan mengapa ini membantu OP.
Momo
Halo Momo, terima kasih atas komentarnya. "not touch the data" berarti tidak menghapus data atau langkah-waktu atau mengganti dengan 0 atau rata-rata, itu akan membahayakan informasi tentang ketergantungan linear lag waktu-spesifik. Saya mengkode ulang sebagian matlab (tautan di atas) fungsi autokorelasi dan autokorelasi parsial untuk menangani NaN: setiap pasangan data termasuk NaN dikecualikan dari perhitungan. Ini dilakukan untuk setiap jeda. Ini berhasil untuk saya. Setiap saran diterima dengan baik.
Fabio
3

Ada beberapa algoritma yang kebal terhadap nilai yang hilang, jadi solusi yang lebih disukai adalah mencarinya (misalnya R acfuntuk autokorelasi).

Secara umum, cara untuk pergi adalah dengan hanya membuang data dengan pengamatan yang hilang (mungkin sangat menyakitkan) atau hanya untuk menyalahkan nilai-nilai mereka - rata-rata tetangga mungkin cukup untuk seri halus dan kesenjangan kecil, tetapi ada tentu saja kebanyakan metode lain yang lebih kuat, menggunakan splines, nilai acak / paling sering, imputasi dari model, dll.


sumber
2
Acf dengan nilai yang hilang dihitung dengan cara normal, tetapi nilai yang hilang 'dilewati' dalam jumlah (yaitu, rumus acf untuk kelambatan tertentu tampak seperti jumlah yang dibagi dengan jumlah, dalam setiap jumlah tersebut nilai yang hilang dapat dilewati). Ini tidak sama dengan menghapus nilai yang hilang dari data asli. Masalah dengan matlab adalah tidak melewatkan NaN, dan termasuk bahwa dalam perhitungan mengubah segalanya menjadi NaN.
Nol
1

Gunakan Deteksi Intervensi untuk menyalahkan katup yang hilang yang mengeksploitasi struktur ARIMA yang berguna dan setiap tren waktu setempat dan / atau pergeseran level.

IrishStat
sumber
1

ada 2 masalah di sini. yang pertama adalah menyediakan kerangka numerik yang bermakna untuk jawaban autokorelasi Anda di matlab. Agar hal ini terjadi, Anda perlu meregangkan dan / atau menambal bagian rangkaian waktu dari vektor data Anda ... komponen 'integritas data' dari masalah ini adalah yang paling mendasar.

kedua, Anda perlu memutuskan bagaimana menangani komponen 'nilai' dari vektor Anda ... ini sangat tergantung pada aplikasi tertentu seperti apa yang paling baik untuk diasumsikan, (misalnya, kecil, perangko waktu yang hilang dan NaN yang sesuai atau Nulls dapat diinterpolasi dengan aman dari tetangganya ... di celah yang lebih besar, menetapkan nilai ke nol mungkin lebih aman ... atau menyalahkan seperti yang disarankan di atas - jelas agar ini bermakna, kesenjangan lagi harus relatif kecil.) .

chris
sumber