J'aime avoir le contrôle sur les objets que je crée, même s'ils peuvent être arbitraires.
Considérez donc que possible matrices de covariance Σ peut être exprimée sous la formen × nΣ
Σ = P′ Diagonal(σ1,σ2,…,σn) P
où est une matrice orthogonale et σ 1 ≥ σ 2 ≥ ⋯ ≥ σ n ≥ 0 .Pσ1≥σ2≥⋯≥σn≥0
Géométriquement, cela décrit une structure de covariance avec une gamme de composants principaux de tailles . Ces composants vont dans le sens des rangées de P . Voir les figures dans Comprendre l'analyse des composants principaux, les vecteurs propres et les valeurs propres pour des exemples avec n = 3 . La définition de σ i définira les amplitudes des covariances et leurs tailles relatives, déterminant ainsi toute forme ellipsoïdale souhaitée. Les rangées de P orientent les axes de la forme comme vous préférez.σiPn=3σjeP
Un avantage algébrique et informatique de cette approche est que lorsque , Σ est facilement inversé (ce qui est une opération courante sur les matrices de covariance):σn> 0Σ
Σ- 1= P′ Diagonale ( 1 / σ1, 1 / σ2, … , 1 /σn) P.
Ne se soucient pas des directions, mais seulement des plages de tailles du ? C'est très bien: vous pouvez facilement générer une matrice orthogonale aléatoire. Il suffit d'envelopper n 2 iid les valeurs normales standard dans une matrice carrée, puis de l'orthogonaliser. Cela fonctionnera presque sûrement (à condition que n ne soit pas énorme). La décomposition QR fera cela, comme dans ce codeσjen2n
n <- 5
p <- qr.Q(qr(matrix(rnorm(n^2), n)))
Cela fonctionne parce que la distribution multinormale à variables ainsi générée est "elliptique": elle est invariante sous toutes les rotations et réflexions (à travers l'origine). Ainsi, toutes les matrices orthogonales sont générées uniformément, comme expliqué dans Comment générer des points uniformément distribués sur la surface de la sphère unitaire 3D? .n
ΣPσjecrossprod
R
σ= ( σ1, … , Σ5) = ( 5 , 4 , 3 , 2 , 1 )
Sigma <- crossprod(p, p*(5:1))
σP′
svd(Sigma)
Sigma
σ
Tau <- crossprod(p, p/(5:1))
zapsmall(Sigma %*% Tau)
n × nσje≠ 01 / σjeσje