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Σ
Σ=P′ Diagonal(σ1,σ2,…,σn) P
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.σiPn=3σiP
Salah satu manfaat aljabar dan komputasi dari pendekatan ini adalah ketika , Σ mudah terbalik (yang merupakan operasi umum pada matriks kovarians):σn>0Σ
Σ−1=P′ Diagonal(1/σ1,1/σ2,…,1/σn) P.
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σin2n
n <- 5
p <- qr.Q(qr(matrix(rnorm(n^2), 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σicrossprod
R
σ=(σ1,…,σ5)=(5,4,3,2,1)
Sigma <- crossprod(p, p*(5:1))
Sebagai tanda centang, dekomposisi Nilai Singular harus mengembalikan dan P ′ . Anda dapat memeriksanya dengan perintahσP′
svd(Sigma)
Sigma
σ
Tau <- crossprod(p, p/(5:1))
zapsmall(Sigma %*% Tau)
n×nσi≠01/σiσi