Je suis actuellement en train de valeurs Simuler d'une variable aléatoire de dimension qui a une distribution normale à plusieurs variables avec le vecteur moyen et covariance matrice .μ = ( μ 1 , . . . , Μ N ) T S
J'espère que d'utiliser une procédure similaire à la méthode CDF inverse, ce qui signifie que je veux d' abord générer une variable aléatoire de dimension uniforme puis branchez que dans le CDF inverse de cette distribution, afin de générer une valeur X .U X
J'ai des problèmes car la procédure n'est pas bien documentée et il y a de légères différences entre la fonction mvnrnd dans MATLAB et une description que j'ai trouvée sur Wikipedia .
Dans mon cas, je choisis également les paramètres de la distribution au hasard. En particulier, je génère chacun des moyens, , à partir d'une distribution uniforme U (20,40) . Je construis ensuite la matrice de covariance S en utilisant la procédure suivante: U ( 20 , 40 ) S
Créer une matrice triangulaire inférieure où pour et pour
Laissez où désigne la transposition de .
Cette procédure me permet de m'assurer que est symétrique et défini positif. Il fournit également une matrice triangulaire inférieure sorte que , qui je crois est nécessaire pour générer des valeurs à partir de la distribution.
En utilisant les directives de Wikipedia, je devrais être capable de générer des valeurs de utilisant un uniforme dimensionnel comme suit:
Cependant, selon la fonction MATLAB, cela se fait généralement comme suit:
Où est l'inverse d'un CDF répartition de dimension, dissociable, normal, et la seule différence entre les deux méthodes est simplement de savoir si l'utilisation ou . N L L T
MATLAB ou Wikipedia est-il la voie à suivre? Ou ont-ils tous les deux tort?
Réponses:
Si est un vecteur de colonne de la norme normale RV, alors si vous définissez Y = L X , la covariance de Y est L L T .X∼N(0,I) Y=LX Y LLT
Je pense que le problème que vous rencontrez peut provenir du fait que la fonction mvnrnd de matlab renvoie des vecteurs de ligne comme échantillons, même si vous spécifiez la moyenne comme vecteur de colonne. par exemple,
Et notez que la transformation d'un vecteur ligne vous donne la formule opposée. si est un vecteur ligne, alors Z = X L T est également un vecteur ligne, donc Z T = L X T est un vecteur colonne, et la covariance de Z T peut s'écrire E [ Z T Z ] = L L T .X Z=XLT ZT=LXT ZT E[ZTZ]=LLT
Sur la base de ce que vous avez écrit bien, la formule Wikipedia est correcte: si était un vecteur de ligne renvoyée par Matlab, vous ne pouvez pas gauche multiplier par L T . (Mais multiplier à droite par L T vous donnerait un échantillon avec la même covariance de L L T ).Φ−1(U) LT LT LLT
la source