Menilai puncak dalam rangkaian waktu data sinyal sel

9

Saya mengukur keberadaan respons dalam pengukuran sinyal sel. Apa yang saya lakukan adalah pertama-tama menerapkan algoritma perataan (Hanning) ke deret waktu data, lalu mendeteksi puncak. Yang saya dapatkan adalah ini: rangkaian waktu dari respons sinyal sel

Jika saya ingin membuat deteksi respon sedikit lebih objektif daripada "ya Anda melihat kenaikan dalam penurunan terus menerus", apa yang akan menjadi pendekatan terbaik? Apakah untuk mendapatkan jarak puncak dari garis dasar yang ditentukan oleh regresi linier?

(Saya adalah pembuat kode python dan hampir tidak memiliki pemahaman tentang statistik)

Terima kasih

Radek
sumber
4
Saya tidak berpikir ada "pendekatan terbaik". Ada banyak cara untuk menganalisis atau melaporkan puncak dalam rangkaian waktu. Pertanyaan Anda tidak memberi petunjuk untuk memahami apa yang mungkin Anda kejar. Mungkin Anda berkonsultasi dengan artikel di bidang Anda, untuk petunjuk atau tolok ukur.
ttnphns
Saya tidak tahu informasi apa yang harus diberikan untuk memberi Anda petunjuk. Pada dasarnya Anda memiliki grafik yang memiliki tren menurun (Anda mendapatkan lebih sedikit respons dari sel seiring berjalannya waktu) dan di suatu tempat di tengah Anda mungkin melihat peningkatan output. Hanya itu saja. Apakah Anda pikir pada dasarnya terserah saya untuk secara subjektif mengatakan bahwa katakanlah 10% peningkatan dalam respons = apa yang saya kejar?
Radek
1
Dengan asumsi bahwa Anda kadang-kadang melihat perilaku seperti yang ditunjukkan, dan kadang-kadang hanya penurunan terus-menerus (kurang-lebih), Anda akan memiliki peluang yang jauh lebih baik untuk mendapatkan jawaban yang masuk akal di sini jika Anda mengganti Anda satu grafik besar dengan 6-10 grafik kecil, di mana setengahnya memiliki peningkatan ini dan setengahnya tidak.
AVB
Bisakah memiliki lebih dari satu maksimum lokal (benjolan)?
Emre
1
mengapa Anda tidak memposting data Anda dan saya akan membahasnya. Penyaringan dugaan yang Anda dan orang lain sarankan memiliki efek samping. Jika Anda menginginkan cara penanganan yang objektif, saya mungkin bisa memberi Anda beberapa petunjuk. Tapi itu semua dimulai dengan data bukan dengan anggapan!
IrishStat

Jawaban:

2

Jadi sepertinya dari komentar 25 Oktober Anda tertarik untuk mencari dan mengkarakterisasi secara algoritmik dua fitur utama: peluruhan respons awal diikuti oleh siklus peningkatan respons dan peluruhan selanjutnya. Saya berasumsi bahwa data diamati pada interval waktu diskrit.

Inilah yang akan saya coba:

  1. Gunakan rutin seperti numpy.ma.polyfit agar sesuai, katakanlah, polinomial tingkat 4 melalui data Anda. Ini harus memperhitungkan penurunan awal diikuti dengan naik / turun, tetapi memuluskan banyak fluktuasi kecil. Semoga tingkat polinomial ini cukup fleksibel untuk disesuaikan dengan seri lain yang serupa. Tujuan utama yang saya pikir adalah untuk mendapatkan fungsi yang memperhitungkan pola utama yang Anda cari.
  2. Gunakan rutinitas Python untuk menghitung turunan dari fungsi polinom yang sesuai dengan data. Contoh rutin adalah scipy.misc.derivative dan numpy.diff. Anda mencari nilai waktu di mana turunan pertama bernilai nol, yang menunjukkan kemungkinan minimum lokal atau maksimum dari fungsi. Sebuah tes turunan kedua dapat digunakan untuk mengkonfirmasi mana titik berkorespondensi dengan min atau max. Agaknya Anda akan memiliki tiga poin seperti itu jika grafik yang Anda tunjukkan representatif. Perhatikan bahwa proyek bijak bisa sangat berharga di sini.
  3. Pada titik ini Anda akan memiliki nilai waktu yang terkait

    Sebuah. awal peluruhan awal

    b. mulai dari kenaikan

    c. awal peluruhan kedua

Anda kemudian dapat melakukan apa yang Anda inginkan secara analitis untuk menilai perubahan.

Mungkin lebih baik membiarkan data berbicara sendiri: di beberapa seri, ketika Anda menerapkan metode ini, apa perubahan ukuran khas pada kenaikan, kapan biasanya terjadi ke dalam periode peluruhan, dan berapa lama berlangsung? Dan seperti apa distribusi kenaikan ini dalam hal di mana, seberapa besar, dan berapa lama? Mengetahui statistik ini, Anda dapat mengkarakterisasi kenaikan tertentu dengan lebih baik dalam toleransi, sehubungan dengan di mana waktu terjadi serta ukuran dan lamanya. Kunci dari pemahaman saya adalah untuk dengan mudah mengidentifikasi di mana perubahan ini terjadi. Sisa dari apa yang saya jelaskan adalah langsung menghitung.

Josh Hemann
sumber
4
Polinomial tidak akan berfungsi dengan data ini kecuali Anda membuat tingkat yang sangat besar sehingga mereka mengancam untuk memperkenalkan puncak palsu.
whuber
Mungkin saya harus mengklarifikasi jawaban saya bahwa dia masih perlu menerapkan fungsi Hanning dan kemudian melakukan polinomial fit. Jendela Hanning mungkin harus diubah untuk mendapatkan fungsi yang lebih lancar. Atau apakah Anda mengatakan bahwa polinomial tingkat rendah tidak akan berfungsi untuk data yang dihaluskan?
Josh Hemann
5
Polinomial tingkat rendah pasti tidak akan berhasil, Josh. Anda membutuhkan halus lokal - memikirkan kernel halus atau jenis tertentu splines - dan perlu tidak menjadi polinomial, yang memiliki sifat yang mengerikan. (Polinomial dapat memperkenalkan puncak besar yang palsu antara seri data yang berperilaku baik.)
whuber
f(x)=f(x0)+(xx0)f(x0)+(xx0)22!f(x0)+...
3
Terima kasih telah menjelaskan poin itu, @Sameer. Saya setuju bahwa polinomial tingkat rendah lokal bisa efektif dan saya tidak bermaksud menyatakan sebaliknya dalam komentar saya sebelumnya (yang berarti "polinomial" dipahami sebagai global fit). Mengenai apakah itu "terbaik", saya harus setuju dengan komentar oleh ttnphns untuk pertanyaan asli: semuanya tergantung. Saya berharap kuadratik lokal cocok dengan serangkaian data yang padat untuk mendekati Gaussian kernel smooths, yang memberi kita satu pendekatan. Rasa "terbaik" lainnya adalah BLUP dari kriging, yang bisa seperti spline.
Whuber
1

Berikut adalah beberapa ide tetapi saya keluar dari kepala saya yang mungkin berfungsi ...

Derivatif: Jika Anda mengambil array dan mengurangi elemen dari satu sama lain untuk mendapatkan array satu poin lebih sedikit, tapi itulah turunan pertama. Jika sekarang Anda menghaluskannya dan mencari perubahan tanda, itu mungkin mendeteksi benjolan Anda.

Rata-rata bergerak: Mungkin menggunakan 2 rata-rata bergerak yang tertinggal (eksponensial atau berjendela) dapat mengungkapkan adanya benjolan besar sementara mengabaikan yang kecil. Pada dasarnya, lebar rata-rata pergerakan jendela yang lebih kecil harus lebih besar dari lebar gundukan yang ingin Anda abaikan. EMA yang lebih luas harus lebih lebar tetapi tidak terlalu lebar untuk mendeteksi benjolan.

Anda mencari ketika mereka memotong dan mengurangi lag (jendela / 2) dan itu adalah perkiraan di mana benjolan Anda berada. http://www.stockopedia.com/content/trading-the-golden-cross-does-it-really-work-69694/

Model linear: Lakukan serangkaian model linier dengan lebar cukup yang memiliki beberapa tonjolan kecil, misalkan 100 poin. Sekarang loop melalui set data yang menghasilkan regresi linier pada variabel X. Lihat saja koefisien X dan lihat di mana perubahan tanda besar terjadi. Itu benjolan besar.

Di atas hanyalah dugaan ada di pihak saya dan mungkin ada cara yang lebih baik untuk melakukannya.

Chris
sumber