Saya memperkirakan sampel matriks kovarian sampel dan mendapatkan matriks simetris. Dengan , saya ingin membuat -variate rn didistribusikan normal, tetapi karena itu saya membutuhkan Cholesky dekomposisi . Apa yang harus saya lakukan jika tidak pasti positif?
15
Jawaban:
Kekhawatiran pertanyaan bagaimana untuk menghasilkan variates acak dari distribusi normal multivariat dengan (mungkin) singular kovarians matriksC . Jawaban ini menjelaskan satu cara yang akan bekerja untuk matriks kovarian apa pun . Ini menyediakan
R
implementasi yang menguji akurasinya.Analisis aljabar dari matriks kovarians
KarenaC adalah matriks kovarians, ia harus simetris dan positif-semidefinit. Untuk melengkapi informasi latar belakang, biarkan μ menjadi vektor dari cara yang diinginkan.
Karena simetris, Dekomposisi Nilai Singular (SVD) dan dekomposisi eigendnya akan secara otomatis berbentukC
untuk beberapa ortogonal matriks dan matriks diagonal D 2 . Secara umum elemen diagonal D 2 adalah nonnegatif (menyiratkan mereka semua memiliki akar kuadrat nyata: pilih yang positif untuk membentuk matriks diagonal D ). Informasi yang kami miliki tentang C mengatakan bahwa satu atau lebih elemen diagonal tersebut adalah nol - tetapi itu tidak akan memengaruhi operasi selanjutnya, juga tidak akan mencegah SVD untuk dikomputasi.V D2 D2 D C
Menghasilkan nilai acak multivarian
Misalkan memiliki standar distribusi normal multivariat: masing-masing komponen memiliki mean nol, Unit varians, dan semua covariances adalah nol: matriks kovarians adalah identitas saya . Kemudian variabel acak Y = V D XX I Y=VDX memiliki matriks kovarians
Akibatnya variabel acak memiliki distribusi normal multivariat dengan mean μ dan matriks kovarian Cμ+Y μ C .
Kode Komputasi dan Contoh
R
Kode berikut menghasilkan matriks kovarians dari dimensi dan peringkat yang diberikan, menganalisisnya dengan SVD (atau, dalam kode komentar, dengan komposisi eigend), menggunakan analisis tersebut untuk menghasilkan sejumlah realisasi ditentukan (dengan vektor rata-rata 0 ) , dan kemudian membandingkan matriks kovarians dari data tersebut dengan matriks kovarians yang dituju baik secara numerik dan grafik. Seperti ditunjukkan, itu menghasilkan 10 , 000 realisasi mana dimensi Y adalah 100 dan pangkat C adalah 50Artinya, peringkat data juga dan matriks kovarians seperti yang diperkirakan dari data berada dalam jarak 8 × 10 - 5 dari C - yang dekat. Sebagai pemeriksaan yang lebih terperinci, koefisien C diplot terhadap perkiraannya. Mereka semua berada dekat dengan garis kesetaraan:50 8×10−5 C C
Kode tersebut persis paralel dengan analisis sebelumnya dan karenanya harus jelas (bahkan untuk non-D2 D
R
pengguna, yang mungkin meniru di lingkungan aplikasi favorit mereka). Satu hal yang diungkapkan adalah perlunya kehati-hatian ketika menggunakan algoritma floating-point: entri dapat dengan mudah menjadi negatif (tapi kecil) karena ketidaktepatan. Entri seperti itu perlu di-nolkan sebelum menghitung akar kuadrat untuk menemukan D itu sendiri.sumber
Metode Solusi A :
Dalam MATLAB, kodenya adalah
Metode Solusi B : Merumuskan dan menyelesaikan Convex SDP (Program Semidefinite) untuk menemukan matriks D ke C terdekat sesuai dengan norma frobenius perbedaan mereka, sehingga D adalah pasti positif, memiliki nilai eigen minimum yang ditentukan m.
Menggunakan CVX di bawah MATLAB, kodenya adalah:
Perbandingan Metode Solusi : Selain melakukan simetriisasi matriks awal, metode solusi A hanya menyesuaikan (meningkatkan) elemen diagonal dengan jumlah yang sama, dan membiarkan elemen off-diagonal tidak berubah. Metode solusi B menemukan matriks definit positif terdekat (ke matriks asli) yang memiliki nilai eigen minimum yang ditentukan, dalam arti norma frobenius minimum dari perbedaan matriks pasti positif D dan matriks C asli, yang didasarkan pada jumlah dari perbedaan kuadrat semua elemen D - C, untuk memasukkan elemen off-diagonal. Jadi dengan menyesuaikan elemen off-diagonal, itu dapat mengurangi jumlah dimana elemen diagonal perlu ditingkatkan, dan elemen diagoanl tidak harus semuanya meningkat dengan jumlah yang sama.
sumber
Saya akan mulai dengan memikirkan model yang Anda perkirakan.
Jika matriks kovarians tidak semi-pasti positif, itu mungkin menunjukkan bahwa Anda memiliki masalah colinearity dalam variabel Anda yang akan menunjukkan masalah dengan model dan tidak harus diselesaikan dengan metode numerik.
Jika matriks semidefinite tidak positif karena alasan numerik, maka ada beberapa solusi yang dapat dibaca di sini
sumber
Salah satu caranya adalah dengan menghitung matriks dari dekomposisi nilai eigen. Sekarang saya akui bahwa saya tidak tahu banyak tentang Matematika di balik proses-proses ini, tetapi dari penelitian saya tampaknya bermanfaat untuk melihat file bantuan ini:
http://stat.ethz.ch/R-manual/R-patched/library/Matrix/html/chol.html
dan beberapa perintah terkait lainnya di R.
Juga, periksa 'nearPD' dalam paket Matrix.
Maaf saya tidak bisa membantu tetapi saya berharap pencarian saya di sekitar dapat membantu mendorong Anda ke arah yang benar.
sumber
Anda bisa mendapatkan hasil dari fungsi nearPD dalam paket Matrix di R. Ini akan memberi Anda matriks bernilai kembali nyata.
sumber