2010-12-06 29 views
4

Dans matlab, il est facile de générer un vecteur aléatoire normalement distribué avec une moyenne et un écart-type. À partir de l'aide randn:génération de vecteur aléatoire normalement distribué avec matrice de covariance

Générer des valeurs à partir d'une distribution normale avec la moyenne 1 et l'écart standard 2. r = 1 + 2. * randn (100,1);

Maintenant, j'ai une matrice de covariance C et je veux générer N (0, C).

Mais comment pourrais-je faire cela?

A partir de l'aide de randn: Génère des valeurs à partir d'une distribution normale bivariée avec un vecteur moyen spécifié et une matrice de covariance. mu = [1 2]; Sigma = [1,5; .5 2]; R = chol (Sigma); z = repmat (mu, 100,1) + randn (100,2) * R;

Mais je ne sais pas exactement ce qu'ils font ici.

+1

Quelle partie ne comprenez-vous pas? 'mu' est le vecteur moyen (dans votre cas 0, laissez-le ainsi),' Sigma' est la matrice de covariance, et ils génèrent 100 paires de nombres aléatoires. – Donnie

+0

Je ne comprends pas la partie repmat. Est-il également possible de le faire de cette façon: chol (C, 'inférieur') + randn (N, 1); avec C la matrice de covariance – Derk

+0

Désolé, je pense que je comprends maintenant. Le repmat est utilisé pour construire une matrice moyenne pour 100 paires de nombres aléatoires. – Derk

Répondre

3

Vous pouvez utiliser la fonction Matlab intégrée ci-dessous pour faire votre travail

mvnrnd(mu,SIGMA) 
4

C'est un peu une question mathématique, pas une question de programmation. Mais je suis un grand fan de l'écriture de code génial qui nécessite à la fois de solides connaissances en mathématiques et en programmation, alors je vais écrire ceci pour la postérité.

Vous devez prendre la décomposition de Cholesky (ou toute décomposition/racine carrée d'une matrice) pour générer des variables aléatoires corrélées à partir de variables indépendantes. En effet, si X est une normale multivariée avec m moyenne et la covariance D, alors Y = AX est une normale multivariée avec la moyenne Am et la matrice de covariance ADA'A' est la transpose. Si D est la matrice d'identité, alors la matrice de covariance est juste AA' que vous voulez être égale à la matrice de covariance C que vous essayez de générer.

La décomposition de Cholesky calcule une telle matrice A et est la manière la plus efficace de le faire.

Pour plus d'informations, voir: http://web.as.uky.edu/statistics/users/viele/sta601s03/multnorm.pdf