Корреляция дискретных и непрерывных случайных величин

vingur

Подскажите, кто знает, корректно ли?
Есть несколько случайных величин с абсолютно разными законами распределения (как дискретные, так и непрерывные). Между любыми двумя из них задается коэффициент корреляции [-1;1] - получается симметричная матрица.
Задача - корректное формирования коррелированных случайных величин согласно заданных выше параметров.
Решение:
1. Генерируем независимые СВ по заданным законам распределения
2. Нормируем их (т.е. вычитаем матожидание и делим на дисперсию)
3. По матрице корреляции преобразованием Грамма находим соответствующую треугольную матрицу
4. Перемножаем вектор независимых CD на эту матрицу
5. Теперь делаем преобразование, обратное нормировке (Умножаем на дисперсию, прибавляем матожидание)
6. Для дискретных величин присваиваем ближайшие (целые) значения из области определения.
Где я ошибся или недодумал? Где можно подробно прочитать про весь этот процесс или исходники глянуть?
Спасибо.

griz_a

Вы ошиблись в том, что толком не сформулировали задачу

vladnanu

Андрюша, пиши мне в личку, помогу по старой дружбе.

stm8853410

Кажется, он хочет по заданной матрице корреляций размера N x N построить N случайных величин с такой матрицей.
Если это так, то нужно всего лишь построить в R^N N векторов с нужными скалярными произведениями, а потом сказать, что вероятностное пространство — это множество координат.
Ещё можно, например, построить многомерное нормальное распределение с нужной матрицей — там явные формулы зависимости ковариаций от параметров.

vladnanu

Учитывая специфику его работы, предположу, что есть случайный вектор
(\xi, \eta, \zeta,....) известны маргинальные распределения каждой компоненты и матрица корреляций.
Нужно написать генератор, выдающий реализации такого вектора.

vingur

Спасибо за обсуждение.
Формулирую подробнее, хотя вроде бы вы меня поняли (кроме админа, заблокировавшего зачем то тему)
Все дело в Монте-Карло, которым хочется варьировать любую модель (будь то подсчет запасов или страхование или расчет портфельных рисков). Для этого выбранные пользователем входные переменные модели (N штук) варьируются по своим законам распределения (тип и параметры их задает пользователь). Какие то переменные (например количество продаж) могут моделироваться и дискретными законами распределения. Тем не менее, есть между ними иногда взаимосвязь, о которой может догадываться пользователь - в общем случае это матрица корреляции N на N, как было правильно замечено.
Разложением Холецкого можно получить вектор нормально Gauss(0,1) распределенных СВ с заданной матрицей, но на вскидку не знаю переход к любому распределению от гауссова.
Буду благодарен, если кто то наставит на путь истинный для реализации на языке программирования такой вот функциональности.

stm8853410

Вот идея, работает, видимо, не во всех случаях, но при малых корреляциях вроде должно прокатывать.
1) Достаточно научиться это делать в тех случаях, когда матожидания всех величин нули.
2) Сначала надо взять обычный N-мерный гауссовский вектор X с единичной матрицей корреляций.
3) Будем искать каждую случайную величину в виде F_i = p_i (X, h_i).
Здесь p_i — это фиксированная функция одного аргумента, скобки — скалярное произведение, а h_i — фиксированный вектор единичной длины. Иными словами, мы хотим получить N функций p и N векторов h так, чтобы процесс генерации выглядел следующим образом: а) сгенерировать многомерный вектор Х б) посчитать N скалярных произведений в) подставить эти N чисел в N функций.
4) Понятно, что так как нормальное распределение сферически симметрично, распределение величины p_i(Х, h_i) не зависит от h_i и зависит только от p_i. Функцию p_i можно подобрать многими способами, например, если p_i(x) = x, то p_i(Х, h_i) нормально распределена. Тут можно варьировать, но. кажется. лучше строить p_i так, чтобы она монотонно возрастала.
5) Пусть уже выбраны функции p_1, p_2. Тогда корреляция величин p_1(X, h_1) и p_2(X, h_2) зависит только от скалярного произведения векторов h_1 и h_2. Эта зависимость непрерывна, и нужное скалярное произведение можно пытаться приближённо найти бинпоиском. Кажется, что если функции h_i монотонные, то при совпадающих h_1 и h_2 корреляция максимальна, а при противоположных — минимальна.
6) Если мы определили, какие должны быть попарные скалярные произведения (h_i, h_j то если полученная матрица окажется неотрицательно определённой, всё будет ОК: можно построить N векторов с нужными скалярными произведениями.
В этом подходе главная трудность — функции p_i можно брать многими способами, но непонятно, как лучше это делать (чтобы матрица получилась неотрицательно определённая).

vladnanu

Проблема в том, что тебе надо попасть в маргинальные распределения.
то есть чтобы твои p_i(X,h_i) имело определенную функцию распределения, которая заранее задана.
При этом корреляции для пар величин Y_i = p_i(X,h_i) и Y_j = p_j(X,h_j)
Не будет совпедеть со скалярням произведлением (h_i, h_j). Их тоже надо подбирать правильно.

stm8853410

Я об этом и писал.
Подбор функций p_i — вычислительная задача. Если на p_i наложить условие монотонности, то решение единственно и получается так:
пусть F — нужная функция распределения, R — функция распределения нормальной случайной величины. Тогда получается что-то типа p_i(x) = F^{-1}(R(x.
Подбор скалярных произведений (h_i, h_i) - ещё более сложная задача (если вообще решаемая).
Но, как я понимаю, сложности на _этом_ этапе не должны пугать, если потом всё будет хорошо генериться?

vladnanu

Подбор функций p_i — вычислительная задача.
Их не надо подбирать, они по сути заданы маргинальными распределениями. Подбирать надо коэффициенты корреляции для гауссовских величин (то, что ты называешь h_i) так, чтобы после преобразования p корреляции бились.
Наверно, это как-то вычислительно можно сделать, но расписывать сейчас нет времени.

stm8853410

 
Их не надо подбирать, они по сути заданы маргинальными распределениями.
Ты права, я выше дописал.
Наверно, это как-то вычислительно можно сделать,

Кажется, можно показать, что корреляции монотонны и дифференцируемы по скалярным произведениям. Наверное, метод хорд должен это дело быстро подбирать, но да, тут надо думать.

griz_a

Теперь еще раз попробуем перевести задачу на русский.
Есть N распределений и корреляционная матрица. Хочется построить вектор с такой матрицей и такими маргинальными распределениями?
Вообще говоря, для абы какой матрицы такого сделать просто не удастся.

vingur

Благодаря обсуждению нашел вот этот пакет UNU.RAN с методом NOTRTA (Normal To Anything) - надеюсь этого хватит, буду разбираться.
Оставить комментарий
Имя или ник:
Комментарий: