Diberikan matriks kovarians , bagaimana cara menghasilkan data sedemikian rupa sehingga memiliki sampel matriks kovarians \ hat {\ boldsymbol \ Sigma} = \ boldsymbol \ Sigma_s ?Σ = Σ s
Lebih umum: kita sering tertarik untuk menghasilkan data dari kepadatan , dengan data diberikan beberapa parameter vektor . Ini menghasilkan sampel, yang darinya kita dapat lagi memperkirakan nilai . Yang saya minati adalah masalah sebaliknya: Bagaimana jika kita diberikan seperangkat parameter , dan kami ingin membuat sampel sedemikian rupa, sehingga .
Apakah ini masalah yang diketahui? Apakah metode seperti itu bermanfaat? Apakah algoritma tersedia?
correlation
sampling
random-generation
covariance-matrix
Kees Mulder
sumber
sumber
Jawaban:
Ada dua situasi khas yang berbeda untuk masalah seperti ini:
i) Anda ingin menghasilkan sampel dari distribusi tertentu yang karakteristik populasinya cocok dengan yang ditentukan (tetapi karena variasi pengambilan sampel, Anda tidak memiliki karakteristik sampel yang sama persis).
ii) Anda ingin menghasilkan sampel yang karakteristik sampelnya cocok dengan yang ditentukan (tetapi, karena kendala pencocokan jumlah sampel dengan sekumpulan nilai yang ditentukan sebelumnya, tidak benar-benar berasal dari distribusi yang Anda inginkan).
Anda menginginkan case kedua - tetapi Anda mendapatkannya dengan mengikuti pendekatan yang sama dengan case pertama, dengan langkah standardisasi tambahan.
Jadi untuk normals multivariat, dapat dilakukan dengan cara yang cukup mudah:
Dengan case pertama Anda dapat menggunakan normals acak tanpa struktur populasi (seperti standar normal iid yang memiliki harapan 0 dan matriks kovarian identitas) dan kemudian memaksakannya - mentransformasikannya untuk mendapatkan matriks kovarians dan berarti yang Anda inginkan. Jika dan adalah rata-rata populasi dan kovarian yang Anda butuhkan dan adalah standar normal, Anda menghitung , untuk beberapa mana (misalnya sesuai dapat diperoleh melalui dekomposisi Cholesky) . Maka memiliki karakteristik populasi yang diinginkan.Σ z y = L z + μ L L L ' = Σ Lμ Σ z y= L z+ μ L. LL′=Σ L y
Dengan yang kedua, Anda harus terlebih dahulu mengubah normals acak Anda untuk menghapus bahkan variasi acak menjauh dari mean nol dan kovarian identitas (membuat sampel berarti nol dan sampel kovarian ), kemudian melanjutkan seperti sebelumnya. Tapi itu langkah awal menghapus deviasi sampel dari mean tepat , varian mengganggu distribusi. (Dalam sampel kecil itu bisa sangat parah.) 0 IIn 0 I
Ini dapat dilakukan dengan mengurangi mean sampel dari ( ) dan menghitung dekomposisi Cholesky dari . Jika adalah faktor Cholesky kiri, maka harus memiliki mean sampel 0 dan kovarians sampel identitas. Anda kemudian dapat menghitung dan memiliki sampel dengan momen sampel yang diinginkan. (Tergantung pada bagaimana jumlah sampel Anda didefinisikan, mungkin ada biola kecil ekstra yang terlibat dengan mengalikan / membagi dengan faktor-faktor seperti , tetapi cukup mudah untuk mengidentifikasi kebutuhan itu.)z ∗ = z - ˉ z z ∗ L ∗ z ( 0 ) = ( L ∗ ) - 1 z ∗ y = L z ( 0 ) + μ √z z∗=z−z¯ z∗ L∗ z(0)=(L∗)−1z∗ y=Lz(0)+μ n−1n−−−√
sumber
@ Glen_b memberikan jawaban yang baik (+1), yang ingin saya ilustrasikan dengan beberapa kode.
Bagaimana cara menghasilkan sampel dari distribusi Gaussian multivariat dimensional dengan matriks kovarians yang diberikan ? Ini mudah dilakukan dengan menghasilkan sampel dari Gaussian standar dan mengalikannya dengan akar kuadrat dari matriks kovarian, misalnya dengan . Ini tercakup dalam banyak utas pada CV, misalnya di sini: Bagaimana saya bisa menghasilkan data dengan matriks korelasi yang ditentukan sebelumnya? Berikut ini adalah implementasi Matlab sederhana:d Σ c h o l ( Σ )n d Σ chol(Σ)
Matriks kovarian sampel dari data yang dihasilkan tentu saja tidak persis ; misalnya dalam contoh pengembalian di atasΣ
cov(X)
Bagaimana cara menghasilkan data dengan sampel korelasi atau matriks kovarians yang ditentukan sebelumnya ?
Seperti yang ditulis @Glen_b, setelah menghasilkan data dari Gaussian standar, pusat, memutihkan, dan membakukannya, sehingga ia memiliki sampel matriks kovarians ; baru kemudian kalikan dengan .c h o l ( Σ )I chol(Σ)
Ini adalah kelanjutan dari contoh Matlab saya:
Sekarang
cov(X)
, sesuai kebutuhan, kembalisumber