Saya memeriksa beberapa data cakupan genomik yang pada dasarnya adalah daftar panjang (beberapa juta nilai) bilangan bulat, masing-masing mengatakan seberapa baik (atau "dalam") posisi ini dalam genom tercakup.
Saya ingin mencari "lembah" dalam data ini, yaitu daerah yang secara signifikan "lebih rendah" dari lingkungan sekitarnya.
Perhatikan bahwa ukuran lembah yang saya cari dapat berkisar dari 50 pangkalan hingga beberapa ribu.
Paradigma macam apa yang akan Anda rekomendasikan untuk menemukan lembah itu?
MEMPERBARUI
Beberapa contoh grafis untuk data:
PEMBARUAN 2
Mendefinisikan apa itu lembah tentu saja merupakan salah satu pertanyaan yang saya perjuangkan. Ini jelas bagi saya:
tetapi ada beberapa situasi yang lebih kompleks. Secara umum, ada 3 kriteria yang saya pertimbangkan: 1. Cakupan (rata-rata? Maksimal?) Di jendela sehubungan dengan rata-rata global. 2. Cakupan (...) di jendela sehubungan dengan sekitarnya langsung. 3. Seberapa besar jendelanya: jika saya melihat cakupan sangat rendah untuk rentang pendek itu menarik, jika saya melihat cakupan sangat rendah untuk rentang panjang juga menarik, jika saya melihat cakupan agak rendah untuk rentang pendek itu tidak terlalu menarik , tetapi jika saya melihat cakupan yang agak rendah untuk rentang yang panjang - itu adalah .. Jadi itu adalah kombinasi dari panjang getah dan cakupan itu. Semakin lama, semakin tinggi saya membiarkan cakupan dan masih menganggapnya lembah.
Terima kasih,
Dave
Jawaban:
Anda dapat menggunakan semacam pendekatan Monte Carlo, misalnya menggunakan rata-rata bergerak dari data Anda.
Ambil rata-rata bergerak dari data, menggunakan jendela dengan ukuran yang masuk akal (saya kira terserah Anda memutuskan seberapa lebar).
Melalui data Anda akan (tentu saja) ditandai dengan rata-rata yang lebih rendah, jadi sekarang Anda perlu menemukan beberapa "ambang" untuk mendefinisikan "rendah".
Untuk melakukan itu, Anda menukar nilai data secara acak (misalnya menggunakan
sample()
) dan menghitung ulang rata-rata bergerak untuk data yang Anda tukar .Ulangi bagian terakhir ini dengan jumlah yang cukup tinggi (> 5000) dan simpan semua rata-rata dari uji coba ini. Jadi pada dasarnya Anda akan memiliki matriks dengan 5000 baris, satu per percobaan, masing-masing berisi rata-rata bergerak untuk percobaan itu.
Pada titik ini untuk setiap kolom Anda memilih kuantil 5% (atau 1% atau apa pun yang Anda inginkan), yaitu nilai di mana terletak hanya 5% dari rata-rata data acak.
Anda sekarang memiliki "batas kepercayaan" (Saya tidak yakin apakah itu istilah statistik yang benar) untuk membandingkan data asli Anda. Jika Anda menemukan bagian dari data Anda yang lebih rendah dari batas ini maka Anda dapat memanggilnya melalui.
Tentu saja, ingatlah bahwa bukan metode ini atau metode matematika lainnya yang dapat memberi Anda indikasi signifikansi biologis, meskipun saya yakin Anda sangat menyadari hal itu.
EDIT - sebuah contoh
Ini hanya akan memungkinkan Anda untuk menemukan daerah secara grafis, tetapi Anda dapat dengan mudah menemukan mereka menggunakan sesuatu di baris
which(values>limits.5)
.sumber
Saya sama sekali tidak tahu tentang data ini, tetapi dengan asumsi data tersebut dipesan (tidak tepat waktu, tetapi berdasarkan posisi?) Masuk akal untuk menggunakan metode deret waktu. Ada banyak metode untuk mengidentifikasi kluster temporal dalam data. Umumnya mereka digunakan untuk menemukan nilai tinggi tetapi dapat digunakan untuk nilai rendah yang dikelompokkan bersama. Saya sedang memikirkan statistik pemindaian, statistik jumlah kumulatif (dan lainnya) yang digunakan untuk mendeteksi wabah penyakit dalam data jumlah. Contoh metode ini ada dalam paket pengawasan dan paket DCluster.
sumber
surveillance
danDCluster
, tapi bisakah Anda sedikit lebih spesifik? Keduanya paket yang relatif besar dan tujuannya agak spesifik. Saya tidak yakin harus mulai dari mana.Ada banyak opsi untuk ini, tetapi satu yang bagus: Anda dapat menggunakan
msExtrema
fungsi dalammsProcess
paket .Edit:
Dalam analisis kinerja keuangan, analisis semacam ini sering dilakukan dengan menggunakan konsep "drawdown". The
PerformanceAnalytics
paket memiliki beberapa fungsi yang berguna untuk menemukan lembah ini . Anda dapat menggunakan algoritma yang sama di sini jika Anda memperlakukan pengamatan Anda sebagai rangkaian waktu.Berikut adalah beberapa contoh bagaimana Anda dapat menerapkan ini pada data Anda (di mana "tanggal" tidak relevan tetapi hanya digunakan untuk memesan), tetapi elemen pertama dalam
zoo
objek adalah data Anda:sumber
Beberapa paket Bioconductor (misalnya, ShortRead , Biostrings , BSgenome , IRanges , genomeIntervals ) menawarkan fasilitas untuk berurusan dengan posisi genom atau vektor jangkauan, misalnya untuk ChIP-seq dan mengidentifikasi kawasan yang diperkaya. Adapun jawaban lainnya, saya setuju bahwa metode apa pun yang mengandalkan pengamatan yang dipesan dengan beberapa filter berbasis ambang batas akan memungkinkan untuk mengisolasi sinyal rendah dalam bandwidth tertentu.
Mungkin Anda juga bisa melihat metode yang digunakan untuk mengidentifikasi apa yang disebut "pulau"
sumber