Saya belum belajar statistik selama lebih dari 10 tahun (dan kemudian hanya kursus dasar), jadi mungkin pertanyaan saya agak sulit untuk dipahami.
Bagaimanapun, apa yang ingin saya lakukan adalah mengurangi jumlah titik data dalam suatu seri. Sumbu x adalah jumlah milidetik sejak dimulainya pengukuran dan sumbu y adalah bacaan untuk titik itu.
Seringkali ada ribuan titik data, tetapi saya mungkin hanya perlu beberapa ratus. Jadi pertanyaan saya adalah: Bagaimana cara mengurangi jumlah poin data secara akurat?
Apa prosesnya? (Jadi saya bisa google itu) Apakah ada algoritma yang disukai (saya akan menerapkannya dalam C #)
Semoga Anda mendapat petunjuk. Maaf atas kurangnya terminologi yang tepat.
Sunting: Detail lebih lanjut datang ke sini:
Data mentah yang saya dapatkan adalah data detak jantung, dan dalam bentuk jumlah milidetik sejak detak terakhir. Sebelum memplot data, saya menghitung jumlah milidetik dari sampel pertama, dan bpm (denyut per menit) pada setiap titik data (60000 / kaliincelastbeat).
Saya ingin memvisualisasikan data, yaitu memplotnya dalam grafik garis. Saya ingin mengurangi jumlah titik dalam grafik dari ribuan menjadi beberapa ratus.
Salah satu opsi adalah menghitung rata-rata bpm untuk setiap detik dalam seri, atau mungkin setiap 5 detik atau lebih. Itu akan sangat mudah jika saya tahu saya akan memiliki setidaknya satu sampel untuk masing-masing periode (detik interval 5 detik).
sumber
Jawaban:
Anda memiliki dua masalah: terlalu banyak poin dan cara memuluskan poin yang tersisa.
Menipiskan sampel Anda
Jika Anda memiliki terlalu banyak pengamatan yang tiba dalam waktu nyata, Anda selalu dapat menggunakan sampel acak sederhana untuk mengencerkan sampel Anda. Perhatikan, untuk ini juga benar, jumlah poin harus sangat besar.
Misalkan Anda memiliki N poin dan Anda hanya ingin n dari mereka. Kemudian hasilkan n angka acak dari distribusi seragam diskrit U (0, N-1) . Ini akan menjadi poin yang Anda gunakan.
Jika Anda ingin melakukan ini secara berurutan, yaitu pada setiap titik Anda memutuskan untuk menggunakannya atau tidak, maka terima saja poin dengan probabilitas p . Jadi, jika Anda menetapkan p = 0,01 Anda akan menerima (rata-rata) 1 poin dalam seratus.
Jika data Anda tersebar tidak merata dan Anda hanya ingin menipiskan titik-titik padat, maka buat saja fungsi penjarangan Anda sedikit lebih canggih. Misalnya, alih-alih p , bagaimana dengan:
di mana adalah angka positif dan adalah waktu sejak pengamatan terakhir. Jika waktu antara dua titik besar, yaitu besar , probabilitas menerima titik adalah satu. Sebaliknya, jika dua poin saling berdekatan, kemungkinan menerima poin adalah .λ t t 1 - hal
Anda perlu bereksperimen dengan nilai dan .λ hal
Menghaluskan
Mungkin sesuatu seperti skema jenis rata-rata bergerak sederhana. Atau Anda bisa menggunakan sesuatu yang lebih maju seperti kernel yang lebih halus (seperti yang disarankan orang lain). Anda harus berhati-hati agar tidak terlalu lancar, karena saya berasumsi bahwa penurunan tiba-tiba harus diambil dengan sangat cepat dalam skenario Anda.
Seharusnya ada perpustakaan C # yang tersedia untuk hal-hal semacam ini.
Kesimpulan
Tipis jika perlu, lalu halus.
sumber
Yah, saya pikir kata yang Anda cari adalah "pengambilan sampel," tetapi saya tidak yakin mengapa Anda ingin melakukannya. Ribuan titik data tidak terlalu banyak. Atau apakah Anda hanya ingin memplot angka yang lebih kecil dari jarak yang sama? Itu biasanya disebut "binning."
Apakah tujuan Anda untuk menghasilkan visualisasi? Dalam hal ini, Anda mungkin ingin menyimpan data mentah, memplotnya sebagai scattergraph, kemudian menampar semacam kecenderungan sentral (garis regresi, spline, apa pun) untuk berkomunikasi apa pun yang harus dilakukan dengan pesan takehome.
Atau apakah tujuan Anda untuk merangkum hasil secara numerik dalam beberapa cara? Dalam hal ini, Anda mungkin ingin menjelaskan masalah Anda lebih detail!
sumber
Menghitung rata-rata mengarah ke dataset berbeda dari sekadar mengurangi jumlah titik data. Jika satu detak jantung per menit jauh lebih cepat daripada detak jantung lainnya, Anda akan kehilangan sinyal melalui proses perataan Anda.
Jika Anda menyimpulkan 125-125-0-125-125 sebagai 100 daripada cerita yang diceritakan data berbeda melalui smoothing Anda.
Kadang-kadang jantung bahkan berhenti berdetak dan saya percaya itu adalah peristiwa yang menarik namun ingin melihat data detak jantung yang diplot.
Karena itu saya akan mengusulkan agar Anda menghitung jarak antara dua titik dengan rumus seperti
d=sqrt((time1-time2)^2 + (bpm1-bpm2))
.Anda menetapkan jarak minimum dalam program Anda. Kemudian Anda mengulangi data Anda dan setelah setiap titik Anda menghapus semua titik berikut yang d lebih kecil dari jarak minimum Anda.
Karena satuan waktu dan bpm tidak sama, Anda mungkin ingin memikirkan bagaimana Anda dapat menemukan cara untuk mengukur satuan secara bermakna. Untuk melakukan tugas ini dengan benar, Anda harus berbicara dengan dokter yang pada akhirnya harus menafsirkan grafik Anda dan bertanya kepada mereka informasi apa yang mereka anggap penting.
sumber
Jika BPM tetap sama pada banyak sampel (atau mengubah sangat sedikit dengan cara yang Anda tidak khawatir), Anda dapat memotong data Anda ke digit signifikan yang benar-benar Anda pedulikan dan kemudian lakukan Run Length Encoding.
Misalnya, dalam R data ini:
memiliki output ini
sumber
Anda tidak memberikan informasi yang cukup. Mengapa Anda ingin mengurangi titik data. Beberapa ribu bukanlah apa-apa hari ini.
Mengingat Anda menginginkan hasil yang sama setiap kali Anda melihat data yang sama, mungkin Anda hanya ingin membuang rata-rata. Anda memiliki spasi variabel pada sumbu x Anda. Mungkin Anda mencoba membuatnya konsisten? Dalam hal ini Anda akan menetapkan lebar nampan mungkin 50 msec, atau 100, dan kemudian rata-rata semua titik di sana. Buat lebar bin sebesar yang Anda butuhkan untuk mengurangi titik data ke ukuran set yang Anda inginkan.
Benar-benar pertanyaan yang sulit dijawab tanpa alasan mengapa Anda membuang data.
sumber
Untuk mengurangi poin data Anda, Anda dapat menggunakan algoritma Ramer – Douglas – Peucker yang sangat mudah dipahami dan diimplementasikan. Sinyal sampel akan sangat mirip dengan yang asli.
sumber