Bagaimana seharusnya rata-rata bergerak menangani titik data yang hilang?

10

Saya sedang menulis sebuah program yang rata-rata berat pengguna di hari yang berbeda. Saya berencana untuk menggunakan rata-rata bergerak 5 poin (hari ini, dua sebelum dan dua setelah). Terkadang, titik data hilang selama 1-2 hari. Bagaimana kasus-kasus ini biasanya ditangani?

(jika ada filter low-pass yang lebih baik yang bisa saya gunakan, saya akan suka saran)

Anna
sumber
Hal pertama yang terlintas dalam pikiran adalah untuk menginterpolasi poin sebelum menggunakan filter rata-rata bergerak
someguy
3
Benar-benar lebih dari pertanyaan statistik daripada pertanyaan pemrosesan sinyal, setidaknya dengan tidak adanya lebih banyak konteks. Tetapi Anda dapat langsung menghitung ulang rata-rata, menggunakan rata-rata saat ini sebagai nilai penggantian, atau menunggu pengukuran berikutnya dan mencoba interpolasi, linier atau lainnya.
Daniel R Hicks
Seperti yang disebutkan lainnya, ini biasanya akan menjadi keputusan khusus aplikasi berdasarkan pertimbangan Anda tentang bagaimana Anda ingin output yang difilter berperilaku. Sebagian besar teori pemrosesan sinyal didasarkan pada sampel dengan spasi yang seragam, sehingga Anda tidak akan mendapatkan sesuatu yang secara objektif dapat disebut "jawaban yang tepat."
Jason R
@JasonR Saya menyaring untuk memberikan perkiraan yang lebih masuk akal dari berat pengguna pada saat itu. Data diambil secara seragam (frekuensi sampling = 1 / hari), kecuali beberapa titik data tidak ada.
Anna
@ Anna: Benar, saya mengerti mengapa Anda memfilter data. Namun, data Anda tidak disampel secara seragam karena Anda memiliki titik data yang hilang. Karena itu, seperti yang saya catat, Anda tidak akan menemukan jawaban teoretis yang memuaskan untuk masalah Anda. Solusi ad-hoc yang Anda anggap "masuk akal" untuk aplikasi khusus Anda mungkin akan menjadi jawabannya.
Jason R

Jawaban:

4

Sebagai kesan umum, regresi akan bekerja lebih baik secara otomatis menyesuaikan poin yang hilang daripada filter rata-rata bergerak yang Anda pilih.

Jika Anda menggunakan AR (filter regresif otomatis) atau filter ARMA - Anda dapat memiliki nilai prediksi sampel output berdasarkan input sebelumnya.

X^[i]=ωkx[i1k]+η

Di mana adalah nilai prediksi.X^[i]

Khususnya dalam kasus Anda, katakan Anda tahu bobot orang tersebut memiliki rentang tertentu . Sekarang jika Anda tidak memiliki nilai - menerapkan dua substitusi berbeda - satu dengan Min dan satu dengan Max dan berdasarkan model yang tersedia Anda akan memiliki dua hasil kasus ekstrim untuk dan Anda dapat pilih sesuatu di antara mereka. x [ i - 1 ] X [ i ]XmSebuahx,Xmsayanx[saya-1]X^[saya]

Ada berbagai alternatif lain - yang bisa Anda pertahankan

X [i]=panjang jangka sampel rata-rata X 

X^[saya]=X[saya-1]
atau
X^[saya]=Rata-rata sampel jangka panjang X 

Pada dasarnya itu adalah permainan prediksi nilai yang dikatakan dan terus menggunakannya sebagai sinyal. Tentu saja, prediksi tidak akan sama dengan sampel asli, tetapi bukan itu harga yang Anda bayar karena tidak memiliki data.

Dipan Mehta
sumber
2
Mengapa Anda mengatakan bahwa regresi akan bekerja lebih baik di pas? Terima kasih
Spacey
3

Metode sederhana dan umum untuk mengisi data yang hilang, jika Anda memiliki data lengkap, adalah dengan menggunakan
regresi Linear . Katakanlah Anda memiliki 1000 run dari 5 berturut-turut tanpa ada yang hilang.
Siapkan 1000 x 1 vektor y dan 1000 x 4 matriks X:

y       X
wt[0]   wt[-2] wt[-1] wt[1] wt[2]
---------------------------------
68      67     70     70    68
...

Regresi akan memberi Anda 4 angka abcd yang memberikan kecocokan terbaik

wt[0] ~= a * wt[-2]  + b * wt[-1]  + c * wt[1]  + d * wt[2]

untuk 1000 baris data Anda - data berbeda, abc berbeda d.
Kemudian Anda menggunakan abcd ini untuk memperkirakan (memprediksi, menginterpolasi) yang tidak ada dengan [0].
(Untuk bobot manusia, saya harapkan sekitar sekitar 1/4.)

Dalam python, lihat numpy.linalg.lstsq .

(Ada banyak buku dan makalah tentang regresi, di semua tingkatan. Namun, untuk hubungan dengan interpolasi, saya tidak tahu pengantar yang bagus; siapa pun?)

denis
sumber
1

[Sebuah,b,c,?,e]

Sebuah+b+c+e4
Phonon
sumber
1

Saya pikir cara paling sederhana adalah "memprediksi" tanggal untuk "keseluruhan" dalam rangkaian waktu menggunakan data yang datang sebelumnya. maka Anda dapat menggunakan rentang waktu ini untuk estimasi parameter. (Anda kemudian dapat melanjutkan dan memprediksikan kembali nilai yang hilang menggunakan perkiraan parameter Anda dari seluruh rentang waktu (selesai) dan ulangi ini sampai mereka bertemu). Anda harus mendapatkan batas kepercayaan dari jumlah titik data nyata yang Anda miliki, dan bukan dari panjang kumpulan data yang lengkap.

blabla
sumber