Задать вопрос
@ehevnlem
Программирую с 1975, в интернете с 1993.

Как сгенерировать случайные величины с заданной функцией распределения и коэффициентом корреляции??

Здравствуйте ! Речь идёт о методе Монте Карло . Задана функция распределения случайной величины и коэффициент корреляции между двумя случайными величинами. Как сгенерировать случайные величины с заданной функцией и корреляцией?
  • Вопрос задан
  • 640 просмотров
Подписаться 3 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru Куратор тега Математика
Разработчик на С++, экс-олимпиадник.
В общем случае все сложно и тут как с интегрированием надо подходить с воображением и изобретательностью.

Вообще, не для любых функций распределения можно получить любую корреляцию. Например, вы никак не сможете добиться полной (corr=1) корреляции равномерно распределенной величины и нормально распределенной величины.

Но, если функция для обеих величин одинаковая, то есть, например, такой способ:
1) Сгенерируйте случайную величину a согласно функции распределения.
2) C вероятностью k выдайте это же значение как и вторую переменную (b=a).
3) C вероятностью 1-k сгенерируйте случайную величину b согласно той же функции распределения.

Этот способ выдаст коэффициент корреляции k. Если нужна отрицательная корреляция, то можно выдать b=2Ea-a во втором шаге (отражение относительно матожидания). Но тогда в третьем шаге плотность распределения будет уже не такая же как у a. Если заданная функия распределения f(x), то там надо использовать g(x)=(f(x) -kf(2Ea-x))/(1-k). Суть в том, чтобы g(x)*(1-k)+k*f(2Ea-x) = f(x) - и итоговая плотность распределения будет одинаковая.

Этот способ даст заданную корреляцию, но может вам не подходить, потому что там куча исходов, где обе величины равны.

Другой вариант, сгенерировать случайную величину a ~ f(x), потом взять b = k*a+c, где c - это какая-то независимая случайная величина, распределенная как-то хитро (об этом ниже). Регулируя k можно получать разный уровень корреляции. Удобно работать уже с центрированными случайными величинами. Пусть Ea = Eb = Ec= 0.

Тогда коэффициент корреляции будет E((ka+c)a)/D(a) = (kEa^2+Eac)/D(a) = kE(a^2)/D(a) = k. Потому что a и c независимые случайные величины и Eac = Ea*Ec = 0*0. А D(a) = E(a^2)-Ea*Ea = E(a^2)-0*0.

Пусть функция распределения a и b - F(x) (плотность f(x)). Искомая функция для c - G(x) (плотность g(x)).

Надо будет решить интегральное уравнение:
Int -int..inf g(t)f((x-t)/k)/k dt = f(t)

Лучше всего это через преобразование лапласа это решать. Теоремму о свертке и свойство умножения на число примените.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы