Misalnya, dalam R
, MASS::mvrnorm()
fungsi ini berguna untuk menghasilkan data untuk menunjukkan berbagai hal dalam statistik. Dibutuhkan Sigma
argumen wajib yang merupakan matriks simetris yang menentukan matriks kovarians dari variabel. Bagaimana saya membuat simetris matriks dengan entri sewenang-wenang?
21
Jawaban:
Buat matriks A dengan nilai arbitrern×n A
dan kemudian gunakan sebagai matriks kovarians Anda.Σ=ATA
Sebagai contoh
sumber
Sigma <- A + t(A)
,.Saya suka memiliki kontrol atas objek yang saya buat, bahkan ketika mereka mungkin sewenang-wenang.
Pertimbangkan, kemudian, bahwa semua kemungkinan kovarians matriks Σ dapat dinyatakan dalam bentukn×n Σ
di mana adalah matriks ortogonal dan σ 1 ≥ σ 2 ≥ ⋯ ≥ σ n ≥ 0 .P σ1≥σ2≥⋯≥σn≥0
Secara geometris ini menggambarkan struktur kovarians dengan berbagai komponen utama ukuran . Komponen ini menunjukkan dalam arah dari barisan P . Lihat gambar di Membuat analisis komponen utama, vektor eigen & nilai eigen untuk contoh dengan n = 3 . Pengaturan σ i akan mengatur besaran kovarian dan ukuran relatifnya, sehingga menentukan bentuk ellipsoidal yang diinginkan. Baris P mengorientasikan sumbu bentuk yang Anda inginkan.σi P n=3 σi P
Salah satu manfaat aljabar dan komputasi dari pendekatan ini adalah ketika , Σ mudah terbalik (yang merupakan operasi umum pada matriks kovarians):σn>0 Σ
Tidak peduli dengan arah, tetapi hanya tentang rentang ukuran ? Tidak apa-apa: Anda dapat dengan mudah menghasilkan matriks ortogonal acak. Hanya membungkus n 2 nilai standar iid Normal ke dalam matriks persegi dan kemudian orthogonalize itu. Ini hampir pasti akan berhasil (asalkan n tidak besar). Dekomposisi QR akan melakukan itu, seperti dalam kode iniσi n2 n
Ini berfungsi karena distribusi multinormal -variat yang dihasilkan adalah "elips": ia tidak berubah dalam semua rotasi dan refleksi (melalui titik asal). Jadi, semua matriks ortogonal dihasilkan secara seragam, seperti yang diperdebatkan di Bagaimana menghasilkan titik-titik yang terdistribusi secara merata pada permukaan bola unit 3-d? .n
Cara cepat untuk mendapatkan dari P dan σ i , setelah Anda menentukan atau membuat mereka, menggunakan dan mengeksploitasi penggunaan kembali array dalam operasi aritmatika, seperti dalam contoh ini dengan σ = ( σ 1 , … , σ 5 ) = ( 5 , 4 , 3 , 2 , 1 ) :Σ P σi σ=(σ1,…,σ5)=(5,4,3,2,1)
crossprod
R
Sebagai tanda centang, dekomposisi Nilai Singular harus mengembalikan dan P ′ . Anda dapat memeriksanya dengan perintahσ P′
Sigma
zapsmall(Sigma %*% Tau)
sumber
svd(Sigma)
akan ditata ulang - yang membingungkan saya sebentar.Anda dapat mensimulasikan matriks definitif positif acak dari distribusi Wishart menggunakan fungsi "rWishart" dari paket "stats".
sumber
Ada paket khusus untuk itu,
clusterGeneration
(ditulis antara lain oleh Harry Joe, nama besar di bidang itu).Ada dua fungsi utama:
genPositiveDefMat
menghasilkan matriks kovarians, 4 metode berbedarcorrmatrix
: menghasilkan matriks korelasiContoh cepat:
Dibuat pada 2019-10-27 oleh paket reprex (v0.3.0)
Akhirnya, perhatikan bahwa pendekatan alternatif adalah melakukan percobaan pertama dari awal, kemudian gunakan
Matrix::nearPD()
untuk membuat matriks Anda pasti-positif.sumber