Как я могу генерировать случайные выборки из двумерных нормальных и ученических распределений T в C ++? - PullRequest
4 голосов
/ 24 января 2010

Каков наилучший подход для генерации случайных выборок из двумерных нормальных и ученических T-распределений? В обоих случаях сигма равна единице, значит 0, поэтому единственный параметр, который меня действительно интересует, - это корреляция (и степени свободы для студента t). Мне нужно иметь решение на C ++, поэтому я, к сожалению, не могу использовать уже реализованные функции из MatLab или Mathematica.

Ответы [ 3 ]

6 голосов
/ 24 января 2010

Вы можете использовать библиотеки GNU GSL. Смотрите здесь для нормального Bivariate:

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

и студенческий т-дистрибутив здесь:

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

Они просты в использовании.

4 голосов
/ 02 июля 2011

Для двумерной нормали с ковариационной единицей и нулевым средним, просто нарисуйте две одномерные нормали.

Если вы хотите нарисовать двумерную нормаль со средними (m1, m2), стандартными отклонениями (s1, s2) и корреляцией rho, то нарисуйте две единичные одномерные нормали X и Y и установите

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

Тогда вы и v распределяетесь по вашему желанию.

Для студента T вы должны нарисовать нормальную переменную N и переменную ch ^ 2 V. Затем N / sqrt (V) имеет распределение T.

Чтобы нарисовать Чи ^ 2, вы должны использовать пакет. Или посмотрите в главе 7 «Числовые рецепты», как рисовать из гамма-распределения (xhi ^ 2 - это особый случай гаммы).

3 голосов
/ 24 января 2010

Вам следует взглянуть на случайные распределения библиотек Boost - см. http://www.boost.org/doc/libs/1_41_0/libs/random/random-distributions.html. Я нашел их очень простыми в использовании, как только вы обдумаете их основные понятия. К сожалению, я не знаю достаточно о статистике, чтобы сказать вам, будут ли они точно соответствовать вашим потребностям.

...