2010-01-24 3 views
4

Quelle est la meilleure approche pour générer des échantillons aléatoires à partir de distributions T bivariées normales et étudiantes? Dans les deux cas sigma est un, signifie 0 - donc le seul paramètre qui m'intéresse vraiment est la corrélation (et les degrés de liberté pour l'étudiant t). J'ai besoin de la solution en C++, donc je ne peux malheureusement pas utiliser les fonctions déjà implémentées depuis MatLab ou Mathematica.Comment puis-je générer des échantillons aléatoires à partir de distributions bivariées normales et de Student T en C++?

+0

rho est la corrélation, pas la covariance. –

Répondre

6

Vous pouvez utiliser les bibliothèques GNU GSL. Voir ici pour Bivariée normal:

http://www.gnu.org/software/gsl/manual/html_node/The-Bivariate-Gaussian-Distribution.html

et distribution t de Student ici:

http://www.gnu.org/software/gsl/manual/html_node/The-t_002ddistribution.html

Ils sont simples à utiliser.

+0

Cool, ils ont le gaussien bivarié, mais l'étudiant T semble être seulement univarié :( – Grzenio

+0

Vous pouvez simuler à partir d'une distribution t multivariée en utilisant la représentation de le t multivarié en termes de distribution multivariée et de distribution chi2 GSL a MVN et Chi2, donc vous êtes en jeu. Voir le premier paragraphe: http://en.wikipedia.org/wiki/Multivariate_Student_distribution. – Tristan

3

Vous devriez jeter un coup d'œil aux distributions aléatoires des bibliothèques Boost - voir http://www.boost.org/doc/libs/1_41_0/libs/random/random-distributions.html. Je les ai trouvés très faciles à utiliser, une fois que vous envelopper votre tête autour de leurs concepts de base. Malheureusement, je ne connais pas assez les statistiques pour vous dire si elles répondront exactement à vos besoins.

+0

Ils ne semblent pas mettre en œuvre l'une des distributions que je suis après :( – Grzenio

4

Pour un normal bivarié avec une unité de covariance et une moyenne nulle, il suffit de dessiner deux normales univariées.

Si vous voulez dessiner un bivariée normale avec des moyens (m1, m2), les écarts-types (s1, s2) et la corrélation rho, puis dessinez deux unités normals univariée X et Y et mis

u = m1 + s1 * X 
v = m2 + s2 * (rho X + sqrt(1 - rho^2) Y) 

Ensuite, u et v sont distribués comme vous le souhaitez. Pour le Student T, vous devez tracer une variance normale N et une variable V de chi^2. Ensuite, N/sqrt (V) a la distribution T.

Pour dessiner le chi^2, vous devez utiliser un paquet. Ou jetez un oeil au chapitre 7 sur les recettes numériques pour savoir comment dessiner à partir d'une distribution Gamma (xhi^2 est un cas particulier de Gamma).

Questions connexes