Keyfi olsalar bile, oluşturduğum nesneler üzerinde kontrol sahibi olmayı seviyorum.
O halde, tüm olası kovaryans matrislerinin Σ formunda ifade edilebileceğini düşününn×nΣ
Σ=P′ Diagonal(σ1,σ2,…,σn) P
burada dik bir matris ve σ 1 ≥ σ 2 ≥ ⋯ ≥ σ n ≥ 0 .Pσ1≥σ2≥⋯≥σn≥0
Geometrik olarak bu, σ i boyutlarında bir dizi temel bileşen içeren bir kovaryans yapısını tarif eder . Bu bileşenler, P sıralarının yönlerini gösterir . N = 3 olan örnekler için Temel bileşen analizini, özvektörleri ve özdeğerlerini anlama konusundaki şekillere bakın . Ayar σ I ve böylece arzu edilen herhangi bir elips şeklini belirlemek, covariances ve göreli boyutları büyüklüğünü ayarlayacaktır. P satırları şeklin eksenlerini tercih ettiğiniz şekilde yönlendirir.σiPn=3σiP
Bu yaklaşımın bir cebirsel ve hesaplama yararı, , Σ kolayca ters çevrilmiş olmasıdır (bu kovaryans matrislerinde ortak bir işlemdir):σn>0Σ
Σ−1=P′ Diagonal(1/σ1,1/σ2,…,1/σn) P.
Yönleri umurumda değil, sadece boyut aralıkları hakkında ? Bu iyi: kolayca rastgele bir dik matris oluşturabilirsiniz. Standart Normal değerleri n 2 iid kare şeklinde bir matrise sarın ve dikleştirin. Neredeyse kesinlikle işe yarayacak ( n büyük değilse). QR ayrışması bunu bu kodda olduğu gibi yapacakσin2n
n <- 5
p <- qr.Q(qr(matrix(rnorm(n^2), n)))
Bu, bu şekilde üretilen değişken çok-dağılımlı "eliptik" olduğu için çalışır: tüm dönüşler ve yansımalar (başlangıç noktası boyunca) altında değişmez. Böylece, tüm ortogonal matrisler , 3-d birim kürenin yüzeyi üzerinde düzgün dağılmış noktalar nasıl oluşturulur? .n
Hızlı bir yolu elde etmek gelen P ve σ i bunları belirtilen veya oluşturduktan sonra, kullanır ve istismarlara ile bu örnekte olduğu gibi aritmetik operasyonlarda Dizilerin 'ın yeniden kullanımı σ = ( σ 1 , ... , σ 5 ) = ( 5 , 4 , 3 , 2 , 1 ) :ΣPσicrossprod
R
σ=(σ1,…,σ5)=(5,4,3,2,1)
Sigma <- crossprod(p, p*(5:1))
Çek olarak Tekil Değer ayrışma hem dönmelidir ve P ' . Bunu komutla inceleyebilirsiniz.σP′
svd(Sigma)
Sigma
Elbette tersi, sadece çarpımı bir bölüme değiştirerek elde edilir :σ
Tau <- crossprod(p, p/(5:1))
Bunu n × n kimlik matrisi zapsmall(Sigma %*% Tau)
olması gerekenleri görüntüleyerek doğrulayabilirsiniz . Bir genelleştirilmiş ters (regresyon hesaplamaları için gerekli) bir değiştirilmesi ile elde edilir σ i ≠ 0 ile 1 adet / σ i olarak yukarıdaki, ama arasında herhangi bir sıfır tutmak σ I de olduğu gibi.n×nσi≠01/σiσi